diff --git a/components/reactor.tscn b/components/reactor.tscn deleted file mode 100644 index 19c1e50..0000000 --- a/components/reactor.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://dqic53gtybiyf"] - -[ext_resource type="Script" uid="uid://0d467kggbn3d" path="res://components/reactor.gd" id="1_yoeux"] - -[node name="reactor" type="Node"] -script = ExtResource("1_yoeux") diff --git a/enemies/basic/basic.gd b/enemies/basic/basic.gd index 9c5fca4..5943fe7 100644 --- a/enemies/basic/basic.gd +++ b/enemies/basic/basic.gd @@ -4,8 +4,7 @@ extends RigidBody2D @onready var dirmodule: DirModule = $dirmodule @onready var shootmodule: ShootModule = $shootmodule - -@onready var thruster: Thruster = $thruster +@onready var thruster: ThustModule = $thustmodule @export var thrust: float = 0.3 diff --git a/enemies/basic/basic.tscn b/enemies/basic/basic.tscn index 7ec6283..1a84ba1 100644 --- a/enemies/basic/basic.tscn +++ b/enemies/basic/basic.tscn @@ -3,10 +3,10 @@ [ext_resource type="Script" uid="uid://buxbgc2aypffw" path="res://enemies/basic/basic.gd" id="1_7627k"] [ext_resource type="Texture2D" uid="uid://1541pn8483aq" path="res://enemies/basic/basic.png" id="2_ytr2k"] [ext_resource type="Script" uid="uid://v8qsd63ypr1y" path="res://enemies/dirmodule.gd" id="3_jyvyq"] -[ext_resource type="PackedScene" uid="uid://y08tu4ftj3t4" path="res://player/thruster.tscn" id="4_prw5c"] [ext_resource type="Script" uid="uid://cuohktgei6yfn" path="res://enemies/shootmodule.gd" id="5_a6vy3"] [ext_resource type="PackedScene" uid="uid://dnndsvtgqr8eq" path="res://bullet/bullet.tscn" id="6_n1d5r"] [ext_resource type="PackedScene" uid="uid://800ou0i3omcs" path="res://effects/flash.tscn" id="6_v3l44"] +[ext_resource type="PackedScene" uid="uid://dajguyyfjm0v0" path="res://enemies/thrustmodule.tscn" id="7_n1d5r"] [sub_resource type="CircleShape2D" id="CircleShape2D_ytr2k"] radius = 6.0 @@ -104,7 +104,6 @@ _data = { } [node name="basic" type="RigidBody2D"] -visible = false script = ExtResource("1_7627k") thrust = 0.5 @@ -122,8 +121,8 @@ pos_factor = 2.0 vel_controll = SubResource("Curve_prw5c") vel_factor = 2.0 -[node name="thruster" parent="." instance=ExtResource("4_prw5c")] -position = Vector2(0, 4) +[node name="thustmodule" parent="." instance=ExtResource("7_n1d5r")] +position = Vector2(0, 7) [node name="shootmodule" type="Marker2D" parent="."] position = Vector2(0, -10) diff --git a/player/thruster.gd b/enemies/thrustmodule.gd similarity index 71% rename from player/thruster.gd rename to enemies/thrustmodule.gd index 143d5da..76ef548 100644 --- a/player/thruster.gd +++ b/enemies/thrustmodule.gd @@ -1,11 +1,10 @@ extends Marker2D -class_name Thruster - -@export var active : bool +class_name ThustModule @onready var pushback: Area2D = $pushback +var active: bool = false -func _physics_process(_delta: float) -> void: +func _physics_process(delta: float) -> void: if active: %fire.emitting = true %smoke.emitting = true diff --git a/enemies/thrustmodule.gd.uid b/enemies/thrustmodule.gd.uid new file mode 100644 index 0000000..8385503 --- /dev/null +++ b/enemies/thrustmodule.gd.uid @@ -0,0 +1 @@ +uid://0073im6b257s diff --git a/player/thruster.tscn b/enemies/thrustmodule.tscn similarity index 84% rename from player/thruster.tscn rename to enemies/thrustmodule.tscn index 209c1fb..a960e65 100644 --- a/player/thruster.tscn +++ b/enemies/thrustmodule.tscn @@ -1,8 +1,8 @@ -[gd_scene load_steps=11 format=3 uid="uid://y08tu4ftj3t4"] +[gd_scene load_steps=11 format=3 uid="uid://dajguyyfjm0v0"] -[ext_resource type="Script" uid="uid://dr8y6mxsgfprk" path="res://player/thruster.gd" id="1_ua4l5"] -[ext_resource type="Texture2D" uid="uid://bfsqm78hmybs5" path="res://player/fire.png" id="2_jmeol"] -[ext_resource type="Texture2D" uid="uid://de5mda3l4wy3x" path="res://player/smoke.png" id="3_gj8x6"] +[ext_resource type="Script" uid="uid://0073im6b257s" path="res://enemies/thrustmodule.gd" id="1_1k285"] +[ext_resource type="Texture2D" uid="uid://de5mda3l4wy3x" path="res://parts/thrusters/smoke.png" id="2_uqiqn"] +[ext_resource type="Texture2D" uid="uid://bfsqm78hmybs5" path="res://parts/thrusters/fire.png" id="3_6kykv"] [sub_resource type="Curve" id="Curve_5r2lj"] _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.0454545, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] @@ -43,15 +43,15 @@ scale_curve = SubResource("CurveTexture_rkb0o") alpha_curve = SubResource("CurveTexture_70rip") turbulence_noise_strength = 0.3 -[node name="thruster" type="Marker2D"] +[node name="thrustmodule" type="Marker2D"] gizmo_extents = 3.0 -script = ExtResource("1_ua4l5") +script = ExtResource("1_1k285") [node name="smoke" type="GPUParticles2D" parent="."] unique_name_in_owner = true rotation = 1.5708 amount = 50 -texture = ExtResource("3_gj8x6") +texture = ExtResource("2_uqiqn") lifetime = 2.0 fixed_fps = 60 process_material = SubResource("ParticleProcessMaterial_wobn2") @@ -60,7 +60,7 @@ process_material = SubResource("ParticleProcessMaterial_wobn2") unique_name_in_owner = true rotation = 1.5708 amount = 50 -texture = ExtResource("2_jmeol") +texture = ExtResource("3_6kykv") fixed_fps = 60 process_material = SubResource("ParticleProcessMaterial_wobn2") diff --git a/hud/crt.gdshader b/hud/crt.gdshader index 6df84e1..972fbf9 100644 --- a/hud/crt.gdshader +++ b/hud/crt.gdshader @@ -38,7 +38,7 @@ float border (vec2 uv) { void fragment() { vec2 uv = warp(SCREEN_UV); - + float time = fract(TIME / 3.0); float x = (uv.y - time)*100.0; uv.x += pow(100.0,-x*x) * sin(x) / 200.0; @@ -60,6 +60,6 @@ void fragment() { float scanlines = 0.5; scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265)))); COLOR.rgb = mix(COLOR.rgb, COLOR.rgb * vec3(scanlines), scanlines_opacity); - + COLOR *= border(uv); } \ No newline at end of file diff --git a/hud/energy_indicator.gd b/hud/energy_indicator.gd index f174829..c169402 100644 --- a/hud/energy_indicator.gd +++ b/hud/energy_indicator.gd @@ -7,7 +7,7 @@ class_name EnergyIndicator @onready var lower: Marker2D = $lower func _physics_process(_delta: float) -> void: - var energy := player.reactor.energy + var energy := player.parts.reactor.get_fill_level() var upperb := remap(upper.position.y, -34, 0, 0, 1) var lowerb := remap(lower.position.y, -34, 0, 0, 1) var min_y := remap(1.0 - energy, 0, 1, upperb, lowerb) diff --git a/parts/part.gd b/parts/part.gd new file mode 100644 index 0000000..8bb3bf6 --- /dev/null +++ b/parts/part.gd @@ -0,0 +1,6 @@ +extends Marker2D +class_name Part + +@export var part_name: String +@export var player: Player +@export var health: float diff --git a/parts/part.gd.uid b/parts/part.gd.uid new file mode 100644 index 0000000..094b3c7 --- /dev/null +++ b/parts/part.gd.uid @@ -0,0 +1 @@ +uid://d4g1pjavusosi diff --git a/components/reactor.gd b/parts/reactors/diesel.gd similarity index 67% rename from components/reactor.gd rename to parts/reactors/diesel.gd index 17cb8b4..653ec15 100644 --- a/components/reactor.gd +++ b/parts/reactors/diesel.gd @@ -1,5 +1,4 @@ -extends Node -class_name Reactor +extends Reactor var energy: float = 1.0 var production: float = 0.005 @@ -14,3 +13,9 @@ func try_drain(amount) -> bool: else: energy -= amount return true + +func can_drain(amount) -> bool: + return energy >= amount + +func get_fill_level() -> float: + return energy diff --git a/components/reactor.gd.uid b/parts/reactors/diesel.gd.uid similarity index 100% rename from components/reactor.gd.uid rename to parts/reactors/diesel.gd.uid diff --git a/parts/reactors/diesel.tscn b/parts/reactors/diesel.tscn new file mode 100644 index 0000000..e9c8d7f --- /dev/null +++ b/parts/reactors/diesel.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://dqic53gtybiyf"] + +[ext_resource type="Script" uid="uid://0d467kggbn3d" path="res://parts/reactors/diesel.gd" id="1_ekrte"] + +[node name="diesel" type="Marker2D"] +script = ExtResource("1_ekrte") +part_name = "Diesel" diff --git a/parts/reactors/reactor.gd b/parts/reactors/reactor.gd new file mode 100644 index 0000000..f29f2d2 --- /dev/null +++ b/parts/reactors/reactor.gd @@ -0,0 +1,14 @@ +extends Part +class_name Reactor + +func try_drain(_amount) -> bool: + assert(false, "please override") + return false + +func can_drain(_amount) -> bool: + assert(false, "please override") + return false + +func get_fill_level() -> float: + assert(false, "please override") + return -1 diff --git a/parts/reactors/reactor.gd.uid b/parts/reactors/reactor.gd.uid new file mode 100644 index 0000000..ab4bf98 --- /dev/null +++ b/parts/reactors/reactor.gd.uid @@ -0,0 +1 @@ +uid://cxb87tj2mok4i diff --git a/player/fire.png b/parts/thrusters/fire.png similarity index 100% rename from player/fire.png rename to parts/thrusters/fire.png diff --git a/player/fire.png.import b/parts/thrusters/fire.png.import similarity index 73% rename from player/fire.png.import rename to parts/thrusters/fire.png.import index 293dace..40338e3 100644 --- a/player/fire.png.import +++ b/parts/thrusters/fire.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bfsqm78hmybs5" -path="res://.godot/imported/fire.png-a4c585a765d3c5c986dbd91409ca2058.ctex" +path="res://.godot/imported/fire.png-e4a57ed51f77ddf0825d288bb2ffccf8.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://player/fire.png" -dest_files=["res://.godot/imported/fire.png-a4c585a765d3c5c986dbd91409ca2058.ctex"] +source_file="res://parts/thrusters/fire.png" +dest_files=["res://.godot/imported/fire.png-e4a57ed51f77ddf0825d288bb2ffccf8.ctex"] [params] diff --git a/parts/thrusters/hydrogen.gd b/parts/thrusters/hydrogen.gd new file mode 100644 index 0000000..e11a2fe --- /dev/null +++ b/parts/thrusters/hydrogen.gd @@ -0,0 +1,33 @@ +extends Thruster + +@export var thruster_strength := 40.0 +@export var rotation_strength := 10.0 +@export var drift_curve : Curve + +@onready var pushback: Area2D = $pushback +var active: bool = false +var rotating: float + +func _physics_process(delta: float) -> void: + if player == null: + return + + if active: + %fire.emitting = true + %smoke.emitting = true + pushback.gravity = -1500.0 + var angle = abs(player.linear_velocity.angle_to(Vector2.UP.rotated(player.rotation))) + var drift_factor = 2.0 * drift_curve.sample_baked(angle / PI) + 1.0 + player.apply_central_impulse(Vector2.UP.rotated(player.rotation) * thruster_strength * delta * drift_factor) + else: + %fire.emitting = false + %smoke.emitting = false + pushback.gravity = 0 + player.parts.angular_velocity_target = rotating * rotation_strength + +func update_vector(input: Vector2) -> void: + active = input.y > 0 + rotating = input.x + +func is_thrusting() -> bool: + return active diff --git a/player/thruster.gd.uid b/parts/thrusters/hydrogen.gd.uid similarity index 100% rename from player/thruster.gd.uid rename to parts/thrusters/hydrogen.gd.uid diff --git a/parts/thrusters/hydrogen.tscn b/parts/thrusters/hydrogen.tscn new file mode 100644 index 0000000..7d0de9e --- /dev/null +++ b/parts/thrusters/hydrogen.tscn @@ -0,0 +1,82 @@ +[gd_scene load_steps=12 format=3 uid="uid://y08tu4ftj3t4"] + +[ext_resource type="Script" uid="uid://dr8y6mxsgfprk" path="res://parts/thrusters/hydrogen.gd" id="1_ua4l5"] +[ext_resource type="Texture2D" uid="uid://bfsqm78hmybs5" path="res://parts/thrusters/fire.png" id="2_jmeol"] +[ext_resource type="Texture2D" uid="uid://de5mda3l4wy3x" path="res://parts/thrusters/smoke.png" id="3_gj8x6"] + +[sub_resource type="Curve" id="Curve_sco4l"] +_data = [Vector2(0.2, 0), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.505618), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="Curve" id="Curve_5r2lj"] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.0454545, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_70rip"] +curve = SubResource("Curve_5r2lj") + +[sub_resource type="Curve" id="Curve_1d6y2"] +_limits = [0.0, 100.0, 0.0, 1.0] +_data = [Vector2(0, 47.0097), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_4ynfm"] +curve = SubResource("Curve_1d6y2") + +[sub_resource type="Curve" id="Curve_ihsbl"] +_data = [Vector2(0, 0.541764), 0.0, 0.0, 0, 0, Vector2(0.29249, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -3.36652, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_rkb0o"] +curve = SubResource("Curve_ihsbl") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_wobn2"] +particle_flag_disable_z = true +angle_min = -720.0 +angle_max = 720.0 +spread = 10.0 +initial_velocity_min = 150.0 +initial_velocity_max = 150.0 +angular_velocity_min = -180.0 +angular_velocity_max = 180.0 +gravity = Vector3(0, 0, 0) +damping_min = 2.0 +damping_max = 2.0 +damping_curve = SubResource("CurveTexture_4ynfm") +scale_curve = SubResource("CurveTexture_rkb0o") +alpha_curve = SubResource("CurveTexture_70rip") +turbulence_noise_strength = 0.3 + +[node name="hydrogen" type="Marker2D"] +gizmo_extents = 3.0 +script = ExtResource("1_ua4l5") +drift_curve = SubResource("Curve_sco4l") +part_name = "Hydrogen" + +[node name="smoke" type="GPUParticles2D" parent="."] +unique_name_in_owner = true +rotation = 1.5708 +amount = 50 +texture = ExtResource("3_gj8x6") +lifetime = 2.0 +fixed_fps = 60 +process_material = SubResource("ParticleProcessMaterial_wobn2") + +[node name="fire" type="GPUParticles2D" parent="."] +unique_name_in_owner = true +rotation = 1.5708 +amount = 50 +texture = ExtResource("2_jmeol") +fixed_fps = 60 +process_material = SubResource("ParticleProcessMaterial_wobn2") + +[node name="pushback" type="Area2D" parent="."] +gravity_space_override = 1 +gravity_point = true +gravity_point_unit_distance = 3.0 +gravity_point_center = Vector2(0, 0) +gravity_direction = Vector2(0, 0) +gravity = -1500.0 + +[node name="shape" type="CollisionPolygon2D" parent="pushback"] +polygon = PackedVector2Array(-3, 5, -15, 80, 14, 80, 3, 5) diff --git a/player/smoke.png b/parts/thrusters/smoke.png similarity index 100% rename from player/smoke.png rename to parts/thrusters/smoke.png diff --git a/player/smoke.png.import b/parts/thrusters/smoke.png.import similarity index 72% rename from player/smoke.png.import rename to parts/thrusters/smoke.png.import index 5098cef..3f759a7 100644 --- a/player/smoke.png.import +++ b/parts/thrusters/smoke.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://de5mda3l4wy3x" -path="res://.godot/imported/smoke.png-90e2193252b3c7142bebc97fd88b34fa.ctex" +path="res://.godot/imported/smoke.png-0b59646d58b071970ed4ad23662aae2f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://player/smoke.png" -dest_files=["res://.godot/imported/smoke.png-90e2193252b3c7142bebc97fd88b34fa.ctex"] +source_file="res://parts/thrusters/smoke.png" +dest_files=["res://.godot/imported/smoke.png-0b59646d58b071970ed4ad23662aae2f.ctex"] [params] diff --git a/parts/thrusters/thruster.gd b/parts/thrusters/thruster.gd new file mode 100644 index 0000000..9947680 --- /dev/null +++ b/parts/thrusters/thruster.gd @@ -0,0 +1,9 @@ +extends Part +class_name Thruster + +func update_vector(input: Vector2) -> void: + pass + +func is_thrusting() -> bool: + assert(false, "must be overwritten") + return false diff --git a/parts/thrusters/thruster.gd.uid b/parts/thrusters/thruster.gd.uid new file mode 100644 index 0000000..c5eceec --- /dev/null +++ b/parts/thrusters/thruster.gd.uid @@ -0,0 +1 @@ +uid://duhan6kollwjf diff --git a/player/railgun.gd b/parts/weapons/canon.gd similarity index 81% rename from player/railgun.gd rename to parts/weapons/canon.gd index 716f504..7688957 100644 --- a/player/railgun.gd +++ b/parts/weapons/canon.gd @@ -1,4 +1,4 @@ -extends Marker2D +extends Weapon @export var bullet: PackedScene @export var speed: float = 100.0 @@ -6,13 +6,15 @@ extends Marker2D @export var energy_cost: float = 0.5 @onready var flash: Flash = %flash -@export var player: Player @export var sprite_scale: Vector2 var can_shoot: bool = true -func shoot() -> void: +func _process(_delta: float) -> void: + player.parts.sprite_scale = sprite_scale + +func try_start_shooting() -> void: if not can_shoot or $animations.is_playing(): return $animations.play("shoot") @@ -20,7 +22,7 @@ func shoot() -> void: func do_shoot() -> void: if not can_shoot: return - if player.reactor.try_drain(energy_cost): + if player.parts.reactor.try_drain(energy_cost): var instance : Bullet = bullet.instantiate() as Bullet player.get_parent().add_child(instance) instance.global_position = global_position diff --git a/player/railgun.gd.uid b/parts/weapons/canon.gd.uid similarity index 100% rename from player/railgun.gd.uid rename to parts/weapons/canon.gd.uid diff --git a/components/canon.tscn b/parts/weapons/canon.tscn similarity index 89% rename from components/canon.tscn rename to parts/weapons/canon.tscn index 030c089..3dcb2ef 100644 --- a/components/canon.tscn +++ b/parts/weapons/canon.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=7 format=3 uid="uid://cmy4ja82e7jdd"] -[ext_resource type="Script" uid="uid://dccya6vnwi1x4" path="res://player/railgun.gd" id="1_pl3fu"] -[ext_resource type="PackedScene" uid="uid://dnndsvtgqr8eq" path="res://bullet/bullet.tscn" id="2_8i0oe"] -[ext_resource type="PackedScene" uid="uid://800ou0i3omcs" path="res://effects/flash.tscn" id="3_ki6jn"] +[ext_resource type="Script" uid="uid://dccya6vnwi1x4" path="res://parts/weapons/canon.gd" id="1_4nxth"] +[ext_resource type="PackedScene" uid="uid://dnndsvtgqr8eq" path="res://bullet/bullet.tscn" id="2_icx8n"] +[ext_resource type="PackedScene" uid="uid://800ou0i3omcs" path="res://effects/flash.tscn" id="3_1v8mn"] [sub_resource type="Animation" id="Animation_g6k8r"] length = 0.001 @@ -76,13 +76,14 @@ _data = { &"shoot": SubResource("Animation_qjkh3") } -[node name="railgun" type="Marker2D"] +[node name="canon" type="Marker2D"] gizmo_extents = 3.0 -script = ExtResource("1_pl3fu") -bullet = ExtResource("2_8i0oe") +script = ExtResource("1_4nxth") +bullet = ExtResource("2_icx8n") sprite_scale = Vector2(1, 1) +part_name = "Canon" -[node name="flash" parent="." instance=ExtResource("3_ki6jn")] +[node name="flash" parent="." instance=ExtResource("3_1v8mn")] unique_name_in_owner = true oneshot = false diff --git a/parts/weapons/weapon.gd b/parts/weapons/weapon.gd new file mode 100644 index 0000000..807c594 --- /dev/null +++ b/parts/weapons/weapon.gd @@ -0,0 +1,8 @@ +extends Part +class_name Weapon + +func try_start_shooting() -> void: + pass + +func try_stop_shooting() -> void: + pass diff --git a/parts/weapons/weapon.gd.uid b/parts/weapons/weapon.gd.uid new file mode 100644 index 0000000..02b405b --- /dev/null +++ b/parts/weapons/weapon.gd.uid @@ -0,0 +1 @@ +uid://b2yne4e0ga1m2 diff --git a/player/components.gd b/player/components.gd deleted file mode 100644 index af80e17..0000000 --- a/player/components.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends Node2D - -@onready var canon: Marker2D = %canon -@onready var reactor: Reactor = $reactor - -func _process(_delta: float) -> void: - %image.scale = canon.sprite_scale diff --git a/player/part_glue.gd b/player/part_glue.gd new file mode 100644 index 0000000..08208c4 --- /dev/null +++ b/player/part_glue.gd @@ -0,0 +1,16 @@ +extends Node2D +class_name PartGlue + +@export var weapon: Weapon +@export var reactor: Reactor +@export var thruster: Thruster + +@export var player: Player +@export var image: Sprite2D + +@export var sprite_scale: Vector2 = Vector2.ONE +@export var angular_velocity_target: float = 0.0 + +func _process(_delta: float) -> void: + image.scale = sprite_scale + player.angular_velocity_target = angular_velocity_target diff --git a/player/components.gd.uid b/player/part_glue.gd.uid similarity index 100% rename from player/components.gd.uid rename to player/part_glue.gd.uid diff --git a/player/player.gd b/player/player.gd index 00862c0..56cf5ad 100644 --- a/player/player.gd +++ b/player/player.gd @@ -1,33 +1,21 @@ extends RigidBody2D class_name Player - -@export var thruster_strength := 40.0 -@export var rotation_strength := 10.0 -@export var drift_curve : Curve var angular_velocity_target := 0.0 @export var radar: Radar -@export var reactor: Reactor +@export var parts: PartGlue var delay := false func _physics_process(delta: float) -> void: var input := Vector2(Input.get_action_strength("right") - Input.get_action_strength("left"), Input.get_action_strength("boost")) - var angle = abs(linear_velocity.angle_to(Vector2.UP.rotated(rotation))) - # var drift_factor = clamp(5-abs(linear_velocity.dot(Vector2.UP.rotated(rotation))), 1, 5) - var drift_factor = 2.0 * drift_curve.sample_baked(angle / PI) + 1.0 - apply_central_impulse(Vector2.UP.rotated(rotation) * thruster_strength * delta * input.y * drift_factor) - - angular_velocity_target = input.x * rotation_strength - - if input.y > 0: - %thruster.active = true - else: - %thruster.active = false + parts.thruster.update_vector(input) if Input.is_action_just_pressed("shoot"): - %canon.shoot() + parts.weapon.try_start_shooting() + if Input.is_action_just_released("shoot"): + parts.weapon.try_stop_shooting() func _integrate_forces(state: PhysicsDirectBodyState2D) -> void: state.angular_velocity = lerp(state.angular_velocity, angular_velocity_target, 0.1) diff --git a/player/player.tscn b/player/player.tscn index 3aa3a7d..f8ed975 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -1,21 +1,17 @@ -[gd_scene load_steps=16 format=3 uid="uid://b3xadpl4pu33u"] +[gd_scene load_steps=15 format=3 uid="uid://b3xadpl4pu33u"] [ext_resource type="Script" uid="uid://erjhplyctxik" path="res://player/player.gd" id="1_kkw55"] [ext_resource type="Texture2D" uid="uid://dlenptyfk1iwn" path="res://player/ship.png" id="2_1h4u8"] [ext_resource type="PackedScene" uid="uid://cyq7l8x1pbh1h" path="res://hud/hud.tscn" id="2_rgyib"] -[ext_resource type="PackedScene" uid="uid://y08tu4ftj3t4" path="res://player/thruster.tscn" id="3_r6c8y"] -[ext_resource type="PackedScene" uid="uid://cmy4ja82e7jdd" path="res://components/canon.tscn" id="6_boad6"] -[ext_resource type="Script" uid="uid://qg3wympvxydq" path="res://player/components.gd" id="6_rgyib"] +[ext_resource type="PackedScene" uid="uid://y08tu4ftj3t4" path="res://parts/thrusters/hydrogen.tscn" id="3_r6c8y"] +[ext_resource type="PackedScene" uid="uid://cmy4ja82e7jdd" path="res://parts/weapons/canon.tscn" id="6_boad6"] +[ext_resource type="Script" uid="uid://qg3wympvxydq" path="res://player/part_glue.gd" id="6_rgyib"] [ext_resource type="PackedScene" uid="uid://dfm1atk5lpdo4" path="res://hud/radar/radar.tscn" id="7_rgyib"] -[ext_resource type="PackedScene" uid="uid://dqic53gtybiyf" path="res://components/reactor.tscn" id="9_hg6s5"] +[ext_resource type="PackedScene" uid="uid://dqic53gtybiyf" path="res://parts/reactors/diesel.tscn" id="9_hg6s5"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_6481p"] friction = 0.0 -[sub_resource type="Curve" id="Curve_f6djc"] -_data = [Vector2(0.2, 0), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.505618), 0.0, 0.0, 0, 0] -point_count = 3 - [sub_resource type="Curve" id="Curve_f2yms"] _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.217391, 1), 0.0, 0.0, 0, 0, Vector2(0.804348, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] point_count = 4 @@ -45,15 +41,14 @@ scale_max = 2.0 scale_curve = SubResource("CurveTexture_w2mcu") alpha_curve = SubResource("CurveTexture_q5aon") -[node name="player" type="RigidBody2D" node_paths=PackedStringArray("radar", "reactor")] +[node name="player" type="RigidBody2D" node_paths=PackedStringArray("radar", "parts")] physics_material_override = SubResource("PhysicsMaterial_6481p") gravity_scale = 0.0 can_sleep = false angular_damp = 2.0 script = ExtResource("1_kkw55") -drift_curve = SubResource("Curve_f6djc") radar = NodePath("radar") -reactor = NodePath("components/reactor") +parts = NodePath("parts") [node name="camera" type="Camera2D" parent="."] zoom = Vector2(4, 4) @@ -74,18 +69,23 @@ polygon = PackedVector2Array(-5, 7, 0, -7, 5, 7, 2, 8, -2, 8) unique_name_in_owner = true texture = ExtResource("2_1h4u8") -[node name="thruster" parent="." instance=ExtResource("3_r6c8y")] -unique_name_in_owner = true -position = Vector2(0, 8) - [node name="radar" parent="." instance=ExtResource("7_rgyib")] -[node name="components" type="Node2D" parent="."] +[node name="parts" type="Node2D" parent="." node_paths=PackedStringArray("weapon", "reactor", "thruster", "player", "image")] script = ExtResource("6_rgyib") +weapon = NodePath("canon") +reactor = NodePath("diesel") +thruster = NodePath("hydrogen") +player = NodePath("..") +image = NodePath("../image") -[node name="canon" parent="components" node_paths=PackedStringArray("player") instance=ExtResource("6_boad6")] -unique_name_in_owner = true +[node name="canon" parent="parts" node_paths=PackedStringArray("player") instance=ExtResource("6_boad6")] position = Vector2(0, -10) player = NodePath("../..") -[node name="reactor" parent="components" instance=ExtResource("9_hg6s5")] +[node name="diesel" parent="parts" node_paths=PackedStringArray("player") instance=ExtResource("9_hg6s5")] +player = NodePath("../..") + +[node name="hydrogen" parent="parts" node_paths=PackedStringArray("player") instance=ExtResource("3_r6c8y")] +position = Vector2(0, 8) +player = NodePath("../..")