Compare commits
7 commits
a42a258f08
...
7980c821d1
| Author | SHA1 | Date | |
|---|---|---|---|
| 7980c821d1 | |||
| c4b9f7fe61 | |||
| 41cc35576d | |||
| 9e72492dc7 | |||
| c9f76af3f7 | |||
| 75b2edc212 | |||
| 4fd1b4dc17 |
13 changed files with 25 additions and 34 deletions
|
|
@ -1,3 +0,0 @@
|
||||||
class_name Hit extends Area2D
|
|
||||||
|
|
||||||
@export var power_hit: bool = false
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
uid://b440ri3521uio
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
[gd_scene load_steps=2 format=3 uid="uid://d04legmj3c42r"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b440ri3521uio" path="res://classes/hit/hit.gd" id="1_udkr8"]
|
|
||||||
|
|
||||||
[node name="Hit2D" type="Area2D" groups=["hit"]]
|
|
||||||
collision_layer = 64
|
|
||||||
collision_mask = 0
|
|
||||||
script = ExtResource("1_udkr8")
|
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
|
||||||
rotation = 1.5707964
|
|
||||||
debug_color = Color(0.6205005, 0.42311785, 0.8432588, 0.41960785)
|
|
||||||
|
|
@ -4,7 +4,7 @@ class_name Level extends Node2D
|
||||||
@export var director: StateMachine
|
@export var director: StateMachine
|
||||||
@export var player_1_spawn: PlayerSpawnPoint
|
@export var player_1_spawn: PlayerSpawnPoint
|
||||||
@export var player_2_spawn: PlayerSpawnPoint
|
@export var player_2_spawn: PlayerSpawnPoint
|
||||||
@export var ball_spawn: Marker2D
|
@export var ball_spawn: BallSpawnPoint
|
||||||
@export var floor_layer: TileMapLayer
|
@export var floor_layer: TileMapLayer
|
||||||
@export var wall_layer: TileMapLayer
|
@export var wall_layer: TileMapLayer
|
||||||
@export var block_layer: BlockTileLayer
|
@export var block_layer: BlockTileLayer
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@ class_name LevelState extends State
|
||||||
|
|
||||||
const PAUSED = "Paused"
|
const PAUSED = "Paused"
|
||||||
const STARTING = "Starting"
|
const STARTING = "Starting"
|
||||||
|
const PLAYING = "Playing"
|
||||||
const SCORING = "Scoring"
|
const SCORING = "Scoring"
|
||||||
|
const FINISHING = "Finishing"
|
||||||
|
|
||||||
var level: Level
|
var level: Level
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ class_name StateMachine extends Node
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
assert(state != null, "initial state is null")
|
||||||
for state_node: State in find_children("*", "State"):
|
for state_node: State in find_children("*", "State"):
|
||||||
# fixes duplicate connections (not sure why)
|
# fixes duplicate connections (not sure why)
|
||||||
if not state_node.finished.is_connected(_transition_to_next_state):
|
if not state_node.finished.is_connected(_transition_to_next_state):
|
||||||
|
|
|
||||||
|
|
@ -261,27 +261,35 @@ texture = ExtResource("2_br5dt")
|
||||||
15:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
15:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
0:6/size_in_atlas = Vector2i(2, 1)
|
0:6/size_in_atlas = Vector2i(2, 1)
|
||||||
0:6/0 = 0
|
0:6/0 = 0
|
||||||
|
0:6/0/texture_origin = Vector2i(-8, 0)
|
||||||
0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
||||||
2:6/size_in_atlas = Vector2i(2, 1)
|
2:6/size_in_atlas = Vector2i(2, 1)
|
||||||
2:6/0 = 0
|
2:6/0 = 0
|
||||||
|
2:6/0/texture_origin = Vector2i(8, 0)
|
||||||
2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
||||||
4:6/size_in_atlas = Vector2i(2, 1)
|
4:6/size_in_atlas = Vector2i(2, 1)
|
||||||
4:6/0 = 0
|
4:6/0 = 0
|
||||||
|
4:6/0/texture_origin = Vector2i(-8, 0)
|
||||||
4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
||||||
6:6/size_in_atlas = Vector2i(2, 1)
|
6:6/size_in_atlas = Vector2i(2, 1)
|
||||||
6:6/0 = 0
|
6:6/0 = 0
|
||||||
|
6:6/0/texture_origin = Vector2i(8, 0)
|
||||||
6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
||||||
8:6/size_in_atlas = Vector2i(2, 1)
|
8:6/size_in_atlas = Vector2i(2, 1)
|
||||||
8:6/0 = 0
|
8:6/0 = 0
|
||||||
|
8:6/0/texture_origin = Vector2i(-8, 0)
|
||||||
8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
||||||
10:6/size_in_atlas = Vector2i(2, 1)
|
10:6/size_in_atlas = Vector2i(2, 1)
|
||||||
10:6/0 = 0
|
10:6/0 = 0
|
||||||
|
10:6/0/texture_origin = Vector2i(8, 0)
|
||||||
10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
||||||
12:6/size_in_atlas = Vector2i(2, 1)
|
12:6/size_in_atlas = Vector2i(2, 1)
|
||||||
12:6/0 = 0
|
12:6/0 = 0
|
||||||
|
12:6/0/texture_origin = Vector2i(-8, 0)
|
||||||
12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, -16, -8)
|
||||||
14:6/size_in_atlas = Vector2i(2, 1)
|
14:6/size_in_atlas = Vector2i(2, 1)
|
||||||
14:6/0 = 0
|
14:6/0 = 0
|
||||||
|
14:6/0/texture_origin = Vector2i(8, 0)
|
||||||
14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8)
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ln5p0"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ln5p0"]
|
||||||
|
|
|
||||||
|
|
@ -43,16 +43,16 @@ func _decelerate_to_stop(duration: float = 0.3) -> void:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
func _on_hit(hitbox: Hit) -> void:
|
func _on_hit(hitbox: Area2D) -> void:
|
||||||
print("area detected")
|
print("area detected")
|
||||||
if not is_hit:
|
if not is_hit:
|
||||||
if hitbox.is_in_group("hit"):
|
if hitbox.is_in_group("hit"):
|
||||||
assert(hitbox.power_hit != null, "hit doesnt have correct metadata, is it a hit?")
|
assert(hitbox.has_meta("power_hit"), "hit doesnt have correct metadata, is it a hit?")
|
||||||
print("ball not hit yet")
|
print("ball not hit yet")
|
||||||
var player: Player = hitbox.get_parent()
|
var player: Player = hitbox.get_parent()
|
||||||
var timer: Timer = player.hit_timer
|
var timer: Timer = player.hit_timer
|
||||||
var angle: float = (PI/2 if hitbox.power_hit else randf_range(3*PI/4, PI/4)) * (-1 if player.id == 1 else 1)
|
var angle: float = (PI/2 if hitbox.get_meta("power_hit") else randf_range(3*PI/4, PI/4)) * (-1 if player.id == 1 else 1)
|
||||||
var speed: float = randf_range(350, 450) if hitbox.power_hit else 0.0 # o.o
|
var speed: float = randf_range(350, 450) if hitbox.get_meta("power_hit") else 0.0 # o.o
|
||||||
launch(angle, speed)
|
launch(angle, speed)
|
||||||
print("ball hit")
|
print("ball hit")
|
||||||
if not timer.is_connected("timeout", _on_hit_end):
|
if not timer.is_connected("timeout", _on_hit_end):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
[gd_scene load_steps=4 format=3 uid="uid://d0c57c37o75b0"]
|
[gd_scene load_steps=3 format=3 uid="uid://d0c57c37o75b0"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b440ri3521uio" path="res://classes/hit/hit.gd" id="1_kwsj5"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://c6a62gvw7218s" path="res://scenes/hit/assets/hit.png" id="2_kwsj5"]
|
[ext_resource type="Texture2D" uid="uid://c6a62gvw7218s" path="res://scenes/hit/assets/hit.png" id="2_kwsj5"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_kwsj5"]
|
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_kwsj5"]
|
||||||
|
|
@ -10,9 +9,6 @@ height = 70.0
|
||||||
[node name="PowerHit2D" type="Area2D" groups=["hit"]]
|
[node name="PowerHit2D" type="Area2D" groups=["hit"]]
|
||||||
collision_layer = 64
|
collision_layer = 64
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
script = ExtResource("1_kwsj5")
|
|
||||||
power_hit = true
|
|
||||||
metadata/_custom_type_script = "uid://b440ri3521uio"
|
|
||||||
metadata/power_hit = true
|
metadata/power_hit = true
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
[gd_scene load_steps=4 format=3 uid="uid://px67runjx6ex"]
|
[gd_scene load_steps=3 format=3 uid="uid://px67runjx6ex"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b440ri3521uio" path="res://classes/hit/hit.gd" id="1_dk3vy"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://c6a62gvw7218s" path="res://scenes/hit/assets/hit.png" id="1_rmj1p"]
|
[ext_resource type="Texture2D" uid="uid://c6a62gvw7218s" path="res://scenes/hit/assets/hit.png" id="1_rmj1p"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_fxeki"]
|
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_fxeki"]
|
||||||
|
|
@ -10,7 +9,6 @@ height = 34.0
|
||||||
[node name="SmallHit2D" type="Area2D" groups=["hit"]]
|
[node name="SmallHit2D" type="Area2D" groups=["hit"]]
|
||||||
collision_layer = 64
|
collision_layer = 64
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
script = ExtResource("1_dk3vy")
|
|
||||||
metadata/_custom_type_script = "uid://b440ri3521uio"
|
metadata/_custom_type_script = "uid://b440ri3521uio"
|
||||||
metadata/power_hit = false
|
metadata/power_hit = false
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
extends Marker2D
|
class_name BallSpawnPoint extends Marker2D
|
||||||
|
|
||||||
|
|
||||||
@onready var ball_scene: PackedScene = preload("res://scenes/ball/ball.tscn")
|
@onready var ball_scene: PackedScene = preload("res://scenes/ball/ball.tscn")
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ const DEADZONE: float = 0.1
|
||||||
@export var id: int = 1
|
@export var id: int = 1
|
||||||
@export var max_speed: float = 90
|
@export var max_speed: float = 90
|
||||||
|
|
||||||
|
@onready var small_hit_scene: PackedScene = preload("res://scenes/hit/small_hit.tscn")
|
||||||
|
@onready var power_hit_scene: PackedScene = preload("res://scenes/hit/power_hit.tscn")
|
||||||
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
|
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
|
||||||
@onready var anim_player: AnimationPlayer = $AnimationPlayer
|
@onready var anim_player: AnimationPlayer = $AnimationPlayer
|
||||||
@onready var state_machine: StateMachine = $StateMachine
|
@onready var state_machine: StateMachine = $StateMachine
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,10 @@ func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:
|
||||||
)
|
)
|
||||||
|
|
||||||
var sprite_texture: Texture2D = player.sprite.sprite_frames.get_frame_texture(player.sprite.animation, 1)
|
var sprite_texture: Texture2D = player.sprite.sprite_frames.get_frame_texture(player.sprite.animation, 1)
|
||||||
var hit_node: Hit
|
var hit_node: Area2D
|
||||||
|
|
||||||
if hit_type == "left" or hit_type == "right":
|
if hit_type == "left" or hit_type == "right":
|
||||||
hit_node = preload("res://scenes/hit/small_hit.tscn").instantiate()
|
hit_node = player.small_hit_scene.instantiate()
|
||||||
# flip entire node horizontally if spawning left
|
# flip entire node horizontally if spawning left
|
||||||
# flip vertically if player 2
|
# flip vertically if player 2
|
||||||
hit_node.scale = Vector2(
|
hit_node.scale = Vector2(
|
||||||
|
|
@ -57,7 +57,7 @@ func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:
|
||||||
(sprite_texture.get_height()*-1) if player.id == 1 else 4
|
(sprite_texture.get_height()*-1) if player.id == 1 else 4
|
||||||
)
|
)
|
||||||
elif hit_type == "power":
|
elif hit_type == "power":
|
||||||
hit_node = preload("res://scenes/hit/power_hit.tscn").instantiate()
|
hit_node = player.power_hit_scene.instantiate()
|
||||||
|
|
||||||
player.add_child(hit_node)
|
player.add_child(hit_node)
|
||||||
|
|
||||||
|
|
@ -74,7 +74,7 @@ func _on_hit_end() -> void:
|
||||||
print("cooldown end")
|
print("cooldown end")
|
||||||
assert(hit_node_ref != null, "hit node is null")
|
assert(hit_node_ref != null, "hit node is null")
|
||||||
|
|
||||||
var hit_node: Hit = hit_node_ref.get_ref()
|
var hit_node: Area2D = hit_node_ref.get_ref()
|
||||||
if hit_node and is_instance_valid(hit_node):
|
if hit_node and is_instance_valid(hit_node):
|
||||||
hit_node.queue_free()
|
hit_node.queue_free()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue