diff --git a/scenes/deparments/CoalPlant.tscn b/scenes/deparments/CoalPlant.tscn index f072987..6729fa6 100644 --- a/scenes/deparments/CoalPlant.tscn +++ b/scenes/deparments/CoalPlant.tscn @@ -1,7 +1,10 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=8 format=2] -[ext_resource path="res://scripts/power_station.gd" type="Script" id=1] +[ext_resource path="res://scripts/simtactics/turn_on.gd" type="Script" id=1] [ext_resource path="res://assets/coal.png" type="Texture" id=2] +[ext_resource path="res://addons/beehave/nodes/composites/sequence.gd" type="Script" id=3] +[ext_resource path="res://scripts/simtactics/zone.gd" type="Script" id=4] +[ext_resource path="res://addons/beehave/nodes/beehave_root.gd" type="Script" id=6] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 32.2297, 31.8602 ) @@ -26,9 +29,19 @@ tracks/0/keys = { [node name="PowerStation" type="KinematicBody2D"] input_pickable = true + +[node name="BeehaveRoot" type="Node" parent="."] +script = ExtResource( 6 ) + +[node name="SequenceComposite" type="Node" parent="BeehaveRoot"] +script = ExtResource( 3 ) + +[node name="TurnOn" type="Node" parent="BeehaveRoot/SequenceComposite"] script = ExtResource( 1 ) -income = 0 -expense = 250 + +[node name="ActionLeaf" type="Node" parent="BeehaveRoot/SequenceComposite"] +script = ExtResource( 4 ) +zone_texture = "res://assets/res_houses.png" [node name="Quarters" type="Timer" parent="."] wait_time = 10.0 @@ -44,5 +57,3 @@ playback_speed = 5.0 anims/Animante = SubResource( 2 ) [node name="RayCast2D" type="RayCast2D" parent="."] - -[connection signal="timeout" from="Quarters" to="." method="_on_Quarters_timeout"] diff --git a/scenes/deparments/Zone.tscn b/scenes/deparments/Zone.tscn index f37acc0..7899a9a 100644 --- a/scenes/deparments/Zone.tscn +++ b/scenes/deparments/Zone.tscn @@ -1,14 +1,17 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://scripts/zone.gd" type="Script" id=1] [ext_resource path="res://assets/res_zones.png" type="Texture" id=2] +[ext_resource path="res://scripts/simtactics/has_power.gd" type="Script" id=4] +[ext_resource path="res://addons/beehave/nodes/beehave_root.gd" type="Script" id=5] +[ext_resource path="res://addons/beehave/nodes/composites/selector.gd" type="Script" id=7] [sub_resource type="Animation" id=2] resource_name = "Animante" length = 5.0 step = 1.0 tracks/0/type = "value" -tracks/0/path = NodePath("../Sprite:frame") +tracks/0/path = NodePath("Sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false @@ -17,7 +20,22 @@ tracks/0/keys = { "times": PoolRealArray( 0, 1, 2, 3, 4 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1 ), "update": 1, -"values": [ 1, 2, 3, 4, 6 ] +"values": [ 0, 1, 2, 3, 4 ] +} + +[sub_resource type="Animation" id=4] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 1 ] } [sub_resource type="CircleShape2D" id=3] @@ -26,15 +44,26 @@ radius = 34.955 [node name="Zone" type="Area2D"] script = ExtResource( 1 ) -[node name="Quarters" type="Timer" parent="."] -wait_time = 10.0 - [node name="Sprite" type="Sprite" parent="."] texture = ExtResource( 2 ) vframes = 19 +frame = 1 + +[node name="BeehaveRoot" type="Node" parent="."] +script = ExtResource( 5 ) + +[node name="SelectorComposite" type="Node" parent="BeehaveRoot"] +script = ExtResource( 7 ) + +[node name="HasPower" type="Node" parent="BeehaveRoot/SelectorComposite"] +script = ExtResource( 4 ) + +[node name="Quarters" type="Timer" parent="."] +wait_time = 10.0 [node name="AnimationPlayer" type="AnimationPlayer" parent="."] anims/Animante = SubResource( 2 ) +anims/RESET = SubResource( 4 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource( 3 ) diff --git a/scenes/game.tscn b/scenes/game.tscn index 217a1a7..137f9be 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=45 format=2] +[gd_scene load_steps=50 format=2] [ext_resource path="res://scenes/maps/MapOne.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/beehave/nodes/composites/selector.gd" type="Script" id=2] [ext_resource path="res://assets/symbols/fontawesome/population.svg" type="Texture" id=3] [ext_resource path="res://scenes/windows/Advisor.tscn" type="PackedScene" id=4] [ext_resource path="res://assets/ui/iccom.png" type="Texture" id=5] @@ -44,16 +45,22 @@ [ext_resource path="res://assets/symbols/fontawesome/envelope.svg" type="Texture" id=43] [ext_resource path="res://scenes/windows/Ordinance.tscn" type="PackedScene" id=44] [ext_resource path="res://scripts/ticker.gd" type="Script" id=45] +[ext_resource path="res://addons/beehave/nodes/beehave_root.gd" type="Script" id=46] +[ext_resource path="res://scenes/deparments/CoalPlant.tscn" type="PackedScene" id=47] +[ext_resource path="res://addons/beehave/nodes/beehave_node.gd" type="Script" id=48] +[ext_resource path="res://scenes/deparments/Zone.tscn" type="PackedScene" id=49] [node name="Game" type="Node2D"] script = ExtResource( 20 ) -[node name="DayCycle" type="Timer" parent="."] -wait_time = 12.0 -autostart = true -__meta__ = { -"_editor_description_": "Calculation based on: https://gaming.stackexchange.com/questions/110529/real-world-time-in-a-simcity-day-on-various-speeds" -} +[node name="BeehaveRoot" type="Node" parent="."] +script = ExtResource( 46 ) + +[node name="DayCycle" type="Node" parent="BeehaveRoot"] +script = ExtResource( 2 ) + +[node name="BeehaveNode" type="Node" parent="BeehaveRoot/DayCycle"] +script = ExtResource( 48 ) [node name="MapOne" parent="." instance=ExtResource( 1 )] @@ -294,10 +301,6 @@ __meta__ = { "_edit_use_anchors_": true } -[node name="RotateNews" type="Timer" parent="Controls/Control Panel/Status"] -wait_time = 5.0 -autostart = true - [node name="SettingsBtn" type="Button" parent="Controls/Control Panel/Status"] anchor_left = 0.0115391 anchor_top = 0.0555202 @@ -466,6 +469,8 @@ __meta__ = { "_edit_use_anchors_": true } -[connection signal="timeout" from="DayCycle" to="." method="_on_DayCycle_timeout"] -[connection signal="timeout" from="Controls/Control Panel/Status/RotateNews" to="Controls/Control Panel" method="_on_RotateNews_timeout"] -[connection signal="pressed" from="Controls/Control Panel/Status/NewsBtn" to="Controls/Control Panel" method="_on_NewsBtn_pressed"] +[node name="Zone" parent="." instance=ExtResource( 49 )] +position = Vector2( 650, 351 ) + +[node name="PowerStation" parent="." instance=ExtResource( 47 )] +position = Vector2( 758, 277 ) diff --git a/scripts/Zone.gd b/scripts/Zone.gd index c885d74..f59c823 100644 --- a/scripts/Zone.gd +++ b/scripts/Zone.gd @@ -1,12 +1,5 @@ extends Area2D -signal grabbed -signal has_power - -export var cost: int = 10000 -export var income: int = 100 -export var expense: int = 0 - onready var zone = $Sprite onready var quarters = $Quarters onready var animator = $AnimationPlayer @@ -15,48 +8,32 @@ var can_grab = false var grabbed_offset = Vector2() func _ready(): - SimEvents.connect("budget", self, "_get_budget") - connect("grabbed", self, "_grab_zone") + zone.frame = 0 + +#func _drag_drop(event): +# if event is InputEventMouseButton and can_grab: +# # Substract from the player's budget and disable grabbing +# if SimData.budget >= cost: +# SimData.budget -= cost +# can_grab = false +# grabbed_offset = position - get_global_mouse_position() -func _drag_drop(event): - if event is InputEventMouseButton and can_grab: - # Substract from the player's budget and disable grabbing - if SimData.budget >= cost: - SimData.budget -= cost - can_grab = false - grabbed_offset = position - get_global_mouse_position() - -func _input(event): - _drag_drop(event) +#func _input(event): +# _drag_drop(event) func _process(delta): - if can_grab: - position = get_global_mouse_position() + grabbed_offset - -func _animante_sprite(animante: bool = true): - if zone.hframes > 1 or zone.vframes > 1 and animante: + if SimData.has_power == true: animator.play("Animante") else: animator.stop() +# if can_grab: +# position = get_global_mouse_position() + grabbed_offset + +#func _animante_sprite(animante: bool = true): +# if zone.hframes > 1 or zone.vframes > 1 and animante: +# animator.play("Animante") +# else: +# animator.stop() -func _grab_zone(): - can_grab = true - -func _get_budget(): - if SimData.budget >= expense and SimData.has_power: - SimData.budget -= expense - SimData.expenses = expense - - if SimData.has_power: - var total_income = SimData.res_tax * income - SimData.budget += total_income - SimData.res_income = total_income - -func _on_Zone_body_entered(body: Node): - if SimData.has_power and can_grab == false: - quarters.start() - _animante_sprite() - -func _on_Zone_body_exited(body: Node): - quarters.stop() - _animante_sprite(false) +#func _grab_zone(): +# can_grab = true diff --git a/scripts/autoload/sim_data.gd b/scripts/autoload/sim_data.gd index d924d9e..baf0e19 100644 --- a/scripts/autoload/sim_data.gd +++ b/scripts/autoload/sim_data.gd @@ -17,6 +17,9 @@ var current_power_cap: int var prev_power_cap: int var has_power: bool +var res_tax: int = 5 +var res_income: int + var ticker_files: Array = [ "adverts.json", "sammy.json" diff --git a/scripts/simtactics/has_power.gd b/scripts/simtactics/has_power.gd new file mode 100644 index 0000000..7427664 --- /dev/null +++ b/scripts/simtactics/has_power.gd @@ -0,0 +1,20 @@ +extends ConditionLeaf + +export var cost: int = 10000 +export var income: int = 100 +export var expense: int = 0 + +func tick(actor, blackboard): + if SimData.has_power: + if SimData.budget >= expense: + SimData.budget -= expense + SimData.expenses = expense + + if SimData.has_power: + var total_income = SimData.res_tax * income + SimData.budget += total_income + SimData.res_income = total_income + + return SUCCESS + + return FAILURE diff --git a/scripts/simtactics/turn_on.gd b/scripts/simtactics/turn_on.gd new file mode 100644 index 0000000..a45af1f --- /dev/null +++ b/scripts/simtactics/turn_on.gd @@ -0,0 +1,5 @@ +extends ConditionLeaf + +func tick(actor, blackboard): + SimData.has_power = true + return RUNNING diff --git a/scripts/simtactics/zone.gd b/scripts/simtactics/zone.gd new file mode 100644 index 0000000..1d6d575 --- /dev/null +++ b/scripts/simtactics/zone.gd @@ -0,0 +1,18 @@ +extends ConditionLeaf + +export var cost: int = 10000 +export var income: int = 100 +export var expense: int = 0 + +func tick(actor, blackboard): + if SimData.has_power: + if SimData.budget >= expense: + SimData.budget -= expense + SimData.expenses = expense + + if SimData.has_power: + var total_income = SimData.res_tax * income + SimData.budget += total_income + SimData.res_income = total_income + + return RUNNING diff --git a/scripts/ticker.gd b/scripts/ticker.gd index 7405cdd..1c99bdc 100644 --- a/scripts/ticker.gd +++ b/scripts/ticker.gd @@ -1,42 +1,42 @@ extends Control -const TICKER_PATH = "res://json/ticker/" -const FNN_LOGO = "res://assets/ticker/fnn.png" -const CONFIG_FILE = "config.json" - -onready var ticker_text = $Status/NewsBtn -onready var ticker_box = $Windows/NewsWindow/News -onready var ticker_window = $Windows/NewsWindow - -var news_file: String = "" -var rng = RandomNumberGenerator.new() -var all_news: Array = [] -var speices: Array = [ - "Cat", - "Fennec", - "Fox" -] - -var json_files: Array = [] - -func _load_json(): - var file = File.new() - if file.file_exists(news_file): - file.open(news_file, file.READ) - var result = parse_json(file.get_as_text()) - return result - -func _index_news(): - var news = _load_json() - all_news.clear() - all_news = news["ticker"] - randomize() - all_news.shuffle() - -func _ready(): - ticker_window.window_title = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet") - - _randomize_news(json_files) +#const TICKER_PATH = "res://json/ticker/" +#const FNN_LOGO = "res://assets/ticker/fnn.png" +#const CONFIG_FILE = "config.json" +# +#onready var ticker_text = $Status/NewsBtn +#onready var ticker_box = $Windows/NewsWindow/News +#onready var ticker_window = $Windows/NewsWindow +# +#var news_file: String = "" +#var rng = RandomNumberGenerator.new() +#var all_news: Array = [] +#var speices: Array = [ +# "Cat", +# "Fennec", +# "Fox" +#] +# +#var json_files: Array = [] +# +#func _load_json(): +# var file = File.new() +# if file.file_exists(news_file): +# file.open(news_file, file.READ) +# var result = parse_json(file.get_as_text()) +# return result +# +#func _index_news(): +# var news = _load_json() +# all_news.clear() +# all_news = news["ticker"] +# randomize() +# all_news.shuffle() +# +#func _ready(): +# ticker_window.window_title = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet") +# +# _randomize_news(json_files) #func _process(delta): # var prev_json_Files = json_files @@ -60,73 +60,64 @@ func _ready(): # for files in city_life: # json_files.append(files) -func _array_check(list1, list2): - for item in list1: - if item in list2: - return true - - return false - -func _start_alert(message): -# if ticker_text.items.size() > 1: -# ticker_text.clear() +#func _array_check(list1, list2): +# for item in list1: +# if item in list2: +# return true +# +# return false +# +#func _start_alert(message): +## if ticker_text.items.size() > 1: +## ticker_text.clear() +## +## SimData.on_alert = true +## news_file = str(TICKER_PATH + "ticker_alerts.json") +## ticker_text.add_item(all_news) +# +# pass +# +#func _randomize_news(files: Array): +# if all_news == null: +# json_files = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "ticker_files") +# +# for file in files: +# news_file = str(TICKER_PATH + file) +# _load_json() +# _index_news() +# +# rng.randomize() +# randomize() +# files.shuffle() +# +# var news_range = rng.randi_range(0, all_news.size() - 1) +# var news_text: String = all_news[news_range] +# +# if "[competing_outlet]" in news_text: +# news_text = news_text.replace("[competing_outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "competing_outlet")) +# +# if "[outlet]" in news_text: +# news_text = news_text.replace("[outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet")) +# +# if "[species]" in news_text: +# speices.shuffle() +# var speices_range = rng.randi_range(speices.size() - 1) +# news_text = news_text.replace("[species]", speices[speices_range]) +# +# if "[city]" in news_text: +# news_text = news_text.replace("[city]", SimData.city_name) +# +# if "[mayor]" in news_text: +# news_text = news_text.replace("[mayor]", SimData.mayor_name) +# +# # Prevent stack overflaw +# if ticker_box.items.size() > 10: +# ticker_box.clear() +# +# _randomize_news(json_files) +# _add_news(news_text) +# +#func _add_news(news_item): +# ticker_text.text = news_item +# ticker_box.add_item(news_item) # -# SimData.on_alert = true -# news_file = str(TICKER_PATH + "ticker_alerts.json") -# ticker_text.add_item(all_news) - - pass - -func _randomize_news(files: Array): - if all_news == null: - json_files = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "ticker_files") - - for file in files: - news_file = str(TICKER_PATH + file) - _load_json() - _index_news() - - rng.randomize() - randomize() - files.shuffle() - - var news_range = rng.randi_range(0, all_news.size() - 1) - var news_text: String = all_news[news_range] - - if "[competing_outlet]" in news_text: - news_text = news_text.replace("[competing_outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "competing_outlet")) - - if "[outlet]" in news_text: - news_text = news_text.replace("[outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet")) - - if "[species]" in news_text: - speices.shuffle() - var speices_range = rng.randi_range(speices.size() - 1) - news_text = news_text.replace("[species]", speices[speices_range]) - - if "[city]" in news_text: - news_text = news_text.replace("[city]", SimData.city_name) - - if "[mayor]" in news_text: - news_text = news_text.replace("[mayor]", SimData.mayor_name) - - # Prevent stack overflaw - if ticker_box.items.size() > 10: - ticker_box.clear() - - _randomize_news(json_files) - _add_news(news_text) - -func _add_news(news_item): - ticker_text.text = news_item - ticker_box.add_item(news_item) - -func _on_NewsBtn_pressed(): - ticker_window.show() - -func _on_RotateNews_timeout(): - rng.randomize() - randomize() - all_news.shuffle() - json_files.shuffle() - _randomize_news(json_files)