Proper build UI
This commit is contained in:
@@ -13,6 +13,9 @@ bool canPlaceBuilding(Game *game, BuildingType type, BzTile tileX, BzTile tileY)
|
||||
getBuildingSize(type, &sizeX, &sizeY);
|
||||
if (sizeX == 0 || sizeY == 0) return false;
|
||||
|
||||
if (!canAffordBuilding(type, game->playerResources[game->player]))
|
||||
return false;
|
||||
|
||||
BzTileMap *map = &game->map;
|
||||
// Ensure that it is within the map
|
||||
if (tileX < 0 || tileX + sizeX > map->width ||
|
||||
@@ -92,6 +95,67 @@ ecs_entity_t placeBuilding(Game *game, BuildingType type,
|
||||
|
||||
}
|
||||
|
||||
void getBuildingCost(BuildingType type, i32 cost[RES_COUNT]) {
|
||||
for (i32 i = 0; i < RES_COUNT; i++) {
|
||||
cost[i] = 0;
|
||||
}
|
||||
switch (type) {
|
||||
case BUILDING_ARCHERY_RANGE:
|
||||
cost[RES_WOOD] = 400;
|
||||
cost[RES_FOOD] = 400;
|
||||
cost[RES_GOLD] = 200;
|
||||
break;
|
||||
case BUILDING_BARRACKS:
|
||||
cost[RES_WOOD] = 200;
|
||||
cost[RES_FOOD] = 400;
|
||||
cost[RES_GOLD] = 500;
|
||||
break;
|
||||
case BUILDING_GRANARY:
|
||||
cost[RES_WOOD] = 80;
|
||||
break;
|
||||
case BUILDING_HOUSE_01:
|
||||
case BUILDING_HOUSE_02:
|
||||
case BUILDING_HOUSE_03:
|
||||
case BUILDING_HOUSE_04:
|
||||
case BUILDING_HOUSE_05:
|
||||
case BUILDING_HOUSE_06:
|
||||
case BUILDING_HOUSE_07:
|
||||
case BUILDING_HOUSE_08:
|
||||
case BUILDING_HOUSE_09:
|
||||
case BUILDING_HOUSE_10:
|
||||
case BUILDING_HOUSE_11:
|
||||
case BUILDING_HOUSE_12:
|
||||
cost[RES_WOOD] = 50;
|
||||
break;
|
||||
case BUILDING_MARKET:
|
||||
cost[RES_WOOD] = 200;
|
||||
cost[RES_FOOD] = 200;
|
||||
cost[RES_GOLD] = 200;
|
||||
break;
|
||||
case BUILDING_MILL:
|
||||
cost[RES_WOOD] = 200;
|
||||
cost[RES_GOLD] = 50;
|
||||
break;
|
||||
case BUILDING_WAREHOUSE:
|
||||
cost[RES_WOOD] = 100;
|
||||
break;
|
||||
case BUILDING_NONE:
|
||||
case BUILDING_KEEP:
|
||||
case BUILDING_COUNT:
|
||||
// NA
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool canAffordBuilding(BuildingType type, PlayerResources res) {
|
||||
i32 needed[RES_COUNT] = {0, };
|
||||
getBuildingCost(type, needed);
|
||||
|
||||
if (needed[RES_WOOD] > res.wood) return false;
|
||||
if (needed[RES_FOOD] > res.food) return false;
|
||||
if (needed[RES_GOLD] > res.gold) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
Vector2 getPositionNearBuilding(ecs_entity_t building, Vector2 fromPos) {
|
||||
BZ_ASSERT(ecs_is_alive(ECS, building));
|
||||
BZ_ASSERT(ecs_has(ECS, building, Position));
|
||||
|
||||
Reference in New Issue
Block a user