Cube & Scoring Logic Part 1

This commit is contained in:
2025-07-04 13:50:16 +03:00
parent efccbfc52b
commit 4ebfb16ca7
8 changed files with 121 additions and 34 deletions

65
game/Objects/Cube.gd Normal file
View File

@@ -0,0 +1,65 @@
extends Area2D
@export var cubeHeight = 364
@export var cursor_path: NodePath
@onready var cursor = get_node(cursor_path)
@onready var mesh_instance: MeshInstance2D = $MeshInstance2D
@onready var line = $Vector/Line2D
@onready var shape: CollisionShape2D = $HitBox
@onready var red_line = $Vector/CursorVector
@onready var green_line = $Vector/Top
@onready var pink_line = $Vector/Mid
var cube_top_center: Vector2
var CorrectHit = false
var TopScore = 0
var MidScore = 0
var BotScore = 0
@onready var area_direction
@onready var body_direction
var sliced = false
func _ready():
var shape_size = Vector2.ZERO
if shape.shape is RectangleShape2D:
shape_size = shape.shape.extents * 2 # extents are half-size
elif shape.shape is CapsuleShape2D:
shape_size = Vector2(shape.shape.radius * 2, shape.shape.height)
# Add other shape types as needed
# Now use actual height
var cube_height = shape_size.y
func _on_area_entered(area: Area2D) -> void:
if area.name != "Cursor":
return
area_direction = -area.global_transform.y.normalized()
body_direction = -self.global_transform.y.normalized()
var local_pos = to_local(area.global_position)
var side_offset = local_pos.y # this is the offset *perpendicular* to Area2D's facing
var alignment = area_direction.dot(body_direction)
if abs(side_offset) < 5:
print("Hit near center Top", " ", alignment)
elif side_offset < 0:
print("Hit to the LEFT Side, offset:", side_offset, " ", alignment)
else:
print("Hit to the RIGHT Side, offset:", side_offset, " ", alignment)
func get_closest_point_on_line(line_origin: Vector2, line_dir: Vector2, point: Vector2) -> Vector2:
# Projects point onto the infinite line defined by (line_origin, line_dir)
var v = point - line_origin
var d = v.dot(line_dir)
return line_origin + line_dir * d

View File

@@ -1,11 +1,14 @@
[gd_scene load_steps=4 format=3 uid="uid://ctcv7rr8w3fnf"]
[gd_scene load_steps=5 format=3 uid="uid://ctcv7rr8w3fnf"]
[ext_resource type="Texture2D" uid="uid://2nxh3mui3ia7" path="res://Textures/svg/Cube.svg" id="1_k3834"]
[ext_resource type="Script" uid="uid://cu1ss1gvex68v" path="res://Objects/SelfSlicer.gd" id="1_m4rrt"]
[ext_resource type="Script" uid="uid://cu1ss1gvex68v" path="res://Objects/Cube.gd" id="1_m4rrt"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ae35o"]
size = Vector2(68, 68)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_m4rrt"]
size = Vector2(26.5, 68)
[node name="Node2D" type="Area2D"]
script = ExtResource("1_m4rrt")
@@ -13,5 +16,25 @@ script = ExtResource("1_m4rrt")
scale = Vector2(0.5, 0.5)
texture = ExtResource("1_k3834")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
[node name="HitBox" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_ae35o")
[node name="Area2D" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
position = Vector2(-21.25, 0)
shape = SubResource("RectangleShape2D_m4rrt")
debug_color = Color(0.988715, 0, 0.298839, 0.42)
[node name="Vector" type="Node2D" parent="."]
[node name="CursorVector" type="Line2D" parent="Vector"]
[node name="Mid" type="Line2D" parent="Vector"]
default_color = Color(0, 0.952941, 0, 1)
[node name="Top" type="Line2D" parent="Vector"]
position = Vector2(-32, 0)
default_color = Color(1, 0, 0, 1)
[connection signal="area_entered" from="." to="." method="_on_area_entered"]

View File

@@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://d0hckoql2xnbq" path="res://Textures/svg/Cursor.svg" id="2_r0du0"]
[sub_resource type="CircleShape2D" id="CircleShape2D_v75j3"]
radius = 19.0263
radius = 28.0
[node name="Cursor" type="Area2D"]
script = ExtResource("1_uu6xs")

View File

@@ -1,12 +0,0 @@
extends Area2D
class_name SelfSlicer
@export var cursor_path: NodePath
@onready var cursor = get_node(cursor_path)
@onready var mesh_instance: MeshInstance2D = $MeshInstance2D
var sliced = false
func _ready():
pass