diff --git a/data/buildings/basic/basic_building_group.tres b/data/buildings/basic/basic_building_group.tres index 579156d..10c3199 100644 --- a/data/buildings/basic/basic_building_group.tres +++ b/data/buildings/basic/basic_building_group.tres @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://n806c03hgaq1" path="res://assets/scifi_tilesheet@2.png" id="1_p1crr"] [ext_resource type="Script" path="res://data/buildings/building_group.gd" id="1_xphre"] -[ext_resource type="Resource" uid="uid://d38xgwstvtcm4" path="res://data/buildings/basic/harvester_building.tres" id="2_7d7fa"] +[ext_resource type="Resource" uid="uid://d38xgwstvtcm4" path="res://data/buildings/basic/harvester/harvester_building.tres" id="2_5rd2r"] [ext_resource type="Resource" uid="uid://cta6ngelbwo8b" path="res://data/buildings/basic/warehouse_building.tres" id="3_vxs34"] [sub_resource type="AtlasTexture" id="AtlasTexture_nleix"] @@ -13,4 +13,4 @@ region = Rect2(1024, 576, 64, 64) script = ExtResource("1_xphre") name = "Basic" atlas_texture = SubResource("AtlasTexture_nleix") -buildings = Array[Resource("res://data/buildings/building.gd")]([ExtResource("2_7d7fa"), ExtResource("3_vxs34")]) +buildings = Array[Resource("res://data/buildings/building.gd")]([ExtResource("2_5rd2r"), ExtResource("3_vxs34")]) diff --git a/data/buildings/basic/harvester/harvester.gd b/data/buildings/basic/harvester/harvester.gd new file mode 100644 index 0000000..c8fb682 --- /dev/null +++ b/data/buildings/basic/harvester/harvester.gd @@ -0,0 +1,20 @@ +extends Building + +const CARBON_RESOURCE = preload("res://data/game_resources/carbon/carbon_resource.tres") + +func ready(building: BuildingBase) -> void: + var nearest_res := Grid.get_nearest_resource(building.position, CARBON_RESOURCE) + var _distance = building.position.distance_to(nearest_res) + + var particles = CPUParticles2D.new() + particles.amount = 60 + particles.spread = 8 + particles.material = ParticleProcessMaterial.new() + particles.radial_accel_max = _distance * -2.5 + particles.radial_accel_min = _distance * -2.55 + particles.gravity = Vector2.ZERO + particles.direction = building.position.direction_to(nearest_res) + particles.initial_velocity_max = _distance * 2.25 + particles.initial_velocity_min = _distance * 2.2 + particles.lifetime = 1.65 + building.add_child(particles) diff --git a/data/buildings/basic/harvester/harvester_building.tres b/data/buildings/basic/harvester/harvester_building.tres new file mode 100644 index 0000000..5ae2764 --- /dev/null +++ b/data/buildings/basic/harvester/harvester_building.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" load_steps=5 format=3 uid="uid://d38xgwstvtcm4"] + +[ext_resource type="Texture2D" uid="uid://n806c03hgaq1" path="res://assets/scifi_tilesheet@2.png" id="1_m1sbx"] +[ext_resource type="Script" path="res://data/buildings/basic/harvester/harvester.gd" id="3_fy2m4"] +[ext_resource type="Resource" uid="uid://bpjj0x7jr1k6u" path="res://data/game_resources/carbon/carbon_resource.tres" id="3_xlnq5"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_mgt0w"] +atlas = ExtResource("1_m1sbx") +region = Rect2(1088, 128, 64, 64) + +[resource] +script = ExtResource("3_fy2m4") +atlas_texture = SubResource("AtlasTexture_mgt0w") +name = "Harvester" +description = "Harvests nearby resources" +cost = { +ExtResource("3_xlnq5"): 100 +} diff --git a/data/buildings/basic/harvester_building.tres b/data/buildings/basic/harvester_building.tres deleted file mode 100644 index 99958d6..0000000 --- a/data/buildings/basic/harvester_building.tres +++ /dev/null @@ -1,18 +0,0 @@ -[gd_resource type="Resource" script_class="Building" load_steps=5 format=3 uid="uid://d38xgwstvtcm4"] - -[ext_resource type="Texture2D" uid="uid://n806c03hgaq1" path="res://assets/scifi_tilesheet@2.png" id="1_8uuv4"] -[ext_resource type="Script" path="res://data/buildings/building.gd" id="1_s0c8c"] -[ext_resource type="Resource" uid="uid://bpjj0x7jr1k6u" path="res://data/game_resources/carbon/carbon_resource.tres" id="2_ppxqc"] - -[sub_resource type="AtlasTexture" id="AtlasTexture_5nxx0"] -atlas = ExtResource("1_8uuv4") -region = Rect2(1088, 128, 64, 64) - -[resource] -script = ExtResource("1_s0c8c") -atlas_texture = SubResource("AtlasTexture_5nxx0") -name = "Harvester" -description = "Harvests nearby" -cost = { -ExtResource("2_ppxqc"): 100 -} diff --git a/data/buildings/building.gd b/data/buildings/building.gd index e0bab39..542b144 100644 --- a/data/buildings/building.gd +++ b/data/buildings/building.gd @@ -5,3 +5,6 @@ extends Resource @export var name: String @export var description: String @export var cost: Dictionary + +func ready(building: BuildingBase) -> void: + pass diff --git a/data/buildings/building_base.gd b/data/buildings/building_base.gd index 5fa848f..9605c28 100644 --- a/data/buildings/building_base.gd +++ b/data/buildings/building_base.gd @@ -8,6 +8,7 @@ var _building_data: Building func initialize(data: Building, grid_location: Vector2i) -> void: _building_data = data position = Grid.grid_to_world_center(grid_location) + _building_data.ready(self) func _ready() -> void: sprite_2d.texture = _building_data.atlas_texture diff --git a/data/buildings/building_methods.gd b/data/buildings/building_methods.gd new file mode 100644 index 0000000..7c5e8ac --- /dev/null +++ b/data/buildings/building_methods.gd @@ -0,0 +1,5 @@ +extends Resource +class_name BuildingMethods + +func ready(building: BuildingBase) -> void: + pass diff --git a/data/buildings/building_methods.tscn b/data/buildings/building_methods.tscn new file mode 100644 index 0000000..b5fa279 --- /dev/null +++ b/data/buildings/building_methods.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://7threw5x5tw6"] + +[ext_resource type="Script" path="res://data/buildings/building_methods.gd" id="1_ll4rt"] + +[node name="BuildingMethods" type="Node2D"] +script = ExtResource("1_ll4rt") diff --git a/scripts/autoloads/grid.gd b/scripts/autoloads/grid.gd index da28e44..8f4d1be 100644 --- a/scripts/autoloads/grid.gd +++ b/scripts/autoloads/grid.gd @@ -4,6 +4,8 @@ const GRID_SIZE := 64 var world_grid: TileMap var world_data: Dictionary = {} +var res_locations := {} + func init(grid: TileMap) -> void: world_grid = grid @@ -37,6 +39,19 @@ func get_location_data(pos: Vector2i) -> CellData: func change_location_resource(pos: Vector2i, data: GameResource) -> void: world_data[pos].change_resource(data) world_grid.set_cell(Constants.TilemapLayers.ENVIRONMENT, pos, 0, data.atlas_location) + if not res_locations.has(data): + res_locations[data] = [] + res_locations[data].append(Grid.grid_to_world_center(pos)) + +func get_nearest_resource(pos: Vector2, data: GameResource) -> Vector2: + var distance: float = 9999 + var nearest: Vector2 + for location: Vector2 in res_locations[data]: + var _dist = pos.distance_to(location) + if _dist < distance: + distance = _dist + nearest = location + return nearest func change_location_building(pos: Vector2i, data: BuildingBase) -> void: world_data[pos].change_building(data)