Add close bonus
This commit is contained in:
parent
4c2ae4da13
commit
0b8addb1dc
14 changed files with 241 additions and 15 deletions
|
@ -13,6 +13,7 @@ var last_text
|
||||||
var rand = 0
|
var rand = 0
|
||||||
|
|
||||||
const NAME_ICON = preload("res://NameIcon.tscn")
|
const NAME_ICON = preload("res://NameIcon.tscn")
|
||||||
|
const RESOURCE_GAIN = preload("res://ResourceGain.tscn")
|
||||||
|
|
||||||
var building_to_tile_map = {
|
var building_to_tile_map = {
|
||||||
"tents": {
|
"tents": {
|
||||||
|
@ -98,6 +99,66 @@ func _process(delta: float) -> void:
|
||||||
last_text.position = map_to_local(tile) + Vector2(-25, -10)
|
last_text.position = map_to_local(tile) + Vector2(-25, -10)
|
||||||
add_sibling(last_text)
|
add_sibling(last_text)
|
||||||
|
|
||||||
|
for coords in building_data:
|
||||||
|
var building = building_data[coords]
|
||||||
|
if building.has("workers") and building.workers > 0 and (not Data.data.buildings[building.key].has("needs") or (Persister.get_value(Data.data.buildings[building.key].needs, PersisterEnums.Scope.UNKNOWN, 0) > 0)):
|
||||||
|
building.progress += delta * building.efficiency / 100.0
|
||||||
|
|
||||||
|
if building.progress >= Data.data.buildings[building.key].time:
|
||||||
|
if Data.data.buildings[building.key].has("needs"):
|
||||||
|
Persister.change_value(Data.data.buildings[building.key].needs, -1)
|
||||||
|
Persister.change_value(Data.data.buildings[building.key].resource, Data.data.buildings[building.key].amount)
|
||||||
|
var gain = RESOURCE_GAIN.instantiate()
|
||||||
|
gain.text = "[center]+1 %s" % [Data.data.buildings[building.key].resourcename]
|
||||||
|
gain.position = map_to_local(coords) + Vector2(-25, -5)
|
||||||
|
add_sibling(gain)
|
||||||
|
building.progress -= Data.data.buildings[building.key].time
|
||||||
|
|
||||||
|
if building.has("workers"):
|
||||||
|
var close_bonus = 1.0
|
||||||
|
|
||||||
|
if building.key == "woodcutter":
|
||||||
|
if tree_spots.size() == 0:
|
||||||
|
close_bonus = 0
|
||||||
|
else:
|
||||||
|
var min_distance = INF
|
||||||
|
for tree in tree_spots:
|
||||||
|
var distance = tree.distance_to(coords)
|
||||||
|
|
||||||
|
if distance < min_distance:
|
||||||
|
min_distance = distance
|
||||||
|
|
||||||
|
if min_distance > 5:
|
||||||
|
close_bonus = 0
|
||||||
|
else:
|
||||||
|
close_bonus = 1 - (min_distance / 5)
|
||||||
|
elif building.key == "stoneminer":
|
||||||
|
if rock_spots.size() == 0:
|
||||||
|
close_bonus = 0
|
||||||
|
else:
|
||||||
|
var min_distance = INF
|
||||||
|
for tree in rock_spots:
|
||||||
|
var distance = tree.distance_to(coords)
|
||||||
|
|
||||||
|
if distance < min_distance:
|
||||||
|
min_distance = distance
|
||||||
|
|
||||||
|
if min_distance > 5:
|
||||||
|
close_bonus = 0
|
||||||
|
else:
|
||||||
|
close_bonus = 1 - (min_distance / 5)
|
||||||
|
elif building.key == "waterpump":
|
||||||
|
var water_level = Persister.get_value("flood_level", PersisterEnums.Scope.UNKNOWN, 0)
|
||||||
|
|
||||||
|
var amount = level - water_level
|
||||||
|
|
||||||
|
if amount > 3:
|
||||||
|
close_bonus = 0
|
||||||
|
else:
|
||||||
|
close_bonus = (3 - amount)
|
||||||
|
|
||||||
|
building.efficiency = (100 + Persister.get_value("conduit_bonus", PersisterEnums.Scope.UNKNOWN, 0)) * building.workers * 0.5 * close_bonus
|
||||||
|
|
||||||
last_tile = tile
|
last_tile = tile
|
||||||
|
|
||||||
if not building_mode:
|
if not building_mode:
|
||||||
|
@ -113,6 +174,7 @@ func _ready() -> void:
|
||||||
Triggerer.listen("flood_level", _on_flood_level)
|
Triggerer.listen("flood_level", _on_flood_level)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _on_flood_level(data):
|
func _on_flood_level(data):
|
||||||
var value = int(data.value)
|
var value = int(data.value)
|
||||||
|
|
||||||
|
@ -158,10 +220,13 @@ func place_building():
|
||||||
if build_data.type == "housing":
|
if build_data.type == "housing":
|
||||||
Persister.change_value("max_population", int(build_data.amount))
|
Persister.change_value("max_population", int(build_data.amount))
|
||||||
building_data[tile].max_population = int(build_data.amount)
|
building_data[tile].max_population = int(build_data.amount)
|
||||||
else:
|
elif build_data.name != "Conduit":
|
||||||
building_data[tile].workers = 0
|
building_data[tile].workers = 0
|
||||||
building_data[tile].max_workers = 6
|
building_data[tile].max_workers = 6
|
||||||
building_data[tile].efficiency = 100
|
building_data[tile].efficiency = 100 + Persister.get_value("conduit_bonus", PersisterEnums.Scope.UNKNOWN, 0)
|
||||||
|
building_data[tile].progress = 0
|
||||||
|
else:
|
||||||
|
Persister.change_value("conduit_bonus", 20)
|
||||||
|
|
||||||
Persister.persist_data("drag_mode", false)
|
Persister.persist_data("drag_mode", false)
|
||||||
|
|
||||||
|
|
|
@ -242,7 +242,7 @@ text = "[center]+"
|
||||||
position = Vector2(-50, 0)
|
position = Vector2(-50, 0)
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ResourceAllocation/ColorRect3/MouseHandler2"]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="ResourceAllocation/ColorRect3/MouseHandler2"]
|
||||||
position = Vector2(8, 8)
|
position = Vector2(58, 8)
|
||||||
shape = SubResource("RectangleShape2D_fnpfc")
|
shape = SubResource("RectangleShape2D_fnpfc")
|
||||||
|
|
||||||
[node name="RichTextLabel" type="RichTextLabel" parent="ResourceAllocation"]
|
[node name="RichTextLabel" type="RichTextLabel" parent="ResourceAllocation"]
|
||||||
|
|
14
Main.tscn
14
Main.tscn
|
@ -550,6 +550,20 @@ text = "0/0
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
script = ExtResource("16_knn3d")
|
script = ExtResource("16_knn3d")
|
||||||
|
|
||||||
|
[node name="WoodCountLabel2" type="Label" parent="CanvasLayer/UI/Background/Control3"]
|
||||||
|
layout_mode = 2
|
||||||
|
offset_left = 35.0
|
||||||
|
offset_top = 12.71
|
||||||
|
offset_right = 94.0
|
||||||
|
offset_bottom = 36.71
|
||||||
|
scale = Vector2(1e-05, 1e-05)
|
||||||
|
pivot_offset = Vector2(30, 12.29)
|
||||||
|
theme_override_colors/font_color = Color(0.403492, 0.47752, 0.570235, 1)
|
||||||
|
theme_override_constants/outline_size = 3
|
||||||
|
text = "0 Available"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="Control2" type="Control" parent="CanvasLayer/UI/Background"]
|
[node name="Control2" type="Control" parent="CanvasLayer/UI/Background"]
|
||||||
anchors_preset = 0
|
anchors_preset = 0
|
||||||
offset_right = 40.0
|
offset_right = 40.0
|
||||||
|
|
18
ResourceGain.tscn
Normal file
18
ResourceGain.tscn
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://d0sou8ksu22pm"]
|
||||||
|
|
||||||
|
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_aw2u1"]
|
||||||
|
[ext_resource type="Script" path="res://resource_gain.gd" id="2_enpvk"]
|
||||||
|
|
||||||
|
[node name="NameIcon" type="RichTextLabel"]
|
||||||
|
z_index = 10
|
||||||
|
clip_contents = false
|
||||||
|
offset_left = 243.0
|
||||||
|
offset_top = 104.0
|
||||||
|
offset_right = 369.0
|
||||||
|
offset_bottom = 121.0
|
||||||
|
pivot_offset = Vector2(62, 4)
|
||||||
|
theme = ExtResource("1_aw2u1")
|
||||||
|
theme_override_constants/outline_size = 3
|
||||||
|
bbcode_enabled = true
|
||||||
|
text = "[center]Rock"
|
||||||
|
script = ExtResource("2_enpvk")
|
|
@ -12,6 +12,8 @@ var window_tween
|
||||||
@onready var color_rect_5: ColorRect = $ColorRect5
|
@onready var color_rect_5: ColorRect = $ColorRect5
|
||||||
@onready var color_rect_2: ColorRect = $ResourceAllocation/ColorRect2
|
@onready var color_rect_2: ColorRect = $ResourceAllocation/ColorRect2
|
||||||
@onready var color_rect_3: ColorRect = $ResourceAllocation/ColorRect3
|
@onready var color_rect_3: ColorRect = $ResourceAllocation/ColorRect3
|
||||||
|
@onready var color_rect_4: ColorRect = $ResourceAllocation/ColorRect4
|
||||||
|
@onready var description_2: RichTextLabel = $ResourceAllocation/Description2
|
||||||
|
|
||||||
var recent_data
|
var recent_data
|
||||||
|
|
||||||
|
@ -29,7 +31,7 @@ func _ready() -> void:
|
||||||
func _on_flood_level(data):
|
func _on_flood_level(data):
|
||||||
var value = int(data.value)
|
var value = int(data.value)
|
||||||
|
|
||||||
if value >= recent_data.level:
|
if recent_data and value >= recent_data.level:
|
||||||
Triggerer.trigger("hide_info")
|
Triggerer.trigger("hide_info")
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +54,7 @@ func _show_info_window(data):
|
||||||
subtitle.text = "[center]%s" % [building_data.short]
|
subtitle.text = "[center]%s" % [building_data.short]
|
||||||
if data.has("workers"):
|
if data.has("workers"):
|
||||||
rich_text_label_2.text = "[center]%d/%d" % [data.workers, data.max_workers]
|
rich_text_label_2.text = "[center]%d/%d" % [data.workers, data.max_workers]
|
||||||
description_3.text = "[center]EFFICIENCY: %d%" % [data.efficiency]
|
description_3.text = "[center]EFFICIENCY: %d%%" % [data.efficiency]
|
||||||
resource_allocation.visible = true
|
resource_allocation.visible = true
|
||||||
else:
|
else:
|
||||||
resource_allocation.visible = false
|
resource_allocation.visible = false
|
||||||
|
@ -66,7 +68,18 @@ func _show_info_window(data):
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if Input.is_action_just_pressed("rclick"):
|
if Input.is_action_just_pressed("rclick"):
|
||||||
_hide_info_window({})
|
_hide_info_window({})
|
||||||
|
|
||||||
|
if recent_data and recent_data.has("progress"):
|
||||||
|
color_rect_4.scale.x = (float(recent_data.progress) / Data.data.buildings[recent_data.key].time)
|
||||||
|
|
||||||
|
if recent_data and recent_data.has("workers") and recent_data.workers > 0:
|
||||||
|
description_2.text = "[center]STATUS: WORKING"
|
||||||
|
else:
|
||||||
|
description_2.text = "[center]STATUS: STOPPED"
|
||||||
|
|
||||||
|
if recent_data:
|
||||||
|
description_3.text = "[center]EFFICIENCY: %d%%" % [recent_data.efficiency]
|
||||||
|
|
||||||
|
|
||||||
func _hide_info_window(_data):
|
func _hide_info_window(_data):
|
||||||
if window_tween:
|
if window_tween:
|
||||||
|
@ -79,27 +92,73 @@ func _hide_info_window(_data):
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_clicked() -> void:
|
func _on_mouse_handler_clicked() -> void:
|
||||||
pass # Replace with function body.
|
if recent_data.workers > 0:
|
||||||
|
recent_data.workers -= 1
|
||||||
|
Persister.change_value("avail_population", 1)
|
||||||
|
rich_text_label_2.text = "[center]%d/%d" % [recent_data.workers, recent_data.max_workers]
|
||||||
|
|
||||||
|
if minus_tween:
|
||||||
|
minus_tween.kill()
|
||||||
|
|
||||||
|
minus_tween = create_tween()
|
||||||
|
minus_tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE * 0.95, 0.125)
|
||||||
|
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE, 0.125)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_hovered() -> void:
|
func _on_mouse_handler_hovered() -> void:
|
||||||
pass # Replace with function body.
|
if minus_tween:
|
||||||
|
minus_tween.kill()
|
||||||
|
|
||||||
|
minus_tween = create_tween()
|
||||||
|
minus_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
minus_tween.set_trans(Tween.TRANS_BACK)
|
||||||
|
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE * 1.05, 0.25)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_unhovered() -> void:
|
func _on_mouse_handler_unhovered() -> void:
|
||||||
pass # Replace with function body.
|
if minus_tween:
|
||||||
|
minus_tween.kill()
|
||||||
|
|
||||||
|
minus_tween = create_tween()
|
||||||
|
minus_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
minus_tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE, 0.25)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_2_clicked() -> void:
|
func _on_mouse_handler_2_clicked() -> void:
|
||||||
pass # Replace with function body.
|
if recent_data.workers < recent_data.max_workers and Persister.get_value("avail_population") > 0:
|
||||||
|
recent_data.workers += 1
|
||||||
|
Persister.change_value("avail_population", -1)
|
||||||
|
rich_text_label_2.text = "[center]%d/%d" % [recent_data.workers, recent_data.max_workers]
|
||||||
|
|
||||||
|
if plus_tween:
|
||||||
|
plus_tween.kill()
|
||||||
|
|
||||||
|
plus_tween = create_tween()
|
||||||
|
plus_tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE * 0.95, 0.125)
|
||||||
|
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE, 0.125)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_2_hovered() -> void:
|
func _on_mouse_handler_2_hovered() -> void:
|
||||||
pass # Replace with function body.
|
if plus_tween:
|
||||||
|
plus_tween.kill()
|
||||||
|
|
||||||
|
plus_tween = create_tween()
|
||||||
|
plus_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
plus_tween.set_trans(Tween.TRANS_BACK)
|
||||||
|
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE * 1.05, 0.25)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_2_unhovered() -> void:
|
func _on_mouse_handler_2_unhovered() -> void:
|
||||||
pass # Replace with function body.
|
if plus_tween:
|
||||||
|
plus_tween.kill()
|
||||||
|
|
||||||
|
plus_tween = create_tween()
|
||||||
|
plus_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
plus_tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE, 0.25)
|
||||||
|
|
||||||
|
|
||||||
func _on_mouse_handler_3_clicked() -> void:
|
func _on_mouse_handler_3_clicked() -> void:
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
name: Conduit
|
name: Conduit
|
||||||
short: Boosts Production
|
short: Boosts Production
|
||||||
type: production
|
type: production
|
||||||
resource: essence
|
boost: 5
|
||||||
amount: 1
|
|
||||||
time: 10
|
time: 10
|
||||||
max_workers: 6
|
|
||||||
cost[]
|
cost[]
|
||||||
stone: 3
|
stone: 3
|
||||||
wood: 2
|
wood: 2
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
name: Field
|
name: Field
|
||||||
short: Produces Wheat
|
short: Produces Wheat
|
||||||
type: utility
|
type: utility
|
||||||
|
resource: wheat
|
||||||
|
resourcename: Wheat
|
||||||
|
time: 5
|
||||||
|
amount: 1
|
||||||
|
max_workers: 6
|
||||||
cost[]
|
cost[]
|
||||||
wood: 2
|
wood: 2
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
name: Farmhouse
|
name: Farmhouse
|
||||||
short: Turns Wheat to Food
|
short: Turns Wheat to Food
|
||||||
type: utility
|
type: utility
|
||||||
|
resource: food
|
||||||
|
time: 15
|
||||||
|
amount: 1
|
||||||
|
needs: wheat
|
||||||
|
max_workers: 6
|
||||||
|
resourcename: Food
|
||||||
cost[]
|
cost[]
|
||||||
wood: 4
|
wood: 4
|
||||||
stone: 8
|
stone: 8
|
||||||
|
|
|
@ -5,5 +5,6 @@ amount: 1
|
||||||
time: 10
|
time: 10
|
||||||
max_workers: 6
|
max_workers: 6
|
||||||
short: Gathers Stone
|
short: Gathers Stone
|
||||||
|
resourcename: Stone
|
||||||
cost[]
|
cost[]
|
||||||
stone: 2
|
stone: 2
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
name: Water Processor
|
name: Water Processor
|
||||||
type: utility
|
type: utility
|
||||||
short: Cleans Water
|
short: Cleans Water
|
||||||
|
time: 15
|
||||||
|
amount: 1
|
||||||
|
needs: drops
|
||||||
|
max_workers: 6
|
||||||
|
resource: water
|
||||||
|
resourcename: Clean Water
|
||||||
cost[]
|
cost[]
|
||||||
wood: 6
|
wood: 6
|
||||||
stone: 10
|
stone: 10
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
name: Water Pump
|
name: Water Pump
|
||||||
type: utility
|
type: utility
|
||||||
short: Produces Water
|
short: Produces Water
|
||||||
|
resource: drops
|
||||||
|
time: 5
|
||||||
|
amount: 1
|
||||||
|
max_workers: 6
|
||||||
|
resourcename: Water
|
||||||
cost[]
|
cost[]
|
||||||
stone: 3
|
stone: 3
|
||||||
|
|
|
@ -5,5 +5,6 @@ amount: 1
|
||||||
time: 10
|
time: 10
|
||||||
max_workers: 6
|
max_workers: 6
|
||||||
short: Gathers Wood
|
short: Gathers Wood
|
||||||
|
resourcename: Wood
|
||||||
cost[]
|
cost[]
|
||||||
stone: 3
|
stone: 3
|
||||||
|
|
21
resource_gain.gd
Normal file
21
resource_gain.gd
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
extends RichTextLabel
|
||||||
|
|
||||||
|
var tween
|
||||||
|
var selected = true
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
var starting_pos = position
|
||||||
|
scale = Vector2.ZERO
|
||||||
|
tween = create_tween()
|
||||||
|
tween.set_ease(Tween.EASE_OUT)
|
||||||
|
tween.set_trans(Tween.TRANS_BACK)
|
||||||
|
tween.tween_property(self, "scale", Vector2.ONE, 0.25)
|
||||||
|
tween.tween_interval(0.5)
|
||||||
|
tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
tween.tween_property(self, "scale", Vector2.ZERO, 0.25)
|
||||||
|
tween.tween_callback(func():
|
||||||
|
queue_free()
|
||||||
|
)
|
||||||
|
|
||||||
|
var tween2 = create_tween()
|
||||||
|
tween2.tween_property(self, "position:y", starting_pos.y - 20, 1)
|
27
ui.gd
27
ui.gd
|
@ -1,14 +1,41 @@
|
||||||
extends CanvasLayer
|
extends CanvasLayer
|
||||||
|
|
||||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||||
|
@onready var wood_count_label_2: Label = $UI/Background/Control3/WoodCountLabel2
|
||||||
|
|
||||||
|
var available_tween
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Persister.persist_data("wood", 50)
|
Persister.persist_data("wood", 50)
|
||||||
Persister.persist_data("stone", 50)
|
Persister.persist_data("stone", 50)
|
||||||
Persister.persist_data("population", 3)
|
Persister.persist_data("population", 3)
|
||||||
|
Persister.persist_data("avail_population", 3)
|
||||||
Persister.persist_data("max_population", 3)
|
Persister.persist_data("max_population", 3)
|
||||||
|
Triggerer.listen("show_info", _on_show_info)
|
||||||
|
Triggerer.listen("hide_info", _on_hide_info)
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if Input.is_action_just_pressed("lclick") and not Persister.get_value("game_started"):
|
if Input.is_action_just_pressed("lclick") and not Persister.get_value("game_started"):
|
||||||
Persister.persist_data("game_started", true)
|
Persister.persist_data("game_started", true)
|
||||||
animation_player.play("start")
|
animation_player.play("start")
|
||||||
|
|
||||||
|
wood_count_label_2.text = "%d available" % [Persister.get_value("avail_population")]
|
||||||
|
|
||||||
|
func _on_show_info(_data):
|
||||||
|
if available_tween:
|
||||||
|
available_tween.kill()
|
||||||
|
|
||||||
|
available_tween = create_tween()
|
||||||
|
available_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
available_tween.set_trans(Tween.TRANS_BACK)
|
||||||
|
available_tween.tween_property(wood_count_label_2, "scale", Vector2.ONE, 0.5)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_hide_info(_data):
|
||||||
|
if available_tween:
|
||||||
|
available_tween.kill()
|
||||||
|
|
||||||
|
available_tween = create_tween()
|
||||||
|
available_tween.set_ease(Tween.EASE_OUT)
|
||||||
|
available_tween.set_trans(Tween.TRANS_QUAD)
|
||||||
|
available_tween.tween_property(wood_count_label_2, "scale", Vector2.ZERO, 0.5)
|
||||||
|
|
Loading…
Reference in a new issue