an enemy :3
This commit is contained in:
parent
559ab93e57
commit
02ea283fa5
36 changed files with 950 additions and 13 deletions
19
bullet/bullet.gd
Normal file
19
bullet/bullet.gd
Normal file
|
@ -0,0 +1,19 @@
|
|||
extends RigidBody2D
|
||||
class_name Bullet
|
||||
|
||||
var player : Player
|
||||
@export var flash : PackedScene = preload("res://effects/flash.tscn")
|
||||
var pref : int = 0
|
||||
|
||||
func _integrate_forces(state) -> void:
|
||||
pref += 1
|
||||
if state.get_contact_count() > 0 && pref > 10:
|
||||
pref = 0
|
||||
var instance = flash.instantiate()
|
||||
instance.global_position = state.get_contact_collider_position(0)
|
||||
get_parent().add_child(instance)
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
if body != Player and $animation.current_animation_position < 8:
|
||||
$animation.seek(8)
|
1
bullet/bullet.gd.uid
Normal file
1
bullet/bullet.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://c3eechg8hdpsc
|
BIN
bullet/bullet.png
Normal file
BIN
bullet/bullet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 171 B |
34
bullet/bullet.png.import
Normal file
34
bullet/bullet.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cnj23l3endv58"
|
||||
path="res://.godot/imported/bullet.png-2c2153c0dd3b3eaf69d3b6d097e024ff.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://bullet/bullet.png"
|
||||
dest_files=["res://.godot/imported/bullet.png-2c2153c0dd3b3eaf69d3b6d097e024ff.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
|
155
bullet/bullet.tscn
Normal file
155
bullet/bullet.tscn
Normal file
|
@ -0,0 +1,155 @@
|
|||
[gd_scene load_steps=12 format=3 uid="uid://dnndsvtgqr8eq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c3eechg8hdpsc" path="res://bullet/bullet.gd" id="1_0qjqd"]
|
||||
[ext_resource type="Texture2D" uid="uid://cnj23l3endv58" path="res://bullet/bullet.png" id="1_k2aps"]
|
||||
[ext_resource type="Texture2D" uid="uid://coegvp4cunsnn" path="res://bullet/bullet_colors.png" id="2_6wip1"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_k2aps"]
|
||||
radius = 4.0
|
||||
|
||||
[sub_resource type="Animation" id="Animation_6wip1"]
|
||||
length = 0.001
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("trail:emitting")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_k2aps"]
|
||||
resource_name = "death"
|
||||
length = 10.0
|
||||
step = 0.1
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1e-05, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 9.6, 10)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1e-05, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 9.6, 10)
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(10),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"queue_free"
|
||||
}]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("trail:emitting")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 9),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6wip1"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_6wip1"),
|
||||
&"death": SubResource("Animation_k2aps")
|
||||
}
|
||||
|
||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_k2aps"]
|
||||
particles_animation = true
|
||||
particles_anim_h_frames = 4
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
|
||||
[sub_resource type="Curve" id="Curve_k2aps"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.238372, 1), 0.0, 0.0, 0, 0, Vector2(0.738372, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_6wip1"]
|
||||
curve = SubResource("Curve_k2aps")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_k2aps"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape_scale = Vector3(5, 5, 0)
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 1.0
|
||||
angle_min = -720.0
|
||||
angle_max = 720.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
scale_curve = SubResource("CurveTexture_6wip1")
|
||||
anim_offset_max = 1.0
|
||||
|
||||
[node name="bullet" type="RigidBody2D"]
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_0qjqd")
|
||||
|
||||
[node name="collision" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_k2aps")
|
||||
|
||||
[node name="image" type="Sprite2D" parent="."]
|
||||
modulate = Color(2, 2, 2, 1)
|
||||
texture = ExtResource("1_k2aps")
|
||||
|
||||
[node name="animation" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_6wip1")
|
||||
}
|
||||
autoplay = "death"
|
||||
|
||||
[node name="trail" type="GPUParticles2D" parent="."]
|
||||
modulate = Color(1.5, 1.5, 1.5, 1)
|
||||
material = SubResource("CanvasItemMaterial_k2aps")
|
||||
amount = 20
|
||||
texture = ExtResource("2_6wip1")
|
||||
process_material = SubResource("ParticleProcessMaterial_k2aps")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
BIN
bullet/bullet_colors.png
Normal file
BIN
bullet/bullet_colors.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 B |
34
bullet/bullet_colors.png.import
Normal file
34
bullet/bullet_colors.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://coegvp4cunsnn"
|
||||
path="res://.godot/imported/bullet_colors.png-6427ad6150c8a2cb40e110dd08b6f774.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://bullet/bullet_colors.png"
|
||||
dest_files=["res://.godot/imported/bullet_colors.png-6427ad6150c8a2cb40e110dd08b6f774.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
|
16
effects/flash.gd
Normal file
16
effects/flash.gd
Normal file
|
@ -0,0 +1,16 @@
|
|||
extends Node2D
|
||||
class_name Flash
|
||||
|
||||
@export var oneshot : bool = true
|
||||
|
||||
func _ready() -> void:
|
||||
if oneshot:
|
||||
flash()
|
||||
|
||||
func flash() -> void:
|
||||
if oneshot or not $animation.is_playing():
|
||||
$animation.play("flash")
|
||||
|
||||
func destroy() -> void:
|
||||
if oneshot:
|
||||
queue_free()
|
1
effects/flash.gd.uid
Normal file
1
effects/flash.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://ddh5k2bh3mqp7
|
99
effects/flash.tscn
Normal file
99
effects/flash.tscn
Normal file
|
@ -0,0 +1,99 @@
|
|||
[gd_scene load_steps=10 format=3 uid="uid://800ou0i3omcs"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://coegvp4cunsnn" path="res://bullet/bullet_colors.png" id="1_7hhmj"]
|
||||
[ext_resource type="Script" uid="uid://ddh5k2bh3mqp7" path="res://effects/flash.gd" id="1_xcggr"]
|
||||
|
||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_qjkh3"]
|
||||
particles_animation = true
|
||||
particles_anim_h_frames = 4
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
|
||||
[sub_resource type="Curve" id="Curve_yw30f"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.188953, 1), 0.0, 0.0, 0, 0, Vector2(0.549419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_qjkh3"]
|
||||
curve = SubResource("Curve_yw30f")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_yw30f"]
|
||||
particle_flag_disable_z = true
|
||||
angle_min = -720.0
|
||||
angle_max = 720.0
|
||||
spread = 180.0
|
||||
initial_velocity_min = 20.0
|
||||
initial_velocity_max = 20.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
damping_min = 30.0
|
||||
damping_max = 30.0
|
||||
scale_curve = SubResource("CurveTexture_qjkh3")
|
||||
anim_offset_max = 1.0
|
||||
|
||||
[sub_resource type="Animation" id="Animation_qjkh3"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("particles:emitting")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_yw30f"]
|
||||
resource_name = "flash"
|
||||
length = 0.6
|
||||
step = 0.1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("particles:emitting")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/1/type = "method"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.6),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"destroy"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g6k8r"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_qjkh3"),
|
||||
&"flash": SubResource("Animation_yw30f")
|
||||
}
|
||||
|
||||
[node name="flash" type="Node2D"]
|
||||
script = ExtResource("1_xcggr")
|
||||
|
||||
[node name="particles" type="GPUParticles2D" parent="."]
|
||||
modulate = Color(2, 2, 2, 1)
|
||||
material = SubResource("CanvasItemMaterial_qjkh3")
|
||||
emitting = false
|
||||
amount = 100
|
||||
texture = ExtResource("1_7hhmj")
|
||||
lifetime = 0.3
|
||||
process_material = SubResource("ParticleProcessMaterial_yw30f")
|
||||
|
||||
[node name="animation" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_g6k8r")
|
||||
}
|
37
enemies/basic/basic.gd
Normal file
37
enemies/basic/basic.gd
Normal file
|
@ -0,0 +1,37 @@
|
|||
extends RigidBody2D
|
||||
|
||||
@export var player : Player
|
||||
|
||||
@onready var dirmodule: DirModule = $dirmodule
|
||||
@onready var shootmodule: ShootModule = $shootmodule
|
||||
|
||||
@onready var thruster: Thruster = $thruster
|
||||
|
||||
@export var thrust: float = 0.3
|
||||
|
||||
func _ready() -> void:
|
||||
player.radar.declare_threat(self)
|
||||
func _exit_tree() -> void:
|
||||
player.radar.release_threat(self)
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if player == null:
|
||||
print("no target for enemy!")
|
||||
return
|
||||
|
||||
dirmodule.active = true
|
||||
dirmodule.target_position = player.global_position - 2.0 * linear_velocity.project((global_position-player.global_position).normalized().rotated(PI/2))
|
||||
var diff : float = Vector2.UP.rotated(global_rotation).dot((global_position - dirmodule.target_position).normalized())
|
||||
|
||||
if diff < -0.3:
|
||||
apply_central_impulse(thrust * Vector2.UP.rotated(global_rotation))
|
||||
thruster.active = true
|
||||
else:
|
||||
thruster.active = false
|
||||
|
||||
if diff < -0.9 && not $animations.is_playing() && shootmodule.can_shoot:
|
||||
$animations.play("shoot")
|
||||
player.radar.declare_danger(self)
|
||||
|
||||
func done_shooting() -> void:
|
||||
player.radar.release_danger(self)
|
1
enemies/basic/basic.gd.uid
Normal file
1
enemies/basic/basic.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://buxbgc2aypffw
|
BIN
enemies/basic/basic.png
Normal file
BIN
enemies/basic/basic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 305 B |
34
enemies/basic/basic.png.import
Normal file
34
enemies/basic/basic.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://1541pn8483aq"
|
||||
path="res://.godot/imported/basic.png-2a63e2beee8b76cb1807cbaffaa7575b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/basic/basic.png"
|
||||
dest_files=["res://.godot/imported/basic.png-2a63e2beee8b76cb1807cbaffaa7575b.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
|
142
enemies/basic/basic.tscn
Normal file
142
enemies/basic/basic.tscn
Normal file
|
@ -0,0 +1,142 @@
|
|||
[gd_scene load_steps=14 format=3 uid="uid://cwedpavtb5vfc"]
|
||||
|
||||
[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"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_ytr2k"]
|
||||
radius = 6.0
|
||||
|
||||
[sub_resource type="Curve" id="Curve_jyvyq"]
|
||||
_data = [Vector2(0, 0.251087), 0.0, 0.0, 0, 0, Vector2(0.271233, 1), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="Curve" id="Curve_prw5c"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.336986, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="Animation" id="Animation_0bibs"]
|
||||
length = 0.001
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_n1d5r"]
|
||||
resource_name = "shoot"
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1.1, -0.25, 0, 0.25, 0, 0.835, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.5, 0.766667, 1)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 0.806, -0.25, 0, 0.25, 0, 1.177, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.5, 0.766667, 1)
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("shootmodule")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.6),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"shoot"
|
||||
}]
|
||||
}
|
||||
tracks/3/type = "method"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.8),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"done_shooting"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0bibs"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_0bibs"),
|
||||
&"shoot": SubResource("Animation_n1d5r")
|
||||
}
|
||||
|
||||
[node name="basic" type="RigidBody2D"]
|
||||
visible = false
|
||||
script = ExtResource("1_7627k")
|
||||
thrust = 0.5
|
||||
|
||||
[node name="image" type="Sprite2D" parent="."]
|
||||
rotation = -6.28318
|
||||
texture = ExtResource("2_ytr2k")
|
||||
|
||||
[node name="collision" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_ytr2k")
|
||||
|
||||
[node name="dirmodule" type="Node" parent="."]
|
||||
script = ExtResource("3_jyvyq")
|
||||
pos_controll = SubResource("Curve_jyvyq")
|
||||
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="shootmodule" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -10)
|
||||
gizmo_extents = 3.0
|
||||
script = ExtResource("5_a6vy3")
|
||||
bullet = ExtResource("6_n1d5r")
|
||||
speed = 50.0
|
||||
knockback = 50.0
|
||||
|
||||
[node name="flash" parent="shootmodule" instance=ExtResource("6_v3l44")]
|
||||
oneshot = false
|
||||
|
||||
[node name="animations" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_0bibs")
|
||||
}
|
28
enemies/dirmodule.gd
Normal file
28
enemies/dirmodule.gd
Normal file
|
@ -0,0 +1,28 @@
|
|||
extends Node
|
||||
class_name DirModule
|
||||
|
||||
# in global coordinates
|
||||
@export var target_position: Vector2
|
||||
@export var active: bool = false
|
||||
@export var offset: float = PI / 2
|
||||
|
||||
@export var pos_controll: Curve
|
||||
@export var pos_factor: float = 1.0
|
||||
@export var vel_controll: Curve
|
||||
@export var vel_factor: float = 1.0
|
||||
|
||||
@onready var parent: RigidBody2D = get_parent()
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if not active:
|
||||
return
|
||||
|
||||
var diff := parent.global_position.angle_to_point(target_position) - parent.global_rotation + offset
|
||||
while diff < -PI:
|
||||
diff += PI * 2
|
||||
while diff > PI:
|
||||
diff -= PI * 2
|
||||
var closeness: float = abs(diff) / PI
|
||||
parent.apply_torque_impulse(
|
||||
pos_factor * sign(diff) * pos_controll.sample_baked(closeness)
|
||||
- vel_factor * sign(parent.angular_velocity) * vel_controll.sample_baked(closeness))
|
1
enemies/dirmodule.gd.uid
Normal file
1
enemies/dirmodule.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://v8qsd63ypr1y
|
26
enemies/shootmodule.gd
Normal file
26
enemies/shootmodule.gd
Normal file
|
@ -0,0 +1,26 @@
|
|||
extends Marker2D
|
||||
class_name ShootModule
|
||||
|
||||
@export var bullet: PackedScene
|
||||
@export var speed: float = 100.0
|
||||
@export var knockback: float = 10.0
|
||||
@export var timeout: float = 2.0
|
||||
|
||||
var can_shoot: bool = true
|
||||
|
||||
@onready var parent: RigidBody2D = get_parent()
|
||||
|
||||
func shoot() -> void:
|
||||
if not can_shoot:
|
||||
return
|
||||
var instance : Bullet = bullet.instantiate() as Bullet
|
||||
parent.get_parent().add_child(instance)
|
||||
instance.global_position = global_position
|
||||
instance.apply_central_impulse(Vector2.UP.rotated(global_rotation) * speed)
|
||||
instance.apply_central_impulse(parent.linear_velocity.project(Vector2.UP.rotated(global_rotation)))
|
||||
instance.player = parent.player
|
||||
parent.apply_central_impulse(Vector2.DOWN.rotated(global_rotation) * knockback)
|
||||
$flash.flash()
|
||||
can_shoot = false
|
||||
await get_tree().create_timer(timeout).timeout
|
||||
can_shoot = true
|
1
enemies/shootmodule.gd.uid
Normal file
1
enemies/shootmodule.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://cuohktgei6yfn
|
30
hud/radar/radar.gd
Normal file
30
hud/radar/radar.gd
Normal file
|
@ -0,0 +1,30 @@
|
|||
extends Node2D
|
||||
class_name Radar
|
||||
|
||||
@export var threat_packed: PackedScene
|
||||
|
||||
func declare_threat(node: Node2D) -> void:
|
||||
var instance: Threat = threat_packed.instantiate()
|
||||
instance.node = node
|
||||
add_child(instance)
|
||||
|
||||
func release_threat(node: Node2D) -> void:
|
||||
for i: int in get_child_count():
|
||||
var threat: Threat = get_child(i)
|
||||
if threat.node == node:
|
||||
remove_child(threat)
|
||||
return
|
||||
|
||||
func declare_danger(node: Node2D) -> void:
|
||||
for i: int in get_child_count():
|
||||
var threat: Threat = get_child(i)
|
||||
if threat.node == node:
|
||||
threat.declare_danger()
|
||||
func release_danger(node: Node2D) -> void:
|
||||
for i: int in get_child_count():
|
||||
var threat: Threat = get_child(i)
|
||||
if threat.node == node:
|
||||
threat.release_danger()
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
global_rotation = 0.0
|
1
hud/radar/radar.gd.uid
Normal file
1
hud/radar/radar.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://s6xe11km41qe
|
9
hud/radar/radar.tscn
Normal file
9
hud/radar/radar.tscn
Normal file
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://dfm1atk5lpdo4"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://s6xe11km41qe" path="res://hud/radar/radar.gd" id="1_jp2lf"]
|
||||
[ext_resource type="PackedScene" uid="uid://dwk5lnfnntqh2" path="res://hud/radar/threat.tscn" id="2_23wok"]
|
||||
|
||||
[node name="radar" type="Node2D"]
|
||||
z_index = 1
|
||||
script = ExtResource("1_jp2lf")
|
||||
threat_packed = ExtResource("2_23wok")
|
21
hud/radar/threat.gd
Normal file
21
hud/radar/threat.gd
Normal file
|
@ -0,0 +1,21 @@
|
|||
extends Sprite2D
|
||||
class_name Threat
|
||||
|
||||
@export var node: Node2D
|
||||
|
||||
const dst: float = 70.0
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if (node.global_position - get_parent().global_position).length() < dst:
|
||||
modulate.a = 0
|
||||
else:
|
||||
position = dst * (node.global_position - get_parent().global_position).normalized()
|
||||
modulate.a = 1
|
||||
|
||||
func declare_danger():
|
||||
print("danger")
|
||||
$animations.play("blink")
|
||||
func release_danger():
|
||||
print("no danger")
|
||||
$animations.stop()
|
||||
visible = true
|
1
hud/radar/threat.gd.uid
Normal file
1
hud/radar/threat.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://bm76ox7rvuita
|
52
hud/radar/threat.tscn
Normal file
52
hud/radar/threat.tscn
Normal file
|
@ -0,0 +1,52 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://dwk5lnfnntqh2"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b8u4cc61kpl" path="res://hud/radar/threat_normal.png" id="1_cuq7j"]
|
||||
[ext_resource type="Script" uid="uid://bm76ox7rvuita" path="res://hud/radar/threat.gd" id="2_oq6ws"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_oq6ws"]
|
||||
resource_name = "blink"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.6),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false, true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_3aocn"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_3aocn"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_3aocn"),
|
||||
&"blink": SubResource("Animation_oq6ws")
|
||||
}
|
||||
|
||||
[node name="threat" type="Sprite2D"]
|
||||
modulate = Color(2, 2, 2, 1)
|
||||
texture = ExtResource("1_cuq7j")
|
||||
script = ExtResource("2_oq6ws")
|
||||
|
||||
[node name="animations" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_3aocn")
|
||||
}
|
BIN
hud/radar/threat_normal.png
Normal file
BIN
hud/radar/threat_normal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 105 B |
34
hud/radar/threat_normal.png.import
Normal file
34
hud/radar/threat_normal.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8u4cc61kpl"
|
||||
path="res://.godot/imported/threat_normal.png-3e4084ea6f7067b067f49c4502cd25f5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://hud/radar/threat_normal.png"
|
||||
dest_files=["res://.godot/imported/threat_normal.png-3e4084ea6f7067b067f49c4502cd25f5.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
|
22
main.tscn
22
main.tscn
File diff suppressed because one or more lines are too long
BIN
palette.png
BIN
palette.png
Binary file not shown.
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 282 B |
|
@ -8,6 +8,9 @@ class_name Player
|
|||
|
||||
var angular_velocity_target := 0.0
|
||||
|
||||
@onready var radar: Radar = $radar
|
||||
|
||||
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"))
|
||||
|
||||
|
@ -23,5 +26,8 @@ func _physics_process(delta: float) -> void:
|
|||
else:
|
||||
%thruster.active = false
|
||||
|
||||
if Input.is_action_just_pressed("shoot"):
|
||||
%railgun.shoot()
|
||||
|
||||
func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
|
||||
state.angular_velocity = lerp(state.angular_velocity, angular_velocity_target, 0.1)
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://b3xadpl4pu33u"]
|
||||
[gd_scene load_steps=18 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://dnndsvtgqr8eq" path="res://bullet/bullet.tscn" id="2_yw30f"]
|
||||
[ext_resource type="PackedScene" uid="uid://y08tu4ftj3t4" path="res://player/thruster.tscn" id="3_r6c8y"]
|
||||
[ext_resource type="Script" uid="uid://dccya6vnwi1x4" path="res://player/railgun.gd" id="5_g6k8r"]
|
||||
[ext_resource type="PackedScene" uid="uid://800ou0i3omcs" path="res://effects/flash.tscn" id="5_qjkh3"]
|
||||
[ext_resource type="PackedScene" uid="uid://dfm1atk5lpdo4" path="res://hud/radar/radar.tscn" id="7_rgyib"]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_6481p"]
|
||||
friction = 0.0
|
||||
|
@ -40,12 +44,86 @@ scale_max = 2.0
|
|||
scale_curve = SubResource("CurveTexture_w2mcu")
|
||||
alpha_curve = SubResource("CurveTexture_q5aon")
|
||||
|
||||
[sub_resource type="Animation" id="Animation_qjkh3"]
|
||||
resource_name = "shoot"
|
||||
length = 0.4
|
||||
step = 0.1
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("%railgun/../image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.1, 0.003124, 0.835, -0.066667, -0.000579298, 0.133333, -0.000579298, 1, -0.2, 0.00127017, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.4)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("%railgun/../image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.1, -0.000583708, 1.177, -0.066667, -0.00146496, 0.133333, -0.00517273, 1, -0.2, 0.003124, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.4)
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.1),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"do_shoot"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_g6k8r"]
|
||||
length = 0.001
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("%railgun/../image:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("%railgun/../image:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g6k8r"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_g6k8r"),
|
||||
&"shoot": SubResource("Animation_qjkh3")
|
||||
}
|
||||
|
||||
[node name="player" type="RigidBody2D"]
|
||||
physics_material_override = SubResource("PhysicsMaterial_6481p")
|
||||
gravity_scale = 0.0
|
||||
can_sleep = false
|
||||
angular_damp = 2.0
|
||||
script = ExtResource("1_kkw55")
|
||||
thruster_strength = null
|
||||
rotation_strength = null
|
||||
drift_curve = SubResource("Curve_f6djc")
|
||||
|
||||
[node name="camera" type="Camera2D" parent="."]
|
||||
|
@ -54,8 +132,8 @@ position_smoothing_enabled = true
|
|||
|
||||
[node name="stars" type="GPUParticles2D" parent="camera"]
|
||||
amount = 100
|
||||
process_material = SubResource("ParticleProcessMaterial_k0vl1")
|
||||
lifetime = 30.0
|
||||
process_material = SubResource("ParticleProcessMaterial_k0vl1")
|
||||
|
||||
[node name="collision" type="CollisionPolygon2D" parent="."]
|
||||
polygon = PackedVector2Array(-5, 7, 0, -7, 5, 7, 2, 8, -2, 8)
|
||||
|
@ -66,3 +144,21 @@ texture = ExtResource("2_1h4u8")
|
|||
[node name="thruster" parent="." instance=ExtResource("3_r6c8y")]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, 8)
|
||||
|
||||
[node name="railgun" type="Marker2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, -10)
|
||||
gizmo_extents = 3.0
|
||||
script = ExtResource("5_g6k8r")
|
||||
bullet = ExtResource("2_yw30f")
|
||||
|
||||
[node name="flash" parent="railgun" instance=ExtResource("5_qjkh3")]
|
||||
unique_name_in_owner = true
|
||||
oneshot = false
|
||||
|
||||
[node name="animations" type="AnimationPlayer" parent="railgun"]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_g6k8r")
|
||||
}
|
||||
|
||||
[node name="radar" parent="." instance=ExtResource("7_rgyib")]
|
||||
|
|
29
player/railgun.gd
Normal file
29
player/railgun.gd
Normal file
|
@ -0,0 +1,29 @@
|
|||
extends Marker2D
|
||||
|
||||
@export var bullet : PackedScene
|
||||
@export var speed : float = 100.0
|
||||
@export var knockback : float = 30.0
|
||||
|
||||
@onready var flash: Flash = %flash
|
||||
@onready var parent: RigidBody2D = get_parent()
|
||||
|
||||
var can_shoot: bool = true
|
||||
|
||||
func shoot() -> void:
|
||||
if not can_shoot or $animations.is_playing():
|
||||
return
|
||||
$animations.play("shoot")
|
||||
|
||||
func do_shoot() -> void:
|
||||
if not can_shoot:
|
||||
return
|
||||
var instance : Bullet = bullet.instantiate() as Bullet
|
||||
parent.get_parent().add_child(instance)
|
||||
instance.global_position = global_position
|
||||
instance.apply_central_impulse(Vector2.UP.rotated(global_rotation) * speed)
|
||||
instance.player = parent
|
||||
parent.apply_central_impulse(Vector2.DOWN.rotated(global_rotation) * knockback)
|
||||
flash.flash()
|
||||
can_shoot = false
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
can_shoot = true
|
1
player/railgun.gd.uid
Normal file
1
player/railgun.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://dccya6vnwi1x4
|
|
@ -1,11 +1,16 @@
|
|||
extends Marker2D
|
||||
class_name Thruster
|
||||
|
||||
@export var active : bool
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
@onready var pushback: Area2D = $pushback
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if active:
|
||||
%fire.emitting = true
|
||||
%smoke.emitting = true
|
||||
pushback.gravity = -1500.0
|
||||
else:
|
||||
%fire.emitting = false
|
||||
%smoke.emitting = false
|
||||
pushback.gravity = 0
|
||||
|
|
|
@ -51,15 +51,26 @@ script = ExtResource("1_ua4l5")
|
|||
unique_name_in_owner = true
|
||||
rotation = 1.5708
|
||||
amount = 50
|
||||
process_material = SubResource("ParticleProcessMaterial_wobn2")
|
||||
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
|
||||
process_material = SubResource("ParticleProcessMaterial_wobn2")
|
||||
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)
|
||||
|
|
|
@ -41,6 +41,11 @@ right={
|
|||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
shoot={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
|
@ -51,4 +56,5 @@ right={
|
|||
[rendering]
|
||||
|
||||
textures/canvas_textures/default_texture_filter=0
|
||||
viewport/hdr_2d=true
|
||||
environment/defaults/default_clear_color=Color(0, 0, 0, 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue