Compare commits
No commits in common. "7980c821d10d9701e018539b10fcb9771fe754f6" and "a42a258f08e52c132cb52ea3dfee14c6fd2fd3fa" have entirely different histories.
7980c821d1
...
a42a258f08
13 changed files with 34 additions and 25 deletions
3
classes/hit/hit.gd
Normal file
3
classes/hit/hit.gd
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
class_name Hit extends Area2D
|
||||
|
||||
@export var power_hit: bool = false
|
||||
1
classes/hit/hit.gd.uid
Normal file
1
classes/hit/hit.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://b440ri3521uio
|
||||
12
classes/hit/hit.tscn
Normal file
12
classes/hit/hit.tscn
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[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 player_1_spawn: PlayerSpawnPoint
|
||||
@export var player_2_spawn: PlayerSpawnPoint
|
||||
@export var ball_spawn: BallSpawnPoint
|
||||
@export var ball_spawn: Marker2D
|
||||
@export var floor_layer: TileMapLayer
|
||||
@export var wall_layer: TileMapLayer
|
||||
@export var block_layer: BlockTileLayer
|
||||
|
|
|
|||
|
|
@ -2,9 +2,7 @@ class_name LevelState extends State
|
|||
|
||||
const PAUSED = "Paused"
|
||||
const STARTING = "Starting"
|
||||
const PLAYING = "Playing"
|
||||
const SCORING = "Scoring"
|
||||
const FINISHING = "Finishing"
|
||||
|
||||
var level: Level
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ 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):
|
||||
|
|
|
|||
|
|
@ -261,35 +261,27 @@ 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"]
|
||||
|
|
|
|||
|
|
@ -43,16 +43,16 @@ func _decelerate_to_stop(duration: float = 0.3) -> void:
|
|||
)
|
||||
|
||||
|
||||
func _on_hit(hitbox: Area2D) -> void:
|
||||
func _on_hit(hitbox: Hit) -> void:
|
||||
print("area detected")
|
||||
if not is_hit:
|
||||
if hitbox.is_in_group("hit"):
|
||||
assert(hitbox.has_meta("power_hit"), "hit doesnt have correct metadata, is it a hit?")
|
||||
assert(hitbox.power_hit != null, "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.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
|
||||
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
|
||||
launch(angle, speed)
|
||||
print("ball hit")
|
||||
if not timer.is_connected("timeout", _on_hit_end):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://d0c57c37o75b0"]
|
||||
[gd_scene load_steps=4 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"]
|
||||
|
|
@ -9,6 +10,9 @@ 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="."]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://px67runjx6ex"]
|
||||
[gd_scene load_steps=4 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"]
|
||||
|
|
@ -9,6 +10,7 @@ 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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class_name BallSpawnPoint extends Marker2D
|
||||
extends Marker2D
|
||||
|
||||
|
||||
@onready var ball_scene: PackedScene = preload("res://scenes/ball/ball.tscn")
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ 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
|
||||
|
|
|
|||
|
|
@ -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: Area2D
|
||||
var hit_node: Hit
|
||||
|
||||
if hit_type == "left" or hit_type == "right":
|
||||
hit_node = player.small_hit_scene.instantiate()
|
||||
hit_node = preload("res://scenes/hit/small_hit.tscn").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 = player.power_hit_scene.instantiate()
|
||||
hit_node = preload("res://scenes/hit/power_hit.tscn").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: Area2D = hit_node_ref.get_ref()
|
||||
var hit_node: Hit = hit_node_ref.get_ref()
|
||||
if hit_node and is_instance_valid(hit_node):
|
||||
hit_node.queue_free()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue