Compare commits

..

7 commits

13 changed files with 25 additions and 34 deletions

View file

@ -1,3 +0,0 @@
class_name Hit extends Area2D
@export var power_hit: bool = false

View file

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

View file

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

View file

@ -4,7 +4,7 @@ class_name Level extends Node2D
@export var director: StateMachine
@export var player_1_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 wall_layer: TileMapLayer
@export var block_layer: BlockTileLayer

View file

@ -2,7 +2,9 @@ class_name LevelState extends State
const PAUSED = "Paused"
const STARTING = "Starting"
const PLAYING = "Playing"
const SCORING = "Scoring"
const FINISHING = "Finishing"
var level: Level

View file

@ -10,6 +10,7 @@ class_name StateMachine extends Node
func _ready() -> void:
assert(state != null, "initial state is null")
for state_node: State in find_children("*", "State"):
# fixes duplicate connections (not sure why)
if not state_node.finished.is_connected(_transition_to_next_state):

View file

@ -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)
0:6/size_in_atlas = Vector2i(2, 1)
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)
2:6/size_in_atlas = Vector2i(2, 1)
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)
4:6/size_in_atlas = Vector2i(2, 1)
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)
6:6/size_in_atlas = Vector2i(2, 1)
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)
8:6/size_in_atlas = Vector2i(2, 1)
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)
10:6/size_in_atlas = Vector2i(2, 1)
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)
12:6/size_in_atlas = Vector2i(2, 1)
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)
14:6/size_in_atlas = Vector2i(2, 1)
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)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ln5p0"]

View file

@ -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")
if not is_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")
var player: Player = hitbox.get_parent()
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 speed: float = randf_range(350, 450) if hitbox.power_hit else 0.0 # o.o
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.get_meta("power_hit") else 0.0 # o.o
launch(angle, speed)
print("ball hit")
if not timer.is_connected("timeout", _on_hit_end):

View file

@ -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"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_kwsj5"]
@ -10,9 +9,6 @@ height = 70.0
[node name="PowerHit2D" type="Area2D" groups=["hit"]]
collision_layer = 64
collision_mask = 0
script = ExtResource("1_kwsj5")
power_hit = true
metadata/_custom_type_script = "uid://b440ri3521uio"
metadata/power_hit = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]

View file

@ -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"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_fxeki"]
@ -10,7 +9,6 @@ height = 34.0
[node name="SmallHit2D" type="Area2D" groups=["hit"]]
collision_layer = 64
collision_mask = 0
script = ExtResource("1_dk3vy")
metadata/_custom_type_script = "uid://b440ri3521uio"
metadata/power_hit = false

View file

@ -1,4 +1,4 @@
extends Marker2D
class_name BallSpawnPoint extends Marker2D
@onready var ball_scene: PackedScene = preload("res://scenes/ball/ball.tscn")

View file

@ -5,6 +5,8 @@ const DEADZONE: float = 0.1
@export var id: int = 1
@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 anim_player: AnimationPlayer = $AnimationPlayer
@onready var state_machine: StateMachine = $StateMachine

View file

@ -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 hit_node: Hit
var hit_node: Area2D
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 vertically if player 2
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
)
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)
@ -74,7 +74,7 @@ func _on_hit_end() -> void:
print("cooldown end")
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):
hit_node.queue_free()