Download
38 lines 1.1 KiBTomoModified 2025-04-07 raw
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))