simon bc25226a31 Initial commit: Godot Pong game with WebSocket accelerometer control.
Includes platform steering via calibrated accel axes, ball physics,
calibration overlay with axis detection, and runtime tuning sliders.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-28 21:52:35 +02:00

82 lines
2.0 KiB
GDScript

extends Node2D
const RADIUS := 10.0
const SPEED := 420.0
const PLATFORM_HALF := Vector2(80.0, 12.0)
var velocity := Vector2.ZERO
func _ready() -> void:
velocity = Vector2(320.0, -360.0).normalized() * SPEED
func reset_to(center: Vector2) -> void:
position = center
var dir := Vector2(randf_range(-0.6, 0.6), -1.0).normalized()
velocity = dir * SPEED
queue_redraw()
func step(delta: float, platform_pos: Vector2, platform_vx: float, bounds: Rect2) -> void:
position += velocity * delta
_bounce_walls(bounds)
_bounce_platform_top(platform_pos, platform_vx)
queue_redraw()
func _bounce_walls(bounds: Rect2) -> void:
var min_x := bounds.position.x + RADIUS
var max_x := bounds.end.x - RADIUS
var min_y := bounds.position.y + RADIUS
var max_y := bounds.end.y - RADIUS
if position.x < min_x:
position.x = min_x
velocity.x = absf(velocity.x)
elif position.x > max_x:
position.x = max_x
velocity.x = -absf(velocity.x)
if position.y < min_y:
position.y = min_y
velocity.y = absf(velocity.y)
elif position.y > max_y:
position.y = max_y
velocity.y = -absf(velocity.y)
_normalize_speed()
func _bounce_platform_top(platform_pos: Vector2, platform_vx: float) -> void:
var left := platform_pos.x - PLATFORM_HALF.x
var right := platform_pos.x + PLATFORM_HALF.x
var top := platform_pos.y - PLATFORM_HALF.y
var bottom := platform_pos.y + PLATFORM_HALF.y
if position.x < left - RADIUS or position.x > right + RADIUS:
return
if velocity.y <= 0.0:
return
if position.y + RADIUS < top:
return
if position.y - RADIUS > bottom + 4.0:
return
position.y = top - RADIUS
velocity.y = -absf(velocity.y)
velocity.x += platform_vx * 0.45
_normalize_speed()
func _normalize_speed() -> void:
if velocity.length_squared() < 1.0:
velocity = Vector2.RIGHT * SPEED
else:
velocity = velocity.normalized() * SPEED
func _draw() -> void:
draw_circle(Vector2.ZERO, RADIUS, Color(1.0, 0.88, 0.35))
draw_arc(Vector2.ZERO, RADIUS, 0.0, TAU, 24, Color(1.0, 0.95, 0.7), 1.5)