rearengement

This commit is contained in:
2025-09-04 17:55:05 +02:00
parent 1913038265
commit fd67adacc9
23 changed files with 475 additions and 0 deletions

View File

@@ -22,6 +22,14 @@ window/size/viewport_height=640
[input]
ui_accept={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
]
}
ui_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)

25
scene/asteroidx1.tscn Normal file
View File

@@ -0,0 +1,25 @@
[gd_scene load_steps=4 format=3 uid="uid://ditud5veuxqyb"]
[ext_resource type="Script" uid="uid://b8a23hkmesx0l" path="res://script/asteroid.gd" id="1_p0ukn"]
[ext_resource type="Texture2D" uid="uid://dbingmvgsgvfv" path="res://assets/asteroidx1.png" id="1_u87q6"]
[sub_resource type="CircleShape2D" id="CircleShape2D_p0ukn"]
radius = 14.0357
[node name="asteroid" type="RigidBody2D"]
collision_layer = 2
collision_mask = 2
mass = 5.0
contact_monitor = true
max_contacts_reported = 4
script = ExtResource("1_p0ukn")
[node name="Asteroid" type="Sprite2D" parent="."]
texture = ExtResource("1_u87q6")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
light_mask = 2
visibility_layer = 2
shape = SubResource("CircleShape2D_p0ukn")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

20
scene/asteroidx2.tscn Normal file
View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=3 uid="uid://d2jxc24g18ab1"]
[ext_resource type="Script" uid="uid://b8a23hkmesx0l" path="res://script/asteroid.gd" id="1_ka8bu"]
[ext_resource type="Texture2D" uid="uid://bby053xsfn3cp" path="res://assets/asteroidx2.png" id="2_e2m2r"]
[node name="asteroid" type="RigidBody2D"]
collision_layer = 2
collision_mask = 2
mass = 10.0
contact_monitor = true
max_contacts_reported = 4
script = ExtResource("1_ka8bu")
[node name="Asteroid" type="Sprite2D" parent="."]
texture = ExtResource("2_e2m2r")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PackedVector2Array(16, -23, 3, -29, -11, -27, -22, -12, -27, 2, -25, 21, -6, 30, 17, 23, 23, 10, 29, 1, 20, -8)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

20
scene/asteroidx3.tscn Normal file
View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=3 uid="uid://buy8yafwaicq8"]
[ext_resource type="Script" uid="uid://b8a23hkmesx0l" path="res://script/asteroid.gd" id="1_e451a"]
[ext_resource type="Texture2D" uid="uid://dt08ism4ulfay" path="res://assets/asteroidx3.png" id="2_beklf"]
[node name="asteroid" type="RigidBody2D"]
collision_layer = 2
collision_mask = 2
mass = 20.0
contact_monitor = true
max_contacts_reported = 4
script = ExtResource("1_e451a")
[node name="Asteroid" type="Sprite2D" parent="."]
texture = ExtResource("2_beklf")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PackedVector2Array(23, 10, 36, -11, 22, -32, 8, -43, -32, -40, -40, -25, -43, 1, -40, 23, -24, 41, 3, 43, 38, 19)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

20
scene/asteroidx4.tscn Normal file
View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=3 uid="uid://xldavgivpb3j"]
[ext_resource type="Script" uid="uid://b8a23hkmesx0l" path="res://script/asteroid.gd" id="1_pojcu"]
[ext_resource type="Texture2D" uid="uid://bs836c8u5j3y6" path="res://assets/asteroidx4.png" id="2_gv6mu"]
[node name="asteroid" type="RigidBody2D"]
collision_layer = 2
collision_mask = 2
mass = 40.0
contact_monitor = true
max_contacts_reported = 4
script = ExtResource("1_pojcu")
[node name="Asteroid" type="Sprite2D" parent="."]
texture = ExtResource("2_gv6mu")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PackedVector2Array(55, 3, 35, -20, 34, -40, 1, -49, -35, -52, -55, -29, -58, -1, -48, 30, -22, 53, 13, 58, 40, 30)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

22
scene/destroy.tscn Normal file
View File

@@ -0,0 +1,22 @@
[gd_scene load_steps=4 format=3 uid="uid://bl3ans3gkp8ll"]
[ext_resource type="Texture2D" uid="uid://ckgjtmh5asu4w" path="res://assets/shoot.png" id="1_4xjek"]
[ext_resource type="Script" uid="uid://bgbncoa145y1l" path="res://script/destroy.gd" id="2_owou8"]
[sub_resource type="Gradient" id="Gradient_owou8"]
offsets = PackedFloat32Array(0, 0.553333, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.772549, 1, 1, 1, 0)
[node name="CPUParticles2D" type="CPUParticles2D"]
emitting = false
amount = 16
texture = ExtResource("1_4xjek")
lifetime = 2.5
one_shot = true
explosiveness = 0.5
randomness = 0.46
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_max = 50.0
color_ramp = SubResource("Gradient_owou8")
script = ExtResource("2_owou8")

19
scene/main_game.tscn Normal file
View File

@@ -0,0 +1,19 @@
[gd_scene load_steps=4 format=3 uid="uid://btcb75wp78ory"]
[ext_resource type="PackedScene" uid="uid://d1ugwu6dqomtg" path="res://scene/wall.tscn" id="1_u115g"]
[ext_resource type="PackedScene" uid="uid://36q833dx6dmq" path="res://scene/ship.tscn" id="2_02eqj"]
[ext_resource type="PackedScene" uid="uid://b6hqwxrexoa2n" path="res://scene/spawner.tscn" id="3_50rem"]
[node name="main_game" type="Node2D"]
[node name="wall" parent="." instance=ExtResource("1_u115g")]
[node name="Camera2D" type="Camera2D" parent="."]
position = Vector2(320, 320)
[node name="CharacterBody2D" parent="." instance=ExtResource("2_02eqj")]
position = Vector2(156, 206)
[node name="spawner" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_50rem")]
player = NodePath("../CharacterBody2D")
distance = 500.0

21
scene/ship.tscn Normal file
View File

@@ -0,0 +1,21 @@
[gd_scene load_steps=5 format=3 uid="uid://36q833dx6dmq"]
[ext_resource type="Script" uid="uid://c3i2bhlectmoo" path="res://script/ship.gd" id="1_4cq66"]
[ext_resource type="Texture2D" uid="uid://b037piy3tkefs" path="res://assets/ship.png" id="1_l3rv8"]
[ext_resource type="PackedScene" uid="uid://b1jtii12cqye1" path="res://scene/shoot.tscn" id="2_v4325"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4cq66"]
size = Vector2(16, 28)
[node name="CharacterBody2D" type="CharacterBody2D"]
script = ExtResource("1_4cq66")
SHOOT_NODE = ExtResource("2_v4325")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
rotation = 1.5708
shape = SubResource("RectangleShape2D_4cq66")
[node name="Ship" type="Sprite2D" parent="."]
texture_filter = 1
rotation = 1.5708
texture = ExtResource("1_l3rv8")

22
scene/shoot.tscn Normal file
View File

@@ -0,0 +1,22 @@
[gd_scene load_steps=4 format=3 uid="uid://b1jtii12cqye1"]
[ext_resource type="Texture2D" uid="uid://ckgjtmh5asu4w" path="res://assets/shoot.png" id="1_ttj7r"]
[ext_resource type="Script" uid="uid://dsd0opfd8kyow" path="res://script/shoot.gd" id="1_vnmmp"]
[sub_resource type="CircleShape2D" id="CircleShape2D_yt1ub"]
radius = 5.0
[node name="shoot" type="RigidBody2D"]
collision_layer = 2
collision_mask = 2
mass = 0.001
gravity_scale = 0.0
script = ExtResource("1_vnmmp")
SPEED = 400.0
[node name="Sprite2D" type="Sprite2D" parent="."]
texture_filter = 1
texture = ExtResource("1_ttj7r")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_yt1ub")

16
scene/spawner.tscn Normal file
View File

@@ -0,0 +1,16 @@
[gd_scene load_steps=6 format=3 uid="uid://b6hqwxrexoa2n"]
[ext_resource type="Script" uid="uid://bclp1tkc2npvv" path="res://script/spawner.gd" id="1_yp5lu"]
[ext_resource type="PackedScene" uid="uid://ditud5veuxqyb" path="res://scene/asteroidx1.tscn" id="2_7ocbr"]
[ext_resource type="PackedScene" uid="uid://d2jxc24g18ab1" path="res://scene/asteroidx2.tscn" id="3_mv5bd"]
[ext_resource type="PackedScene" uid="uid://buy8yafwaicq8" path="res://scene/asteroidx3.tscn" id="4_h3fkd"]
[ext_resource type="PackedScene" uid="uid://xldavgivpb3j" path="res://scene/asteroidx4.tscn" id="5_qmymf"]
[node name="spawner" type="Node2D"]
script = ExtResource("1_yp5lu")
asteroidx1 = ExtResource("2_7ocbr")
asteroidx2 = ExtResource("3_mv5bd")
asteroidx3 = ExtResource("4_h3fkd")
asteroidx4 = ExtResource("5_qmymf")
[connection signal="add_collision" from="." to="." method="_add_collision"]

55
scene/wall.tscn Normal file
View File

@@ -0,0 +1,55 @@
[gd_scene load_steps=4 format=3 uid="uid://d1ugwu6dqomtg"]
[ext_resource type="Script" uid="uid://b6422kdu30lo4" path="res://script/wall.gd" id="1_xxgf6"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_oh6kn"]
size = Vector2(20, 640)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xxgf6"]
size = Vector2(640, 20)
[node name="wall" type="Node2D"]
script = ExtResource("1_xxgf6")
[node name="ColorRect" type="ColorRect" parent="."]
offset_right = 640.0
offset_bottom = 640.0
color = Color(0, 0, 0, 1)
[node name="StaticBody2D" type="StaticBody2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(0, 320)
shape = SubResource("RectangleShape2D_oh6kn")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(640, 320)
shape = SubResource("RectangleShape2D_oh6kn")
[node name="CollisionShape2D3" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(320, 0)
shape = SubResource("RectangleShape2D_xxgf6")
[node name="CollisionShape2D4" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(320, 640)
shape = SubResource("RectangleShape2D_xxgf6")
[node name="Area2D" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
position = Vector2(0, 320)
shape = SubResource("RectangleShape2D_oh6kn")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
position = Vector2(640, 320)
shape = SubResource("RectangleShape2D_oh6kn")
[node name="CollisionShape2D3" type="CollisionShape2D" parent="Area2D"]
position = Vector2(320, 0)
shape = SubResource("RectangleShape2D_xxgf6")
[node name="CollisionShape2D4" type="CollisionShape2D" parent="Area2D"]
position = Vector2(320, 640)
shape = SubResource("RectangleShape2D_xxgf6")
[connection signal="body_entered" from="Area2D" to="." method="_body_entered_for_multiple"]

61
script/asteroid.gd Normal file
View File

@@ -0,0 +1,61 @@
extends RigidBody2D
var SPEED : float
var direction : Vector2
var type:= 1
var is_firt_entree := true
@export var particles := load("res://destroy.tscn")
@export var asteroidx1 : = load("res://asteroidx1.tscn")
@export var asteroidx2 : = load("res://asteroidx2.tscn")
@export var asteroidx3 : = load("res://asteroidx3.tscn")
func _ready() -> void:
add_to_group("asteroid")
SPEED = randf() / 50 +50
rotation = randf_range(0.0, 360.0)
func _process(_delta: float) -> void:
linear_velocity = direction * SPEED
func split():
var packed_use: PackedScene
if type == 1:
var part = particles.instantiate()
part.global_position = global_position
get_parent().call_deferred("add_child", part)
queue_free()
return
elif type == 2:
packed_use = asteroidx1
elif type == 3:
packed_use = asteroidx2
elif type == 4:
packed_use = asteroidx3
var first = packed_use.instantiate()
var second = packed_use.instantiate()
var nor = direction.rotated(PI/2).normalized()
first.direction = direction
second.direction = direction
first.global_position = position + (2**type * nor)
first.type = type-1
second.global_position = position - (2**type * nor)
second.type = type-1
var parent = get_parent()
var part = particles.instantiate()
part.global_position = global_position
parent.call_deferred("add_child", first)
parent.call_deferred("add_child", second)
parent.call_deferred("add_child", part)
queue_free()
func _on_body_entered(body: Node) -> void:
if body.is_in_group("asteroid"):
get_parent().add_collision(body, self)
if body.is_in_group("shoot"):
body.queue_free()
split()

1
script/asteroid.gd.uid Normal file
View File

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

14
script/destroy.gd Normal file
View File

@@ -0,0 +1,14 @@
extends CPUParticles2D
var time :=0.0
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
emitting = true
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
time+=delta
if time >= 10:
queue_free()

1
script/destroy.gd.uid Normal file
View File

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

51
script/ship.gd Normal file
View File

@@ -0,0 +1,51 @@
extends CharacterBody2D
@export var MAX_SPEED: float = 200
@export var SHOOT_NODE: PackedScene
const SPEED = 25.0
const JUMP_VELOCITY = -400.0
var mouse_position: Vector2 = Vector2.ZERO
var direction :=Vector2(1,0)
var horizontal : float
var vertical : float
var rota_temp: float
var delay := 0.0
func _input(event):
pass
if event is InputEventMouseMotion:
mouse_position = event.position
func _physics_process(delta: float) -> void:
delay += delta
if Input.is_action_pressed("ui_accept") and delay >= 0.5:
shoot()
delay = 0
horizontal = Input.get_axis("ui_up", "ui_down")
vertical = Input.get_axis("ui_left", "ui_right")
if vertical != 0:
velocity.x = move_toward(velocity.x, MAX_SPEED * vertical, SPEED)
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
if horizontal != 0:
velocity.y = move_toward(velocity.y, MAX_SPEED * horizontal, SPEED)
else:
velocity.y = move_toward(velocity.y, 0, SPEED)
if horizontal != 0 or vertical != 0:
direction = velocity
rotation = atan2(horizontal, vertical)
move_and_slide()
func shoot()->void:
var new = SHOOT_NODE.instantiate()
new.direction = direction
new.position = position + (18 * direction.normalized())
get_parent().add_child(new)

1
script/ship.gd.uid Normal file
View File

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

17
script/shoot.gd Normal file
View File

@@ -0,0 +1,17 @@
extends RigidBody2D
@export var SPEED : float = 100.0
var direction: Vector2:
set(val):
direction = val.normalized() * SPEED
var time := 0.0
func _ready() -> void:
add_to_group("shoot")
func _process(delta: float) -> void:
linear_velocity = direction
time += delta
#if time >= 2:
# self.queue_free()

1
script/shoot.gd.uid Normal file
View File

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

71
script/spawner.gd Normal file
View File

@@ -0,0 +1,71 @@
extends Node2D
@export var asteroidx1 : PackedScene
@export var asteroidx2 : PackedScene
@export var asteroidx3 : PackedScene
@export var asteroidx4 : PackedScene
@export var player : CharacterBody2D
@export var distance:= 600.0
var current_time := 0.0
var list_of_collision_1 : Array[Node]
var list_of_collision_2 : Array[Node]
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
var tmp : Vector2
for i in range(list_of_collision_1.size()):
if list_of_collision_1[i] and list_of_collision_2[i]:
var normal_vec = (list_of_collision_1[i].position - list_of_collision_2[i].position).normalized()
tmp = list_of_collision_1[i].direction
list_of_collision_1[i].direction = (list_of_collision_2[i].direction + normal_vec).normalized()
list_of_collision_2[i].direction = (tmp - normal_vec).normalized()
list_of_collision_1 = []
list_of_collision_2 = []
current_time += delta
if current_time >= 2.0:
current_time = 0
spawn()
func spawn_duplicate(asteroid: Node2D):
var dup = asteroid.duplicate()
dup.position = (asteroid.position - Vector2(320, 320)).rotated(PI/2) + Vector2(320, 320)
dup.direction = (asteroid.direction - Vector2(320, 320)).rotated(PI/2) + Vector2(320, 320)
add_child(dup)
func spawn():
var choice = randi_range(1, 4)
var new
if choice == 1:
new = asteroidx1.instantiate()
new.type = 1
elif choice == 2:
new = asteroidx2.instantiate()
new.type = 2
elif choice == 3:
new = asteroidx3.instantiate()
new.type = 3
elif choice == 4:
new = asteroidx4.instantiate()
new.type = 4
var new_global_position = Vector2(distance,0).rotated(randf_range(0.0, 360)) + Vector2(320, 320)
new.global_position = new_global_position
new.direction = (player.global_position - new_global_position).normalized()
add_child(new)
func add_collision(body1 : Node, body2: Node) -> void:
for i in range(list_of_collision_1.size()):
if list_of_collision_1[i] == body1 and list_of_collision_2[i]== body2:
return
if list_of_collision_1[i] == body2 and list_of_collision_2[i] == body1:
return
list_of_collision_1.append(body1)
list_of_collision_2.append(body2)

1
script/spawner.gd.uid Normal file
View File

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

7
script/wall.gd Normal file
View File

@@ -0,0 +1,7 @@
extends Node2D
@export var spawner: Node2D
func _body_entered_for_multiple(body: Node2D) -> void:
if body.is_in_group("asteroid") and body.get("is_firt_entree") == false:
spawner.spawn()

1
script/wall.gd.uid Normal file
View File

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