public static function FromIDResource(IDResource $resource, $position, $oldPosition, $scheduledTime, BuildGroup $bg = NULL) { $buildItem = new BuildItem(); $buildItem->Name($resource->Name()); $buildItem->Cost($resource->Cost()); $buildItem->NextCostModifier($resource->NextCostModifier()); $buildItem->Prerequisite($resource->Prerequisite()); $buildItem->ID($resource->ID()); $buildItem->Amount($resource->Amount(), false); $buildItem->PositionInList($position, false); $buildItem->OldPositionInList($oldPosition, false); $buildItem->FirstBuildTime($scheduledTime); $buildItem->HasChanged(false); $buildItem->BuildGroup($bg); return $buildItem; }
public function AddUnit(BuildItem $unit) { $amount = 1; $name = $unit->Name(); if ($unit->IsBuilding()) { $origAmount = $this->Buildings()->GetMemberByName($name)->Amount(); $this->Buildings()->GetMemberByName($name)->Amount($origAmount + $amount); } if ($unit->IsShip()) { $origAmount = $this->Fleet()->GetMemberByName($name)->Amount(); $this->Fleet()->GetMemberByName($name)->Amount($origAmount + $amount); } if ($unit->IsDefense()) { $origAmount = $this->Defenses()->GetMemberByName($name)->Amount(); $this->Defenses()->GetMemberByName($name)->Amount($origAmount + $amount); } // TODO: add missiles here }
protected function CalculateNextBuildLevel(BuildItem $item, $alreadyBuiltLevels) { $scheduledLevelTotal = 0; // First, look through the database list. // If it's empty, it means the current BuildGroup IS the database list! We look through that list below. if ($item->BuildGroup()->ItemsInDatabase() != NULL) { foreach ($item->BuildGroup()->ItemsInDatabase() as $buildItem) { // We're only interested in items scheduled before us, not in the future! if ($buildItem->PositionInList() < $item->PositionInList()) { if ($buildItem->Name() === $this->Name()) { $scheduledLevelTotal += $buildItem->Amount(); } } } } // Next, look through the current BuildGroup, we may have requested units like these before (but they're not in the database yet) foreach ($item->BuildGroup()->Members() as $buildItem) { // We're only interested in items scheduled before us, not in the future! if ($buildItem->PositionInList() < $item->PositionInList()) { if ($buildItem->Name() === $this->Name()) { $scheduledLevelTotal += $buildItem->Amount(); } } } echo "<pre>the next buildLevel return of " . $item->Name() . " is " . ($alreadyBuiltLevels + $scheduledLevelTotal + 1) . ".</pre>"; return $alreadyBuiltLevels + $scheduledLevelTotal + 1; }