diff --git a/common/energy/energy_acceptor.gd b/common/energy/energy_acceptor.gd new file mode 100644 index 0000000..b8b1116 --- /dev/null +++ b/common/energy/energy_acceptor.gd @@ -0,0 +1,8 @@ +extends Node2D +class_name EnergyAcceptor + +func energize(energy: float, position: Vector2): + print("Energy received: ", energy) + +func deplete(): + print("Depleted") diff --git a/common/energy/energy_acceptor.gd.uid b/common/energy/energy_acceptor.gd.uid new file mode 100644 index 0000000..83e8786 --- /dev/null +++ b/common/energy/energy_acceptor.gd.uid @@ -0,0 +1 @@ +uid://dlvp76hruxh7u diff --git a/energy_atlas.png b/energy_atlas.png new file mode 100644 index 0000000..33f5beb Binary files /dev/null and b/energy_atlas.png differ diff --git a/energy_atlas.png.import b/energy_atlas.png.import new file mode 100644 index 0000000..389c181 --- /dev/null +++ b/energy_atlas.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c043h8q16i6eh" +path="res://.godot/imported/energy_atlas.png-388084ae9af008cd62ff73c3768934c0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://energy_atlas.png" +dest_files=["res://.godot/imported/energy_atlas.png-388084ae9af008cd62ff73c3768934c0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/entities/deflector/deflector.gd b/entities/deflector/deflector.gd index 71eda8b..422e7c0 100644 --- a/entities/deflector/deflector.gd +++ b/entities/deflector/deflector.gd @@ -6,5 +6,5 @@ func _on_interaction_area_body_entered(body: Player) -> void: func _on_interaction_area_body_exited(body: Player) -> void: body.interaction_target = null -func interact(): +func interact(player: Player): pass diff --git a/entities/emitter/emitter.tscn b/entities/emitter/emitter.tscn index a6f5ed1..2cf78bf 100644 --- a/entities/emitter/emitter.tscn +++ b/entities/emitter/emitter.tscn @@ -1,19 +1,10 @@ -[gd_scene load_steps=8 format=3 uid="uid://cayxfaqxv0irg"] +[gd_scene load_steps=7 format=3 uid="uid://cayxfaqxv0irg"] [ext_resource type="Script" uid="uid://cxtlguregjv8m" path="res://entities/emitter/emitter.gd" id="1_n2sjg"] [ext_resource type="Texture2D" uid="uid://cnad2jlo5hr1l" path="res://entities/emitter/emitter.aseprite" id="2_m4shj"] +[ext_resource type="PackedScene" uid="uid://dpgncxhv41apt" path="res://entities/energy_flow/energy_flow_line.tscn" id="3_6vwrl"] [ext_resource type="Script" uid="uid://dryjau28sybgd" path="res://common/interactable_body.gd" id="3_n2sjg"] -[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_n2sjg"] -size = Vector2(4, 3) - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_6vwrl"] -particle_flag_disable_z = true -spread = 1.0 -initial_velocity_min = 275.86 -initial_velocity_max = 325.0 -gravity = Vector3(0, 0, 0) - [sub_resource type="CircleShape2D" id="CircleShape2D_m4shj"] radius = 32.0 @@ -27,15 +18,8 @@ metadata/_custom_type_script = "uid://csbip0oj1uu0j" [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("2_m4shj") -[node name="GPUParticles2D" type="GPUParticles2D" parent="."] -position = Vector2(13, 0) -texture = SubResource("PlaceholderTexture2D_n2sjg") -process_material = SubResource("ParticleProcessMaterial_6vwrl") - -[node name="Line2D" type="Line2D" parent="."] -points = PackedVector2Array(0, 0, 300, 0) -width = 3.0 -default_color = Color(1, 0.180392, 1, 1) +[node name="EnergyFlowLine" parent="." instance=ExtResource("3_6vwrl")] +maximum_flow_distance = 313.0 [node name="Area2D" type="Area2D" parent="."] diff --git a/entities/energy_flow/energy_flow.aseprite b/entities/energy_flow/energy_flow.aseprite new file mode 100644 index 0000000..fccebaf Binary files /dev/null and b/entities/energy_flow/energy_flow.aseprite differ diff --git a/entities/energy_flow/energy_flow.aseprite.import b/entities/energy_flow/energy_flow.aseprite.import new file mode 100644 index 0000000..51db572 --- /dev/null +++ b/entities/energy_flow/energy_flow.aseprite.import @@ -0,0 +1,30 @@ +[remap] + +importer="Aseprite Sprite sheet (JSON)" +type="JSON" +uid="uid://bfoujcalueter" +path="res://.godot/imported/energy_flow.aseprite-eb6a9972110bec4c01ba5ba517515d8a.res" + +[deps] + +source_file="res://entities/energy_flow/energy_flow.aseprite" +dest_files=["res://.godot/imported/energy_flow.aseprite-eb6a9972110bec4c01ba5ba517515d8a.res"] + +[params] + +animation/default/name="default" +animation/default/direction=0 +animation/default/repeat_count=0 +animation/autoplay_name="" +atlas_textures/region_filter_clip_enabled=false +animation/merge_equal_sonsequent_frames=true +animation/flatten_repetition=true +middle_import_script="" +post_import_script="" +sprite_sheet/edges_artifacts_avoidance_method=0 +sprite_sheet/sprites_surrounding_color=Color(1, 1, 1, 0) +sprite_sheet/layout=0 +sprite_sheet/max_cells_in_strip=0 +sprite_sheet/trim_sprites_to_overall_min_size=true +sprite_sheet/collapse_transparent_sprites=true +sprite_sheet/merge_duplicated_sprites=true diff --git a/entities/energy_flow/energy_flow_atlas_texture.tres b/entities/energy_flow/energy_flow_atlas_texture.tres new file mode 100644 index 0000000..86ea9e6 --- /dev/null +++ b/entities/energy_flow/energy_flow_atlas_texture.tres @@ -0,0 +1,3 @@ +[gd_resource type="AtlasTexture" format=3 uid="uid://dwer5p1ooqv2c"] + +[resource] diff --git a/entities/energy_flow/energy_flow_line.gd b/entities/energy_flow/energy_flow_line.gd index 0841536..0c561e4 100644 --- a/entities/energy_flow/energy_flow_line.gd +++ b/entities/energy_flow/energy_flow_line.gd @@ -3,7 +3,11 @@ extends Node2D @onready var energy_line: Line2D = %EnergyLine @onready var ray_cast: RayCast2D = %RayCast -@export_range(1,999,8) var maximum_flow_distance: float +@export_range(1,999,1) var maximum_flow_distance: float = 300 +@export var energy: float = 1.0 + +var energy_distribution_target: CollisionObject2D +var target_accepting_energy: EnergyAcceptor func _ready() -> void: var target_position := Vector2(maximum_flow_distance, 0) @@ -14,10 +18,28 @@ func _ready() -> void: ray_cast.target_position = target_position func _process(delta: float) -> void: - energy_line.clear_points() if ray_cast.is_colliding(): + if not ray_cast.get_collider() == energy_distribution_target: + if target_accepting_energy: target_accepting_energy.deplete() + energy_distribution_target = ray_cast.get_collider() + _find_energy_acceptor(energy_distribution_target) + energy_line.clear_points() energy_line.add_point(Vector2.ZERO) - energy_line.add_point(ray_cast.get_collision_point() - global_position) - else : + energy_line.add_point(Vector2(global_position.distance_to(ray_cast.get_collision_point()), 0)) + if target_accepting_energy: + target_accepting_energy.energize(energy * delta, ray_cast.get_collision_point()) + elif energy_distribution_target : + energy_distribution_target = null + if target_accepting_energy: + target_accepting_energy.deplete() + target_accepting_energy = null + energy_line.clear_points() energy_line.add_point(Vector2.ZERO) energy_line.add_point(Vector2(maximum_flow_distance, 0)) + +func _find_energy_acceptor(node: Node): + for child in node.get_children(): + if child is EnergyAcceptor: + target_accepting_energy = child + return + target_accepting_energy = null diff --git a/entities/receiver/receiver.gd b/entities/receiver/receiver.gd index 09a878c..014ecd1 100644 --- a/entities/receiver/receiver.gd +++ b/entities/receiver/receiver.gd @@ -1,4 +1,5 @@ extends Interactable +class_name Receiver func _on_interaction_area_body_entered(body: Player) -> void: body.interaction_target = self diff --git a/entities/receiver/receiver.tscn b/entities/receiver/receiver.tscn index 1b0c1e2..8a25349 100644 --- a/entities/receiver/receiver.tscn +++ b/entities/receiver/receiver.tscn @@ -1,11 +1,28 @@ -[gd_scene load_steps=3 format=3 uid="uid://fo3xwyve7i5p"] +[gd_scene load_steps=6 format=3 uid="uid://fo3xwyve7i5p"] -[ext_resource type="Script" uid="uid://csbip0oj1uu0j" path="res://common/interactable.gd" id="1_iliiv"] +[ext_resource type="Script" uid="uid://bsmung6fgm53e" path="res://entities/receiver/receiver.gd" id="1_ufwo3"] [ext_resource type="Texture2D" uid="uid://bpp73e14xkavd" path="res://entities/receiver/receiver.aseprite" id="2_iyevf"] +[ext_resource type="Script" uid="uid://dryjau28sybgd" path="res://common/interactable_body.gd" id="3_iyevf"] +[ext_resource type="Script" uid="uid://ca1xtf0wra515" path="res://entities/receiver/receiver_energy_acceptor.gd" id="4_ufwo3"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ufwo3"] +size = Vector2(26, 26) [node name="Receiver" type="Node2D"] -script = ExtResource("1_iliiv") +script = ExtResource("1_ufwo3") metadata/_custom_type_script = "uid://csbip0oj1uu0j" [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("2_iyevf") + +[node name="InteractableBody" type="StaticBody2D" parent="."] +script = ExtResource("3_iyevf") +metadata/_custom_type_script = "uid://dryjau28sybgd" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractableBody"] +shape = SubResource("RectangleShape2D_ufwo3") + +[node name="EnergyAcceptor" type="Node2D" parent="InteractableBody" node_paths=PackedStringArray("receiver")] +script = ExtResource("4_ufwo3") +receiver = NodePath("../..") +metadata/_custom_type_script = "uid://dlvp76hruxh7u" diff --git a/entities/receiver/receiver_energy_acceptor.gd b/entities/receiver/receiver_energy_acceptor.gd new file mode 100644 index 0000000..5ee8a4d --- /dev/null +++ b/entities/receiver/receiver_energy_acceptor.gd @@ -0,0 +1,9 @@ +extends EnergyAcceptor + +@export var receiver: Receiver + +func energize(energy: float, position: Vector2): + receiver.modulate = Color.GREEN + +func deplete(): + receiver.modulate = Color.WHITE diff --git a/entities/receiver/receiver_energy_acceptor.gd.uid b/entities/receiver/receiver_energy_acceptor.gd.uid new file mode 100644 index 0000000..7b7a194 --- /dev/null +++ b/entities/receiver/receiver_energy_acceptor.gd.uid @@ -0,0 +1 @@ +uid://ca1xtf0wra515 diff --git a/worlds/World 1.tscn b/worlds/World 1.tscn index fe469b3..bc194d6 100644 --- a/worlds/World 1.tscn +++ b/worlds/World 1.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=4 uid="uid://bopet83k23n7t"] +[gd_scene load_steps=12 format=4 uid="uid://bopet83k23n7t"] [ext_resource type="Texture2D" uid="uid://134x6njync81" path="res://entities/terrain/grass/grass.aseprite" id="1_vd0v3"] [ext_resource type="PackedScene" uid="uid://cprggjrluc751" path="res://entities/player/player.tscn" id="2_8t5gy"] @@ -7,7 +7,6 @@ [ext_resource type="PackedScene" uid="uid://cayxfaqxv0irg" path="res://entities/emitter/emitter.tscn" id="4_6qmhn"] [ext_resource type="PackedScene" uid="uid://docbcbiad4ghy" path="res://entities/deflector/deflector.tscn" id="5_wjxv1"] [ext_resource type="PackedScene" uid="uid://fo3xwyve7i5p" path="res://entities/receiver/receiver.tscn" id="6_vcuff"] -[ext_resource type="PackedScene" uid="uid://dpgncxhv41apt" path="res://entities/energy_flow/energy_flow_line.tscn" id="8_2l688"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_6qmhn"] texture = ExtResource("1_vd0v3") @@ -253,7 +252,3 @@ position = Vector2(246, 148) [node name="Receiver" parent="." instance=ExtResource("6_vcuff")] position = Vector2(264, 23) - -[node name="EnergyFlowLine" parent="." instance=ExtResource("8_2l688")] -position = Vector2(-65, 89) -maximum_flow_distance = 473.0