make a propper part system

This commit is contained in:
luna 2025-05-03 18:46:56 +02:00
parent 3e77aca3e9
commit f91863deeb
34 changed files with 250 additions and 90 deletions

View file

@ -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")

View file

@ -4,8 +4,7 @@ extends RigidBody2D
@onready var dirmodule: DirModule = $dirmodule @onready var dirmodule: DirModule = $dirmodule
@onready var shootmodule: ShootModule = $shootmodule @onready var shootmodule: ShootModule = $shootmodule
@onready var thruster: ThustModule = $thustmodule
@onready var thruster: Thruster = $thruster
@export var thrust: float = 0.3 @export var thrust: float = 0.3

View file

@ -3,10 +3,10 @@
[ext_resource type="Script" uid="uid://buxbgc2aypffw" path="res://enemies/basic/basic.gd" id="1_7627k"] [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="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="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="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://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://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"] [sub_resource type="CircleShape2D" id="CircleShape2D_ytr2k"]
radius = 6.0 radius = 6.0
@ -104,7 +104,6 @@ _data = {
} }
[node name="basic" type="RigidBody2D"] [node name="basic" type="RigidBody2D"]
visible = false
script = ExtResource("1_7627k") script = ExtResource("1_7627k")
thrust = 0.5 thrust = 0.5
@ -122,8 +121,8 @@ pos_factor = 2.0
vel_controll = SubResource("Curve_prw5c") vel_controll = SubResource("Curve_prw5c")
vel_factor = 2.0 vel_factor = 2.0
[node name="thruster" parent="." instance=ExtResource("4_prw5c")] [node name="thustmodule" parent="." instance=ExtResource("7_n1d5r")]
position = Vector2(0, 4) position = Vector2(0, 7)
[node name="shootmodule" type="Marker2D" parent="."] [node name="shootmodule" type="Marker2D" parent="."]
position = Vector2(0, -10) position = Vector2(0, -10)

View file

@ -1,11 +1,10 @@
extends Marker2D extends Marker2D
class_name Thruster class_name ThustModule
@export var active : bool
@onready var pushback: Area2D = $pushback @onready var pushback: Area2D = $pushback
var active: bool = false
func _physics_process(_delta: float) -> void: func _physics_process(delta: float) -> void:
if active: if active:
%fire.emitting = true %fire.emitting = true
%smoke.emitting = true %smoke.emitting = true

View file

@ -0,0 +1 @@
uid://0073im6b257s

View file

@ -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="Script" uid="uid://0073im6b257s" path="res://enemies/thrustmodule.gd" id="1_1k285"]
[ext_resource type="Texture2D" uid="uid://bfsqm78hmybs5" path="res://player/fire.png" id="2_jmeol"] [ext_resource type="Texture2D" uid="uid://de5mda3l4wy3x" path="res://parts/thrusters/smoke.png" id="2_uqiqn"]
[ext_resource type="Texture2D" uid="uid://de5mda3l4wy3x" path="res://player/smoke.png" id="3_gj8x6"] [ext_resource type="Texture2D" uid="uid://bfsqm78hmybs5" path="res://parts/thrusters/fire.png" id="3_6kykv"]
[sub_resource type="Curve" id="Curve_5r2lj"] [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] _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") alpha_curve = SubResource("CurveTexture_70rip")
turbulence_noise_strength = 0.3 turbulence_noise_strength = 0.3
[node name="thruster" type="Marker2D"] [node name="thrustmodule" type="Marker2D"]
gizmo_extents = 3.0 gizmo_extents = 3.0
script = ExtResource("1_ua4l5") script = ExtResource("1_1k285")
[node name="smoke" type="GPUParticles2D" parent="."] [node name="smoke" type="GPUParticles2D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
rotation = 1.5708 rotation = 1.5708
amount = 50 amount = 50
texture = ExtResource("3_gj8x6") texture = ExtResource("2_uqiqn")
lifetime = 2.0 lifetime = 2.0
fixed_fps = 60 fixed_fps = 60
process_material = SubResource("ParticleProcessMaterial_wobn2") process_material = SubResource("ParticleProcessMaterial_wobn2")
@ -60,7 +60,7 @@ process_material = SubResource("ParticleProcessMaterial_wobn2")
unique_name_in_owner = true unique_name_in_owner = true
rotation = 1.5708 rotation = 1.5708
amount = 50 amount = 50
texture = ExtResource("2_jmeol") texture = ExtResource("3_6kykv")
fixed_fps = 60 fixed_fps = 60
process_material = SubResource("ParticleProcessMaterial_wobn2") process_material = SubResource("ParticleProcessMaterial_wobn2")

View file

@ -38,7 +38,7 @@ float border (vec2 uv) {
void fragment() { void fragment() {
vec2 uv = warp(SCREEN_UV); vec2 uv = warp(SCREEN_UV);
float time = fract(TIME / 3.0); float time = fract(TIME / 3.0);
float x = (uv.y - time)*100.0; float x = (uv.y - time)*100.0;
uv.x += pow(100.0,-x*x) * sin(x) / 200.0; uv.x += pow(100.0,-x*x) * sin(x) / 200.0;
@ -60,6 +60,6 @@ void fragment() {
float scanlines = 0.5; float scanlines = 0.5;
scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265)))); 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.rgb = mix(COLOR.rgb, COLOR.rgb * vec3(scanlines), scanlines_opacity);
COLOR *= border(uv); COLOR *= border(uv);
} }

View file

@ -7,7 +7,7 @@ class_name EnergyIndicator
@onready var lower: Marker2D = $lower @onready var lower: Marker2D = $lower
func _physics_process(_delta: float) -> void: 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 upperb := remap(upper.position.y, -34, 0, 0, 1)
var lowerb := remap(lower.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) var min_y := remap(1.0 - energy, 0, 1, upperb, lowerb)

6
parts/part.gd Normal file
View file

@ -0,0 +1,6 @@
extends Marker2D
class_name Part
@export var part_name: String
@export var player: Player
@export var health: float

1
parts/part.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://d4g1pjavusosi

View file

@ -1,5 +1,4 @@
extends Node extends Reactor
class_name Reactor
var energy: float = 1.0 var energy: float = 1.0
var production: float = 0.005 var production: float = 0.005
@ -14,3 +13,9 @@ func try_drain(amount) -> bool:
else: else:
energy -= amount energy -= amount
return true return true
func can_drain(amount) -> bool:
return energy >= amount
func get_fill_level() -> float:
return energy

View file

@ -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"

14
parts/reactors/reactor.gd Normal file
View file

@ -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

View file

@ -0,0 +1 @@
uid://cxb87tj2mok4i

View file

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 213 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bfsqm78hmybs5" uid="uid://bfsqm78hmybs5"
path="res://.godot/imported/fire.png-a4c585a765d3c5c986dbd91409ca2058.ctex" path="res://.godot/imported/fire.png-e4a57ed51f77ddf0825d288bb2ffccf8.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://player/fire.png" source_file="res://parts/thrusters/fire.png"
dest_files=["res://.godot/imported/fire.png-a4c585a765d3c5c986dbd91409ca2058.ctex"] dest_files=["res://.godot/imported/fire.png-e4a57ed51f77ddf0825d288bb2ffccf8.ctex"]
[params] [params]

View file

@ -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

View file

@ -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)

View file

Before

Width:  |  Height:  |  Size: 234 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://de5mda3l4wy3x" uid="uid://de5mda3l4wy3x"
path="res://.godot/imported/smoke.png-90e2193252b3c7142bebc97fd88b34fa.ctex" path="res://.godot/imported/smoke.png-0b59646d58b071970ed4ad23662aae2f.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://player/smoke.png" source_file="res://parts/thrusters/smoke.png"
dest_files=["res://.godot/imported/smoke.png-90e2193252b3c7142bebc97fd88b34fa.ctex"] dest_files=["res://.godot/imported/smoke.png-0b59646d58b071970ed4ad23662aae2f.ctex"]
[params] [params]

View file

@ -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

View file

@ -0,0 +1 @@
uid://duhan6kollwjf

View file

@ -1,4 +1,4 @@
extends Marker2D extends Weapon
@export var bullet: PackedScene @export var bullet: PackedScene
@export var speed: float = 100.0 @export var speed: float = 100.0
@ -6,13 +6,15 @@ extends Marker2D
@export var energy_cost: float = 0.5 @export var energy_cost: float = 0.5
@onready var flash: Flash = %flash @onready var flash: Flash = %flash
@export var player: Player
@export var sprite_scale: Vector2 @export var sprite_scale: Vector2
var can_shoot: bool = true 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(): if not can_shoot or $animations.is_playing():
return return
$animations.play("shoot") $animations.play("shoot")
@ -20,7 +22,7 @@ func shoot() -> void:
func do_shoot() -> void: func do_shoot() -> void:
if not can_shoot: if not can_shoot:
return return
if player.reactor.try_drain(energy_cost): if player.parts.reactor.try_drain(energy_cost):
var instance : Bullet = bullet.instantiate() as Bullet var instance : Bullet = bullet.instantiate() as Bullet
player.get_parent().add_child(instance) player.get_parent().add_child(instance)
instance.global_position = global_position instance.global_position = global_position

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=7 format=3 uid="uid://cmy4ja82e7jdd"] [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="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_8i0oe"] [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_ki6jn"] [ext_resource type="PackedScene" uid="uid://800ou0i3omcs" path="res://effects/flash.tscn" id="3_1v8mn"]
[sub_resource type="Animation" id="Animation_g6k8r"] [sub_resource type="Animation" id="Animation_g6k8r"]
length = 0.001 length = 0.001
@ -76,13 +76,14 @@ _data = {
&"shoot": SubResource("Animation_qjkh3") &"shoot": SubResource("Animation_qjkh3")
} }
[node name="railgun" type="Marker2D"] [node name="canon" type="Marker2D"]
gizmo_extents = 3.0 gizmo_extents = 3.0
script = ExtResource("1_pl3fu") script = ExtResource("1_4nxth")
bullet = ExtResource("2_8i0oe") bullet = ExtResource("2_icx8n")
sprite_scale = Vector2(1, 1) 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 unique_name_in_owner = true
oneshot = false oneshot = false

8
parts/weapons/weapon.gd Normal file
View file

@ -0,0 +1,8 @@
extends Part
class_name Weapon
func try_start_shooting() -> void:
pass
func try_stop_shooting() -> void:
pass

View file

@ -0,0 +1 @@
uid://b2yne4e0ga1m2

View file

@ -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

16
player/part_glue.gd Normal file
View file

@ -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

View file

@ -1,33 +1,21 @@
extends RigidBody2D extends RigidBody2D
class_name Player 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 var angular_velocity_target := 0.0
@export var radar: Radar @export var radar: Radar
@export var reactor: Reactor @export var parts: PartGlue
var delay := false var delay := false
func _physics_process(delta: float) -> void: 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 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))) parts.thruster.update_vector(input)
# 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
if Input.is_action_just_pressed("shoot"): 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: func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
state.angular_velocity = lerp(state.angular_velocity, angular_velocity_target, 0.1) state.angular_velocity = lerp(state.angular_velocity, angular_velocity_target, 0.1)

View file

@ -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="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="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://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://y08tu4ftj3t4" path="res://parts/thrusters/hydrogen.tscn" id="3_r6c8y"]
[ext_resource type="PackedScene" uid="uid://cmy4ja82e7jdd" path="res://components/canon.tscn" id="6_boad6"] [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/components.gd" id="6_rgyib"] [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://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"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_6481p"]
friction = 0.0 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"] [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] _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 point_count = 4
@ -45,15 +41,14 @@ scale_max = 2.0
scale_curve = SubResource("CurveTexture_w2mcu") scale_curve = SubResource("CurveTexture_w2mcu")
alpha_curve = SubResource("CurveTexture_q5aon") 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") physics_material_override = SubResource("PhysicsMaterial_6481p")
gravity_scale = 0.0 gravity_scale = 0.0
can_sleep = false can_sleep = false
angular_damp = 2.0 angular_damp = 2.0
script = ExtResource("1_kkw55") script = ExtResource("1_kkw55")
drift_curve = SubResource("Curve_f6djc")
radar = NodePath("radar") radar = NodePath("radar")
reactor = NodePath("components/reactor") parts = NodePath("parts")
[node name="camera" type="Camera2D" parent="."] [node name="camera" type="Camera2D" parent="."]
zoom = Vector2(4, 4) 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 unique_name_in_owner = true
texture = ExtResource("2_1h4u8") 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="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") 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")] [node name="canon" parent="parts" node_paths=PackedStringArray("player") instance=ExtResource("6_boad6")]
unique_name_in_owner = true
position = Vector2(0, -10) position = Vector2(0, -10)
player = NodePath("../..") 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("../..")