/* Copyright (C) 2009 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * 0 A.D. is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with 0 A.D. If not, see . */ #include "precompiled.h" #include "Formation.h" #include "ps/CLogger.h" #include "ps/CStr.h" #include "maths/MathUtil.h" #define LOG_CATEGORY L"Formation" CFormation::CFormation() { m_numSlots = 0; } bool CFormation::LoadXml(const VfsPath& filename) { CXeromyces XeroFile; if (XeroFile.Load(filename) != PSRETURN_OK) return false; #define EL(x) int el_##x = XeroFile.GetElementID(#x) #define AT(x) int at_##x = XeroFile.GetAttributeID(#x) EL(formation); EL(fl); EL(rk); EL(blank); AT(tag); AT(bonus); AT(bonusbase); AT(bonustype); AT(bonusval); AT(penalty); AT(penaltybase); AT(penaltytype); AT(penaltyval); AT(anglepenalty); AT(anglepenaltydivs); AT(anglepenaltytype); AT(anglepenaltyval); AT(required); AT(next); AT(prior); AT(movement); AT(filespacing); AT(rankspacing); AT(category); AT(order); #undef AT #undef EL XMBElement Root = XeroFile.GetRoot(); if( Root.GetNodeName() != el_formation ) { LOG(CLogger::Error, LOG_CATEGORY, L"CFormation::LoadXml: XML root was not \"Formation\" in file %ls. Load failed.", filename.string().c_str() ); return( false ); } //Load in single attributes XMBAttributeList Attributes = Root.GetAttributes(); for ( int i=0; i maxrank ) maxrank = rank; ++file; } //if el_fl else if ( ChildName == el_blank ) ++file; } float centerx = maxrank * m_rankSpacing / 2.0f; float centery = file * m_fileSpacing / 2.0f; //Here we check to make sure no order was skipped over. If so, failure, because we rely //on a linearly accessible slots in entityformation.cpp. for ( size_t i=0; i