adding farms

This commit is contained in:
hz
2026-05-19 15:40:31 -05:00
parent 0757344bdf
commit 864835a8f9
11 changed files with 241 additions and 39 deletions
@@ -28,7 +28,7 @@ var escape_panel: PanelContainer
var gold_label: Label
var tick_bar: ProgressBar
var tick_label: Label
var resource_text := "Gold: --\nWood: --\nOre: --"
var resource_text := "Gold: --\nWood: --\nOre: --\nFood: --"
var gold_tick_anchor_unix := 0.0
var gold_tick_seconds := 60.0
var train_button: Button
@@ -53,6 +53,7 @@ var active_training_label := "Training"
var claim_button: Button
var build_log_camp_button: Button
var build_mine_button: Button
var build_farm_button: Button
var build_barracks_button: Button
var unit_action_popup: PopupPanel
var unit_action_move_button: Button
@@ -61,6 +62,7 @@ var selected_r := 0
var selected_can_claim := false
var selected_can_build_log_camp := false
var selected_can_build_mine := false
var selected_can_build_farm := false
var selected_can_build_barracks := false
var selected_can_train_archer := false
var selected_is_home := false
@@ -236,6 +238,11 @@ func _build_ui() -> void:
build_mine_button.pressed.connect(_build_mine)
action_buttons.add_child(build_mine_button)
build_farm_button = _small_button("Build Farm")
build_farm_button.visible = false
build_farm_button.pressed.connect(_build_farm)
action_buttons.add_child(build_farm_button)
build_barracks_button = _small_button("Build Barracks")
build_barracks_button.visible = false
build_barracks_button.pressed.connect(_build_barracks)
@@ -455,6 +462,7 @@ func _on_tile_selected(q: int, r: int, terrain: String) -> void:
selected_is_home = _selected_tile_is_home()
selected_can_build_log_camp = _can_build_log_camp_on_selected_tile()
selected_can_build_mine = _can_build_mine_on_selected_tile()
selected_can_build_farm = _can_build_farm_on_selected_tile()
selected_can_build_barracks = _can_build_barracks_on_selected_tile()
selected_can_train_archer = _selected_tile_has_built_barracks()
_update_action_buttons()
@@ -532,6 +540,10 @@ func _can_build_mine_on_selected_tile() -> bool:
return _can_build_on_selected_tile("Ore")
func _can_build_farm_on_selected_tile() -> bool:
return _can_build_on_selected_tile("Field")
func _can_build_barracks_on_selected_tile() -> bool:
if not _can_build_on_selected_tile(""):
return false
@@ -577,6 +589,9 @@ func _update_action_buttons() -> void:
if build_mine_button:
build_mine_button.visible = selected_can_build_mine
build_mine_button.disabled = false
if build_farm_button:
build_farm_button.visible = selected_can_build_farm
build_farm_button.disabled = false
if build_barracks_button:
build_barracks_button.visible = selected_can_build_barracks
build_barracks_button.disabled = false
@@ -832,7 +847,7 @@ func _refresh_player_state() -> void:
func _load_resources() -> void:
var access_token: String = str(session.get("accessToken", ""))
if access_token.is_empty():
resource_text = "Gold: --\nWood: --\nOre: --"
resource_text = "Gold: --\nWood: --\nOre: --\nFood: --"
gold_label.text = resource_text
return
@@ -873,7 +888,10 @@ func _on_resources_request_completed(result: int, response_code: int, _headers:
var ore: int = int(resources.get("ore", 0))
var ore_per_minute: int = int(resources.get("orePerMinute", 0))
var ore_capacity: int = int(resources.get("oreCapacity", 100))
resource_text = "Gold: %d/%d (+%d/min)\nWood: %d/%d (+%d/min)\nOre: %d/%d (+%d/min)" % [
var food: int = int(resources.get("food", 0))
var food_per_minute: int = int(resources.get("foodPerMinute", 0))
var food_capacity: int = int(resources.get("foodCapacity", 100))
resource_text = "Gold: %d/%d (+%d/min)\nWood: %d/%d (+%d/min)\nOre: %d/%d (+%d/min)\nFood: %d/%d (+%d/min)" % [
gold,
gold_capacity,
gold_per_minute,
@@ -882,7 +900,10 @@ func _on_resources_request_completed(result: int, response_code: int, _headers:
wood_per_minute,
ore,
ore_capacity,
ore_per_minute
ore_per_minute,
food,
food_capacity,
food_per_minute
]
gold_label.text = resource_text
@@ -1156,6 +1177,14 @@ func _build_mine() -> void:
_request_building("Mine")
func _build_farm() -> void:
if not selected_can_build_farm:
coordinate_label.text = "Select controlled Field territory without a building."
return
_request_building("Farm")
func _build_barracks() -> void:
if not selected_can_build_barracks:
coordinate_label.text = "Select controlled territory without a building."
@@ -1176,6 +1205,8 @@ func _request_building(building_type: String) -> void:
match building_type:
"Mine":
build_mine_button.disabled = true
"Farm":
build_farm_button.disabled = true
"Barracks":
build_barracks_button.disabled = true
_:
@@ -1348,6 +1379,8 @@ func _building_display_name(building_type: String) -> String:
return "Log Camp"
"Mine":
return "Mine"
"Farm":
return "Farm"
"Barracks":
return "Barracks"
_:
@@ -184,6 +184,8 @@ func _draw_tile(tile: Dictionary) -> void:
_draw_log_camp_marker(center, height)
elif building_type == "Mine" and (building_status == "Built" or building_status.is_empty()):
_draw_mine_marker(center, height)
elif building_type == "Farm" and (building_status == "Built" or building_status.is_empty()):
_draw_farm_marker(center, height)
elif building_type == "Barracks" and (building_status == "Built" or building_status.is_empty()):
_draw_barracks_marker(center, height)
elif not building_type.is_empty():
@@ -356,6 +358,33 @@ func _draw_mine_marker(center: Vector2, height: float) -> void:
draw_circle(marker_center + Vector2(width * 0.34, -marker_height * 0.1), 2.0 * zoom, ore_color)
func _draw_farm_marker(center: Vector2, height: float) -> void:
var marker_center: Vector2 = center + Vector2(0, -height * zoom - 2.0)
var width: float = 22.0 * zoom
var crop_color := Color(0.76, 0.67, 0.28)
var soil_color := Color(0.34, 0.22, 0.12)
var fence_color := Color(0.70, 0.52, 0.30)
var shadow_color := Color(0.08, 0.06, 0.04)
var plot := PackedVector2Array([
marker_center + Vector2(-width * 0.55, width * 0.18),
marker_center + Vector2(-width * 0.18, -width * 0.24),
marker_center + Vector2(width * 0.55, -width * 0.03),
marker_center + Vector2(width * 0.18, width * 0.34)
])
draw_colored_polygon(plot, soil_color)
draw_polyline(_closed_points(plot), fence_color, 1.5 * zoom)
for offset in [-0.28, 0.0, 0.28]:
draw_line(
marker_center + Vector2((-0.36 + offset) * width, width * 0.13),
marker_center + Vector2((-0.08 + offset) * width, -width * 0.16),
crop_color,
1.8 * zoom
)
draw_circle(marker_center + Vector2(width * 0.26, -width * 0.16), 2.2 * zoom, crop_color.lightened(0.18))
draw_line(marker_center + Vector2(-width * 0.52, width * 0.25), marker_center + Vector2(width * 0.5, width * 0.0), shadow_color, 1.0 * zoom)
func _draw_barracks_marker(center: Vector2, height: float) -> void:
var marker_center: Vector2 = center + Vector2(0, -height * zoom - 3.0)
var width: float = 22.0 * zoom
@@ -667,6 +696,8 @@ func _tile_display_label(key: String, data: Dictionary) -> String:
building_label = " | Log Camp" if building_status == "Built" or building_status.is_empty() else " | Log Camp building"
elif building_type == "Mine":
building_label = " | Mine" if building_status == "Built" or building_status.is_empty() else " | Mine building"
elif building_type == "Farm":
building_label = " | Farm" if building_status == "Built" or building_status.is_empty() else " | Farm building"
elif building_type == "Barracks":
building_label = " | Barracks" if building_status == "Built" or building_status.is_empty() else " | Barracks building"
var archer_count := _archer_count_at(int(data.get("q", 0)), int(data.get("r", 0)))