44 lines
1.5 KiB
GDScript
44 lines
1.5 KiB
GDScript
extends Node2D
|
|
## Plancia in stile hand-drawn/sketch: sfondo chiaro, 5 corsie grigie con
|
|
## alloggiamenti circolari alle estremità (come il board di riferimento).
|
|
|
|
const VIEW := Vector2(1280, 720)
|
|
const LANE_TOP := 210.0
|
|
const LANE_GAP := 98.0
|
|
const HOME_X := 1130.0
|
|
const LEFT_X := 300.0
|
|
const CHANNEL_H := 44.0
|
|
const SOCKET_R := 46.0
|
|
|
|
const BG := Color("#f7f5f0") # tono carta
|
|
const FILL := Color("#b0b0b0")
|
|
const OUTLINE := Color(0.1, 0.1, 0.1, 0.85)
|
|
|
|
|
|
func _draw() -> void:
|
|
# sfondo plancia (tono carta)
|
|
draw_rect(Rect2(Vector2.ZERO, VIEW), BG)
|
|
# cornice esterna
|
|
draw_rect(Rect2(Vector2.ZERO, VIEW), Color(0, 0, 0, 0.12), false, 3.0)
|
|
for i in 5:
|
|
_draw_lane(LANE_TOP + i * LANE_GAP)
|
|
|
|
|
|
func _draw_lane(y: float) -> void:
|
|
# canale centrale
|
|
var ch := Rect2(LEFT_X, y - CHANNEL_H / 2.0, HOME_X - LEFT_X, CHANNEL_H)
|
|
draw_rect(ch, FILL)
|
|
draw_rect(ch, OUTLINE, false, 3.0)
|
|
# ombra interna in alto (scanalatura incassata)
|
|
draw_rect(Rect2(LEFT_X + 3, y - CHANNEL_H / 2.0 + 3.0, HOME_X - LEFT_X - 6, 3.0), Color(0, 0, 0, 0.18))
|
|
# luce interna in basso
|
|
draw_rect(Rect2(LEFT_X + 3, y + CHANNEL_H / 2.0 - 6.0, HOME_X - LEFT_X - 6, 3.0), Color(1, 1, 1, 0.25))
|
|
# alloggiamenti circolari alle estremità (incassati)
|
|
for cx in [LEFT_X, HOME_X]:
|
|
var c := Vector2(cx, y)
|
|
draw_circle(c, SOCKET_R, FILL)
|
|
draw_arc(c, SOCKET_R, 0.0, TAU, 48, OUTLINE, 3.0)
|
|
# cavità: ombra in basso, luce in alto
|
|
draw_circle(c + Vector2(0, 5), SOCKET_R - 7.0, Color(0, 0, 0, 0.12))
|
|
draw_circle(c + Vector2(0, -5), SOCKET_R - 7.0, Color(1, 1, 1, 0.18))
|