void C4GoalDisplay::SetGoals(const C4IDList &rAllGoals, const C4IDList &rFulfilledGoals, int32_t iGoalSymbolHeight) { // clear previous ClearChildren(); // determine goal display area by goal count int32_t iGoalSymbolMargin = C4GUI_DefDlgSmallIndent; int32_t iGoalSymbolAreaHeight = 2*iGoalSymbolMargin + iGoalSymbolHeight; int32_t iGoalAreaWdt = GetClientRect().Wdt; int32_t iGoalsPerRow = Max<int32_t>(1, iGoalAreaWdt / iGoalSymbolAreaHeight); int32_t iGoalCount = rAllGoals.GetNumberOfIDs(); int32_t iRowCount = (iGoalCount-1) / iGoalsPerRow + 1; C4Rect rcNewBounds = GetBounds(); rcNewBounds.Hgt = GetMarginTop()+GetMarginBottom()+iRowCount*iGoalSymbolAreaHeight; SetBounds(rcNewBounds); C4GUI::ComponentAligner caAll(GetClientRect(), 0,0, true); // place goal symbols in this area int32_t iGoal = 0; for (int32_t iRow=0; iRow<iRowCount; ++iRow) { int32_t iColCount = Min<int32_t>(iGoalCount - iGoal, iGoalsPerRow); C4GUI::ComponentAligner caGoalArea(caAll.GetFromTop(iGoalSymbolAreaHeight, iColCount*iGoalSymbolAreaHeight), iGoalSymbolMargin,iGoalSymbolMargin, false); for (int32_t iCol=0; iCol<iColCount; ++iCol,++iGoal) { C4ID idGoal = rAllGoals.GetID(iGoal); bool fFulfilled = !!rFulfilledGoals.GetIDCount(idGoal, 1); AddElement(new GoalPicture(caGoalArea.GetGridCell(iCol, iColCount, iRow, iRowCount), idGoal, fFulfilled)); } } }
bool C4Object::CreateContentsByList(C4IDList &idlist) { int32_t cnt,cnt2; for (cnt=0; idlist.GetID(cnt); cnt++) for (cnt2=0; cnt2<idlist.GetCount(cnt); cnt2++) if (!CreateContents(C4Id2Def(idlist.GetID(cnt)))) return false; return true; }
void C4SPlrStart::CompileFunc(StdCompiler *pComp) { C4IDList crewDefault; crewDefault.SetIDCount(C4ID::Clonk,1,true); pComp->Value(mkNamingAdapt(Wealth, "Wealth", C4SVal(0, 0, 0,250), true)); pComp->Value(mkNamingAdapt(mkArrayAdaptDM(Position,-1), "Position" )); pComp->Value(mkNamingAdapt(EnforcePosition, "EnforcePosition", 0)); pComp->Value(mkNamingAdapt(ReadyCrew, "Crew", crewDefault)); pComp->Value(mkNamingAdapt(ReadyBase, "Buildings", C4IDList())); pComp->Value(mkNamingAdapt(ReadyVehic, "Vehicles", C4IDList())); pComp->Value(mkNamingAdapt(ReadyMaterial, "Material", C4IDList())); pComp->Value(mkNamingAdapt(BuildKnowledge, "Knowledge", C4IDList())); pComp->Value(mkNamingAdapt(BaseMaterial, "BaseMaterial", C4IDList())); pComp->Value(mkNamingAdapt(BaseProduction, "BaseProduction", C4IDList())); }
void C4RoundResults::EvaluateGoals(C4IDList &GoalList, C4IDList &FulfilledGoalList, int32_t iPlayerNumber) { // clear prev GoalList.Clear(); FulfilledGoalList.Clear(); // Items int32_t cnt; C4ID idGoal; for (cnt=0; (idGoal=::Objects.GetListID(C4D_Goal,cnt)); cnt++) { // determine if the goal is fulfilled - do the calls even if the menu is not to be opened to ensure synchronization bool fFulfilled = false;; C4Object *pObj = C4Id2Def(idGoal) ? ::Objects.Find(::Definitions.ID2Def(idGoal)) : NULL; if (pObj) { // Check fulfilled per player, this enables the possibility of rivalry. C4AulParSet pars(iPlayerNumber); fFulfilled = !!pObj->Call(PSF_IsFulfilled, &pars); } GoalList.SetIDCount(idGoal, cnt, true); if (fFulfilled) FulfilledGoalList.SetIDCount(idGoal, 1, true); } }