# state.ludic - the port, the prints, the facts, and what the reader has learned # what the tracks ask the world. Any member may be left out of the bind: the time is then 0, # the reader can name every animal, no bearing is given, and nothing is drawn. export port TracksWorld { now: fn() -> float = fn tk_time_zero # game hours, counted from the start of the trip skill: fn() -> int = fn tk_every_skill # how well the reader reads (the game's tiers) bearing: fn(float) -> string = fn tk_no_bearing # a yaw in words ("north-west"), "" for none placed: fn(int, int) -> void = fn tk_not_drawn # a print was put down at (kind, ring index): draw it } function tk_time_zero() -> float { return 0.0 } function tk_every_skill() -> int { return 2147483647 } function tk_no_bearing(yaw: float) -> string { return "" } function tk_not_drawn(kind: int, i: int) -> void { } # where a sign came from export const TRACK_PRINT: int = 0 # a print in a ring, read with tracks_read export const TRACK_SIGN: int = 1 # a legend's sign, told with tracks_note export const TRACK_SCAT: int = 2 # droppings, told with tracks_note # how old a print looks export const TRACK_FRESH: int = 0 export const TRACK_RECENT: int = 1 export const TRACK_OLD: int = 2 export property Track { x: float = 0.0 z: float = 0.0 yaw: float = 0.0 sp: int = 0 legend: bool = false maker: int = -1 # the animal that left it (the game's nid), -1 not known made: float = 0.0 read: bool = false } # a sign was read: `first` the first time this one was, `named` whether the reader could tell # the animal, `bearing` the way it went in words ("" without them) export property TrackRead { sp: int = 0 source: int = 0 kind: int = 0 legend: bool = false age: float = 0.0 fresh: int = 0 yaw: float = 0.0 named: bool = true bearing: string = "" first: bool = false } export state TracksState { tk_kinds: int = 0 tk_cap: int = 0 tk_ring: []Track = null # kinds x cap, kind-major tk_count: []int = null # per kind: how many of the ring are in use tk_next: []int = null # per kind: where the next print goes tk_name_at: int = 0 # the skill that tells the animal from its print tk_fresh_h: float = 0.5 tk_recent_h: float = 2.5 tk_read_n: int = 0 # signs read for the first time, of every source tk_yaw: float = 0.0 # the heading of the last sign read tk_has_yaw: bool = false tk_chain: int = -1 # the maker of the trail being followed, -1 none (chain.ludic) tk_chain_x: float = 0.0 # the last of its signs read: where, and when it was made tk_chain_z: float = 0.0 tk_chain_made: float = 0.0 tk_chain_h: float = 0.0 # when it was read, in game hours tk_reads: Queue = tk_reads__new() } # the facts: every sign read, oldest first export function tracks_reads(tracks_st: TracksState) -> Queue { return tracks_st.tk_reads } function tk_reads__new() -> Queue { return queue_new("tracks.reads") }