make a propper part system
This commit is contained in:
parent
3e77aca3e9
commit
f91863deeb
34 changed files with 250 additions and 90 deletions
|
@ -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")
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
1
enemies/thrustmodule.gd.uid
Normal file
1
enemies/thrustmodule.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://0073im6b257s
|
|
@ -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")
|
||||
|
|
@ -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)
|
||||
|
|
6
parts/part.gd
Normal file
6
parts/part.gd
Normal 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
1
parts/part.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://d4g1pjavusosi
|
|
@ -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
|
7
parts/reactors/diesel.tscn
Normal file
7
parts/reactors/diesel.tscn
Normal 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
14
parts/reactors/reactor.gd
Normal 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
|
1
parts/reactors/reactor.gd.uid
Normal file
1
parts/reactors/reactor.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://cxb87tj2mok4i
|
Before Width: | Height: | Size: 213 B After Width: | Height: | Size: 213 B |
|
@ -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]
|
||||
|
33
parts/thrusters/hydrogen.gd
Normal file
33
parts/thrusters/hydrogen.gd
Normal 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
|
82
parts/thrusters/hydrogen.tscn
Normal file
82
parts/thrusters/hydrogen.tscn
Normal 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)
|
Before Width: | Height: | Size: 234 B After Width: | Height: | Size: 234 B |
|
@ -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]
|
||||
|
9
parts/thrusters/thruster.gd
Normal file
9
parts/thrusters/thruster.gd
Normal 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
|
1
parts/thrusters/thruster.gd.uid
Normal file
1
parts/thrusters/thruster.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://duhan6kollwjf
|
|
@ -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
|
|
@ -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
|
||||
|
8
parts/weapons/weapon.gd
Normal file
8
parts/weapons/weapon.gd
Normal file
|
@ -0,0 +1,8 @@
|
|||
extends Part
|
||||
class_name Weapon
|
||||
|
||||
func try_start_shooting() -> void:
|
||||
pass
|
||||
|
||||
func try_stop_shooting() -> void:
|
||||
pass
|
1
parts/weapons/weapon.gd.uid
Normal file
1
parts/weapons/weapon.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://b2yne4e0ga1m2
|
|
@ -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
16
player/part_glue.gd
Normal 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
|
|
@ -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)
|
||||
|
|
|
@ -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("../..")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue