1234567891011121314151617181920212223242526272829303132333435363738 | # Defines a struct representing the player, which is controlled by WASD keys
use ./raylib.tm
use ./world.tm
struct Player(
pos,prev_pos:Vector2,
facing=Vector2(1,0),
has_signal=no,
dead=no,
target_vel=Vector2(0,0),
texture=Texture.load((./assets/RocketWhite.png)),
)
WALK_SPEED := Num32(500.)
ACCEL := Num32(0.1)
SIZE := Vector2(32, 32)
TEXTURE : Texture? = none
func update(p:@Player)
return if p.dead
vel := (p.pos - p.prev_pos)/World.DT
vel = vel.mix(p.target_vel, Player.ACCEL)
p.prev_pos, p.pos = p.pos, p.pos + World.DT*vel
if not p.pos.dist(p.prev_pos).near(0, .1, .1)
p.facing = p.facing.mix((p.pos-p.prev_pos).norm(), .1)
func draw(p:Player)
return if p.dead
angle := p.facing.angle()
tint := if p.has_signal
Color(0xff,0xff,0xff)
else
Color(0xcc,0x66,0x66)
p.texture.draw(p.pos, Player.SIZE, angle=angle+Num32.TAU/4, tint=tint)
if not p.has_signal
DrawText(CString("???"), Int32(p.pos.x,yes) - 24, Int32(p.pos.y,yes) - 40, 24, Color(0xff,0xff,0xff,0xa0))
|