From 4bff6127b0dda8fe7fb28ce3cd800c4ea9cd88d7 Mon Sep 17 00:00:00 2001 From: scambier Date: Sat, 10 Jan 2026 18:03:06 +0100 Subject: [PATCH] Update _G.d.ts --- _G.d.ts | 733 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 396 insertions(+), 337 deletions(-) diff --git a/_G.d.ts b/_G.d.ts index 59e2928..a2aa74d 100644 --- a/_G.d.ts +++ b/_G.d.ts @@ -1,45 +1,39 @@ // Picotron v0.2.1e Global API Type Definitions -// Userdata types -type UserdataType = "u8" | "i16" | "i32" | "i64" | "f64"; -type UserdataDim = "1d" | "2d"; +// ===================== +// Userdata +// ===================== +type UserdataType = 'u8' | 'i16' | 'i32' | 'i64' | 'f64' +type UserdataDim = '1d' | '2d' // Userdata interface interface Userdata { // Dimension methods - width(): number; - height(): number | null; + width(): number + height(): number | null /** * Returns width, height, type, dimensionality */ - attribs(): LuaMultiReturn<[number, number, T, number]>; + attribs(): LuaMultiReturn<[number, number, T, number]> // Element access — 1D - get(x: number): D extends "1d" ? number : LuaMultiReturn; - get(x: number, n: number): D extends "1d" ? LuaMultiReturn : number; + get(x: number): D extends '1d' ? number : LuaMultiReturn + get(x: number, n: number): D extends '1d' ? LuaMultiReturn : number // Element access — 2D // No n specified (defaults to 1, returns single number) - get(x: number, y: number): D extends "2d" ? number : LuaMultiReturn; + get(x: number, y: number): D extends '2d' ? number : LuaMultiReturn // n = 0 (fast path, returns single number) - get( - x: number, - y: number, - n: 0 - ): D extends "2d" ? number : LuaMultiReturn; + get(x: number, y: number, n: 0): D extends '2d' ? number : LuaMultiReturn // n specified (returns multiple values) - get( - x: number, - y: number, - n: number - ): D extends "2d" ? LuaMultiReturn : number; + get(x: number, y: number, n: number): D extends '2d' ? LuaMultiReturn : number - set(x: number, ...values: number[]): void; - set(x: number, y: number, ...values: number[]): void; + set(x: number, ...values: number[]): void + set(x: number, y: number, ...values: number[]): void // Row/Column access (2d only) - row(i: number): Userdata | null; - column(i: number): Userdata | null; + row(i: number): Userdata | null + column(i: number): Userdata | null // Binary operations add( @@ -51,7 +45,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata sub( src: Userdata | number, dest?: Userdata | true, @@ -61,7 +55,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata mul( src: Userdata | number, dest?: Userdata | true, @@ -71,7 +65,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata div( src: Userdata | number, dest?: Userdata | true, @@ -81,7 +75,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata mod( src: Userdata | number, dest?: Userdata | true, @@ -91,7 +85,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata pow( src: Userdata | number, dest?: Userdata | true, @@ -101,7 +95,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata // Bitwise operations band( @@ -113,7 +107,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata bor( src: Userdata | number, dest?: Userdata | true, @@ -123,7 +117,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata bxor( src: Userdata | number, dest?: Userdata | true, @@ -133,7 +127,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata // Min/Max operations max( @@ -145,7 +139,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata min( src: Userdata | number, dest?: Userdata | true, @@ -155,7 +149,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata // Unary operations copy( @@ -166,7 +160,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata abs( dest?: Userdata | true, src_offset?: number, @@ -175,7 +169,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata sgn( dest?: Userdata | true, src_offset?: number, @@ -184,7 +178,7 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata sgn0( dest?: Userdata | true, src_offset?: number, @@ -193,11 +187,11 @@ interface Userdata { src_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata // Lookup table copy take( - idx: Userdata<"i32">, + idx: Userdata<'i32'>, dest?: Userdata, idx_offset?: number, dest_offset?: number, @@ -205,7 +199,7 @@ interface Userdata { idx_stride?: number, dest_stride?: number, spans?: number - ): Userdata; + ): Userdata // Blit operation blit( @@ -216,11 +210,11 @@ interface Userdata { dest_y?: number, width?: number, height?: number - ): void; + ): void // Mutation and conversion - mutate(data_type: UserdataType, width?: number, height?: number): void; - convert(data_type: UserdataType, dest?: Userdata): Userdata; + mutate(data_type: UserdataType, width?: number, height?: number): void + convert(data_type: UserdataType, dest?: Userdata): Userdata // Interpolation lerp( @@ -229,123 +223,80 @@ interface Userdata { el_stride?: number, num_lerps?: number, lerp_stride?: number - ): Userdata; + ): Userdata // Sorting (2d only) - sort(index?: number, descending?: boolean): void; + sort(index?: number, descending?: boolean): void // Memory operations - peek(addr: number, offset?: number, elements?: number): void; - poke(addr: number, offset?: number, elements?: number): void; + peek(addr: number, offset?: number, elements?: number): void + poke(addr: number, offset?: number, elements?: number): void // Matrix/Vector operations (f64 only) - matmul( - m: Userdata<"f64">, - m_out?: Userdata<"f64">, - batch_height?: number - ): Userdata<"f64">; - matmul3d( - m: Userdata<"f64">, - m_out?: Userdata<"f64">, - batch_height?: number - ): Userdata<"f64">; - transpose(m_out?: Userdata | true): Userdata; + matmul(m: Userdata<'f64'>, m_out?: Userdata<'f64'>, batch_height?: number): Userdata<'f64'> + matmul3d(m: Userdata<'f64'>, m_out?: Userdata<'f64'>, batch_height?: number): Userdata<'f64'> + transpose(m_out?: Userdata | true): Userdata // Vector operations (f64 only) - magnitude(): number; - distance(v: Userdata<"f64">): number; - dot(v: Userdata<"f64">): number; - cross(v: Userdata<"f64">, v_out?: Userdata<"f64"> | true): Userdata<"f64">; + magnitude(): number + distance(v: Userdata<'f64'>): number + dot(v: Userdata<'f64'>): number + cross(v: Userdata<'f64'>, v_out?: Userdata<'f64'> | true): Userdata<'f64'> } // ===================== // Math Functions // ===================== -declare function abs(x: number): number; -declare function atan2(dx: number, dy: number): number; -declare function cos(x: number): number; -declare function flr(x: number): number; -declare function max(x: number, ...args: number[]): number; -declare function mid(x: number, y: number, z: number): number; -declare function min(x: number, ...args: number[]): number; -declare function rnd(x?: number): number; -declare function sgn(x: number): number; -declare function sin(x: number): number; -declare function sqrt(x: number): number; -declare function srand(seed: number): void; +declare function abs(x: number): number +declare function atan2(dx: number, dy: number): number +declare function cos(x: number): number +declare function flr(x: number): number +declare function max(x: number, ...args: number[]): number +declare function mid(x: number, y: number, z: number): number +declare function min(x: number, ...args: number[]): number +declare function rnd(x?: number): number +declare function sgn(x: number): number +declare function sin(x: number): number +declare function sqrt(x: number): number +declare function srand(seed: number): void // ===================== // Bitwise operations // ===================== -declare function band(x: number, ...args: number[]): number; -declare function bnot(x: number): number; -declare function bor(x: number, ...args: number[]): number; -declare function bxor(x: number, ...args: number[]): number; -declare function rotl(x: number, n: number): number; -declare function rotr(x: number, n: number): number; -declare function shl(x: number, n: number): number; -declare function shr(x: number, n: number): number; +declare function band(x: number, ...args: number[]): number +declare function bnot(x: number): number +declare function bor(x: number, ...args: number[]): number +declare function bxor(x: number, ...args: number[]): number +declare function rotl(x: number, n: number): number +declare function rotr(x: number, n: number): number +declare function shl(x: number, n: number): number +declare function shr(x: number, n: number): number // ===================== // Graphics API // ===================== -declare function cls(color?: number): void; -declare function camera(x?: number, y?: number): void; -declare function clip(x?: number, y?: number, w?: number, h?: number): void; -declare function color(c: number): void; -declare function pal(c0?: number, c1?: number, p?: number): void; -declare function palt(c?: number, t?: boolean): void; -declare function fillp(pattern?: number): void; -declare function pget(x: number, y: number): number; -declare function pset(x: number, y: number, c?: number): void; -declare function cursor(x?: number, y?: number, c?: number): void; -declare function print( - text?: any, - x?: number, - y?: number, - color?: number -): number; -declare function line( - x1: number, - y1: number, - x2?: number, - y2?: number, - color?: number -): void; -declare function line(userdata: Userdata): void; -declare function rect( - x0: number, - y0: number, - x1: number, - y1: number, - c?: number -): void; -declare function rect(userdata: Userdata): void; -declare function rectfill( - x0: number, - y0: number, - x1: number, - y1: number, - c?: number -): void; -declare function rectfill(userdata: Userdata): void; -declare function circ(x: number, y: number, r: number, c?: number): void; -declare function circfill(x: number, y: number, r: number, c?: number): void; -declare function circfill(userdata: Userdata): void; -declare function oval( - x: number, - y: number, - rx: number, - ry: number, - c?: number -): void; -declare function ovalfill( - x: number, - y: number, - rx: number, - ry: number, - c?: number -): void; +declare function cls(color?: number): void +declare function camera(x?: number, y?: number): void +declare function clip(x?: number, y?: number, w?: number, h?: number): void +declare function color(c: number): void +declare function pal(c0?: number, c1?: number, p?: number): void +declare function palt(c?: number, t?: boolean): void +declare function fillp(pattern?: number): void +declare function pget(x: number, y: number): number +declare function pset(x: number, y: number, c?: number): void +declare function cursor(x?: number, y?: number, c?: number): void +declare function print(text?: any, x?: number, y?: number, color?: number): number +declare function line(x1: number, y1: number, x2?: number, y2?: number, color?: number): void +declare function line(userdata: Userdata): void +declare function rect(x0: number, y0: number, x1: number, y1: number, c?: number): void +declare function rect(userdata: Userdata): void +declare function rectfill(x0: number, y0: number, x1: number, y1: number, c?: number): void +declare function rectfill(userdata: Userdata): void +declare function circ(x: number, y: number, r: number, c?: number): void +declare function circfill(x: number, y: number, r: number, c?: number): void +declare function circfill(userdata: Userdata): void +declare function oval(x: number, y: number, rx: number, ry: number, c?: number): void +declare function ovalfill(x: number, y: number, rx: number, ry: number, c?: number): void declare function rrect( x: number, y: number, @@ -353,7 +304,7 @@ declare function rrect( height: number, radius?: number, c?: number -): void; +): void declare function rrectfill( x: number, y: number, @@ -361,19 +312,19 @@ declare function rrectfill( height: number, radius?: number, c?: number -): void; -declare function fget(n: number): number; -declare function fget(n: number, f: number): boolean; -declare function fset(n: number, f?: number, val?: boolean): void; -declare function get_spr(index: number): Userdata<"u8">; -declare function set_spr(index: number, ud: Userdata<"u8">): void; +): void +declare function fget(n: number): number +declare function fget(n: number, f: number): boolean +declare function fset(n: number, f?: number, val?: boolean): void +declare function get_spr(index: number): Userdata<'u8'> +declare function set_spr(index: number, ud: Userdata<'u8'>): void declare function spr( sprite: number | Userdata, x: number, y: number, flip_x?: boolean, flip_y?: boolean -): void; +): void declare function sspr( sx: number, sy: number, @@ -385,7 +336,7 @@ declare function sspr( dh?: number, flip_x?: boolean, flip_y?: boolean -): void; +): void // ===================== // Map API @@ -398,9 +349,9 @@ declare function map( cel_w?: number, cel_h?: number, layer?: number -): void; +): void declare function map( - src: Userdata<"i16">, + src: Userdata<'i16'>, cel_x?: number, cel_y?: number, sx?: number, @@ -410,15 +361,11 @@ declare function map( layer?: number, tile_w?: number, tile_h?: number -): void; -declare function mget(cel_x: number, cel_y: number): number; -declare function mset( - cel_x: number, - cel_y: number, - sprite_number: number -): void; +): void +declare function mget(cel_x: number, cel_y: number): number +declare function mset(cel_x: number, cel_y: number, sprite_number: number): void declare function tline3d( - src: number | Userdata<"u8"> | Userdata<"i16">, + src: number | Userdata<'u8'> | Userdata<'i16'>, x0: number, y0: number, x1: number, @@ -430,7 +377,7 @@ declare function tline3d( w0?: number, w1?: number, flags?: number -): void; +): void declare function tline3d( x0: number, y0: number, @@ -443,7 +390,7 @@ declare function tline3d( w0?: number, w1?: number, flags?: number -): void; +): void // ===================== // Audio API @@ -454,14 +401,14 @@ declare function sfx( offset?: number, length?: number, mix_volume?: number -): void; +): void declare function music( id?: number, fade_len?: number, channel_mask?: number, base_addr?: number, tick_offset?: number -): void; +): void declare function note( pitch?: number, inst?: number, @@ -471,209 +418,175 @@ declare function note( channel?: number, retrig?: boolean, panning?: number -): void; +): void // ===================== // Input API // ===================== -declare function btn(i?: number, player?: number): number | boolean; -declare function btnp(i?: number, player?: number): number | boolean; -declare function key(k?: string, raw?: boolean): boolean; -declare function keyp(k?: string, raw?: boolean): boolean; -declare function peektext(): boolean; -declare function readtext(clear?: boolean): string; -declare function mouse(): LuaMultiReturn< - [number, number, number, number, number] ->; +declare function btn(i?: number, player?: number): number | boolean +declare function btnp(i?: number, player?: number): number | boolean +declare function key(k?: string, raw?: boolean): boolean +declare function keyp(k?: string, raw?: boolean): boolean +declare function peektext(): boolean +declare function readtext(clear?: boolean): string +declare function mouse(): LuaMultiReturn<[number, number, number, number, number]> declare function mouselock( lock: boolean, event_sensitivity?: number, move_sensitivity?: number -): LuaMultiReturn<[number, number]>; -declare function input(prompt?: string, flags?: number): string | null; +): LuaMultiReturn<[number, number]> +declare function input(prompt?: string, flags?: number): string | null // ===================== // String API // ===================== -declare function chr(...values: number[]): string; +declare function chr(...values: number[]): string declare function ord( str: string, index?: number, num_results?: number -): number | LuaMultiReturn; -declare function sub( - str: string, - pos0: number, - pos1?: number | boolean -): string; +): number | LuaMultiReturn +declare function sub(str: string, pos0: number, pos1?: number | boolean): string declare function split( str: string, delimiter?: string | number, convert_numbers?: boolean -): string[]; -declare function type(val: any): string; -declare function tostr(val: any, format?: string): string; -declare function tonum(str: string): number | null; -declare function create_delta(str0: string, str1: string): string; -declare function apply_delta(str0: string, delta: string): string | null; +): string[] +declare function type(val: any): string +declare function tostr(val: any, format?: string): string +declare function tonum(str: string): number | null +declare function create_delta(str0: string, str1: string): string +declare function apply_delta(str0: string, delta: string): string | null // ===================== // Tables API // ===================== -declare function add(t: any[], item: any, index?: number): void; -declare function del(t: any[], item: any): void; -declare function deli(t: any[], index: number): any; -declare function count(t: any[]): number; -declare function all(t: any[]): () => any | undefined; -declare function foreach(t: any[], fn: (item: any) => void): void; +declare function add(t: any[], item: any, index?: number): void +declare function del(t: any[], item: any): void +declare function deli(t: any[], index: number): any +declare function count(t: any[]): number +declare function all(t: any[]): () => any | undefined +declare function foreach(t: any[], fn: (item: any) => void): void declare function pairs( t: any -): LuaMultiReturn<[(t: any, k?: any) => LuaMultiReturn<[any, any]>, any, any]>; -declare function next(t: any, k?: any): LuaMultiReturn<[any, any]>; +): LuaMultiReturn<[(t: any, k?: any) => LuaMultiReturn<[any, any]>, any, any]> +declare function next(t: any, k?: any): LuaMultiReturn<[any, any]> // ===================== // PODs API // ===================== -declare function pod(val: any, flags?: number, metadata?: any): string; -declare function unpod(str: string): LuaMultiReturn<[any, any]>; -declare function store(path: string, val: any): void; -declare function fetch(path: string): any; +declare function pod(val: any, flags?: number, metadata?: any): string +declare function unpod(str: string): LuaMultiReturn<[any, any]> +declare function store(path: string, val: any): void +declare function fetch(path: string): any // ===================== // Files API // ===================== -declare function store(filename: string, obj: any, metadata?: any): void; -declare function fetch( - filename: string, - options?: any -): LuaMultiReturn<[any, any]>; -declare function store_metadata(filename: string, metadata: any): void; -declare function fetch_metadata(filename: string): any; -declare function include(path: string): void; -declare function cd(path: string): void; -declare function ls(path?: string): string[]; -declare function mkdir(path: string): void; -declare function rm(path: string): void; -declare function mv(src: string, dest: string): void; -declare function cp(src: string, dest: string): void; -declare function pwd(): string; -declare function fullpath(filename: string): string; -declare function fstat(path: string): LuaMultiReturn<[string, number, string]>; +declare function store(filename: string, obj: any, metadata?: any): void +declare function fetch(filename: string, options?: any): LuaMultiReturn<[any, any]> +declare function store_metadata(filename: string, metadata: any): void +declare function fetch_metadata(filename: string): any +declare function include(path: string): void +declare function cd(path: string): void +declare function ls(path?: string): string[] +declare function mkdir(path: string): void +declare function rm(path: string): void +declare function mv(src: string, dest: string): void +declare function cp(src: string, dest: string): void +declare function pwd(): string +declare function fullpath(filename: string): string +declare function fstat(path: string): LuaMultiReturn<[string, number, string]> // ===================== // System API // ===================== -declare function load(path: string): void; -declare function save(path: string): void; -declare function run(): void; -declare function stop(message?: string): void; -declare function resume(): void; -declare function reset(cart?: string): void; -declare function stat(v: number, ...args: any[]): any; -declare function env(): any; -declare function time(): number; -declare function t(): number; -declare function date( - format?: string, - t?: string | number, - delta?: number -): string; -declare function exit(): void; +declare function load(path: string): void +declare function save(path: string): void +declare function run(): void +declare function stop(message?: string): void +declare function resume(): void +declare function reset(cart?: string): void +declare function stat(v: number, ...args: any[]): any +declare function env(): any +declare function time(): number +declare function t(): number +declare function date(format?: string, t?: string | number, delta?: number): string +declare function exit(): void declare function printh( text: any, file_path?: string, overwrite?: boolean, terminal?: boolean -): void; -declare function error(description?: string): void; -declare function assert(condition: any, message?: string): void; -declare function get_clipboard(): string; -declare function set_clipboard(text: string): void; -declare function create_process(filename: string, ...args: any[]): number; -declare function pid(): number; -declare function signal(proc_id: number, signal: string): void; +): void +declare function error(description?: string): void +declare function assert(condition: any, message?: string): void +declare function get_clipboard(): string +declare function set_clipboard(text: string): void +declare function create_process(filename: string, ...args: any[]): number +declare function pid(): number +declare function signal(proc_id: number, signal: string): void declare function send_message( proc_id: number, msg: any, reply?: boolean | ((msg: any) => void) -): any; -declare function on_event( - event: string, - func: (msg: any) => boolean | void -): void; +): any +declare function on_event(event: string, func: (msg: any) => boolean | void): void // ===================== // Memory API // ===================== -declare function peek( - addr: number, - count?: number -): number | LuaMultiReturn; -declare function poke(addr: number, ...values: number[]): void; -declare function peek2(addr: number): number; -declare function poke2(addr: number, val: number): void; -declare function peek4(addr: number): number; -declare function poke4(addr: number, val: number): void; -declare function peek8(addr: number): number; -declare function poke8(addr: number, val: number): void; -declare function memcpy( - dest_addr: number, - src_addr: number, - count: number -): void; -declare function memset(addr: number, value: number, count: number): void; -declare function reload( - dest_addr: number, - src_addr: number, - count: number, - filename?: string -): void; -declare function memmap(ud: Userdata, addr: number): void; +declare function peek(addr: number, count?: number): number | LuaMultiReturn +declare function poke(addr: number, ...values: number[]): void +declare function peek2(addr: number): number +declare function poke2(addr: number, val: number): void +declare function peek4(addr: number): number +declare function poke4(addr: number, val: number): void +declare function peek8(addr: number): number +declare function poke8(addr: number, val: number): void +declare function memcpy(dest_addr: number, src_addr: number, count: number): void +declare function memset(addr: number, value: number, count: number): void +declare function reload(dest_addr: number, src_addr: number, count: number, filename?: string): void +declare function memmap(ud: Userdata, addr: number): void // ===================== // Userdata API // ===================== // 1D creation (width only) — allow specifying only D; T is inferred from first argument -declare function userdata< - D extends "1d" = "1d", - T extends UserdataType = UserdataType, ->(data_type: T, width: number, ...data: number[]): Userdata; +declare function userdata( + data_type: T, + width: number, + ...data: number[] +): Userdata // 2D creation (width + height) — allow specifying only D; T is inferred from first argument -declare function userdata< - D extends "2d" = "2d", - T extends UserdataType = UserdataType, ->( +declare function userdata( data_type: T, width: number, height: number, ...data: number[] -): Userdata; +): Userdata // GFX string always yields 2D u8 -declare function userdata(gfx_string: string): Userdata<"u8", "2d">; +declare function userdata(gfx_string: string): Userdata<'u8', '2d'> // Vector helper produces 1D f64 -declare function vec(...values: number[]): Userdata<"f64", "1d">; +declare function vec(...values: number[]): Userdata<'f64', '1d'> declare function get( u: Userdata | null | undefined, x: number, n?: number -): LuaMultiReturn; +): LuaMultiReturn declare function get( u: Userdata | null | undefined, x: number, y: number, n?: number -): LuaMultiReturn; -declare function set( - u: Userdata | null | undefined, - x: number, - ...values: number[] -): void; +): LuaMultiReturn +declare function set(u: Userdata | null | undefined, x: number, ...values: number[]): void declare function set( u: Userdata | null | undefined, x: number, y: number, ...values: number[] -): void; +): void declare function blit( src?: Userdata, dest?: Userdata, @@ -683,88 +596,234 @@ declare function blit( dest_y?: number, width?: number, height?: number -): void; +): void declare function matmul( - m0: Userdata<"f64">, - m1: Userdata<"f64">, - m_out?: Userdata<"f64">, + m0: Userdata<'f64'>, + m1: Userdata<'f64'>, + m_out?: Userdata<'f64'>, batch_height?: number -): Userdata<"f64">; +): Userdata<'f64'> declare function matmul3d( - m0: Userdata<"f64">, - m1: Userdata<"f64">, - m_out?: Userdata<"f64">, + m0: Userdata<'f64'>, + m1: Userdata<'f64'>, + m_out?: Userdata<'f64'>, batch_height?: number -): Userdata<"f64">; +): Userdata<'f64'> // ===================== // Window API // ===================== declare function window( attributes?: Partial<{ - width: number; - height: number; - title: string; - pauseable: boolean; - tabbled: boolean; - has_frame: boolean; - resizeable: boolean; - wallpapier: boolean; - autoclose: boolean; - z: number; - cursor: 0 | 1 | Userdata; - squashable: boolean; - background_updates: boolean; - background_draws: boolean; + width: number + height: number + title: string + pauseable: boolean + tabbled: boolean + has_frame: boolean + resizeable: boolean + wallpapier: boolean + autoclose: boolean + z: number + cursor: 0 | 1 | Userdata + squashable: boolean + background_updates: boolean + background_draws: boolean }> -): any; -declare function window(width: number, height: number): any; -declare function get_display(): Userdata<"u8">; -declare function set_draw_target(ud?: Userdata<"u8">): void; -declare function get_draw_target(): Userdata<"u8">; -declare function vid(mode: number): void; +): any +declare function window(width: number, height: number): any +declare function get_display(): Userdata<'u8'> +declare function set_draw_target(ud?: Userdata<'u8'>): void +declare function get_draw_target(): Userdata<'u8'> +declare function vid(mode: number): void // ===================== // Undo Stacks // ===================== interface UndoStack { - checkpoint(extra?: any): void; - undo(peek?: boolean): any; - redo(peek?: boolean): any; + checkpoint(extra?: any): void + undo(peek?: boolean): any + redo(peek?: boolean): any } declare function create_undo_stack( save: (item?: any) => any, load: (dat: any, item?: any) => void, pod_flags?: number, item?: any -): UndoStack; +): UndoStack // ===================== // Sockets // ===================== interface Socket { - read(): string | LuaMultiReturn<[null, string]>; - write(str: string): number | LuaMultiReturn<[null, string]>; - close(): void; - status(): - | "ready" - | "listening" - | "closed" - | "closed by peer" - | "disconnected"; - accept(): Socket | null; + read(): string | LuaMultiReturn<[null, string]> + write(str: string): number | LuaMultiReturn<[null, string]> + close(): void + status(): 'ready' | 'listening' | 'closed' | 'closed by peer' | 'disconnected' + accept(): Socket | null } -declare function socket(addr: string): Socket | null; +declare function socket(addr: string): Socket | null // ===================== // Userdata Memory // ===================== -declare function unmap(ud: Userdata, addr?: number): void; +declare function unmap(ud: Userdata, addr?: number): void + +// ===================== +// Graphical User Interface +// ===================== +interface GuiMsg { + event: string + mx: number + my: number + mb: number + dx: number + dy: number + mx0?: number // drag start position + my0?: number + wheel_x: number + wheel_y: number + has_pointer: boolean + last_mb?: number + propagate_to_children?: boolean +} + +// Properties that can be passed when creating/attaching elements +interface GuiElementAttribs { + x?: number + y?: number + z?: number + width?: number + height?: number + width0?: number + height0?: number + + // Relative sizing + width_rel?: number + height_rel?: number + width_add?: number + height_add?: number + + // Layout + justify?: 'left' | 'center' | 'right' + vjustify?: 'top' | 'center' | 'bottom' + clip_to_parent?: boolean + confine_to_clip?: boolean + squash_to_clip?: boolean + confine_to_parent?: boolean + squash_to_parent?: boolean + min_width?: number + min_height?: number + + // Appearance + label?: string + cursor?: string | number + bgcol?: number + fgcol?: number + border?: number + highlight?: boolean + hidden?: boolean + ghost?: boolean + + // Custom properties + action?: (this: GuiElement) => void + divider?: boolean + icon?: number | Userdata + shortcut?: string + stay_open?: boolean + autohide?: boolean + + // For fields + get?: (this: GuiElement) => string + set?: (this: GuiElement, val: string) => void + print_prefix?: string + str?: string + + // Event handlers + click?: (this: GuiElement, msg: GuiMsg) => boolean | void + doubleclick?: (this: GuiElement, msg: GuiMsg) => boolean | void + doubletap?: (this: GuiElement, msg: GuiMsg) => boolean | void + drag?: (this: GuiElement, msg: GuiMsg) => boolean | void + release?: (this: GuiElement, msg: GuiMsg) => boolean | void + tap?: (this: GuiElement, msg: GuiMsg) => boolean | void + mousewheel?: (this: GuiElement, msg: GuiMsg) => boolean | void + hover?: (this: GuiElement, msg: GuiMsg) => boolean | void + update?: (this: GuiElement, msg: GuiMsg) => boolean | void + draw?: (this: GuiElement, msg: GuiMsg) => void + test_point?: (this: GuiElement, x: number, y: number) => boolean +} + +interface GuiElement extends GuiElementAttribs { + // Always exist after creation (set by GuiElement:new) + z: number + sx: number + sy: number + clip_to_parent: boolean + child: GuiElement[] + t0: number + + // Set during attach + parent?: GuiElement + head: Gui + + // Click tracking (set by gui internally) + last_click_t?: number + last_click_mb?: number + last_tap_t?: number + last_tap_mb?: number + + // Methods + attach>( + child?: T + ): GuiElement & T + attach_button>( + el: T + ): GuiElement & T & { label: string; width: number; height: number; cursor: string; bgcol: number; fgcol: number; border: number } + attach_pulldown>( + el: T + ): GuiElement & T & { item_y: number; item_h: number } + attach_pulldown_item>( + el: T + ): GuiElement & T & { label: string; x: number; y: number; width: number; height: number } + attach_field>( + el: T + ): GuiElement & T + attach_scrollbars(attribs?: { autohide?: boolean }): GuiElement + attach_text_editor(...args: any[]): GuiElement + detach(el?: GuiElement): GuiElement | void + bring_to_front(): void + push_to_back(): void + has_keyboard_focus(): boolean + set_keyboard_focus(val: boolean): void + event(msg: GuiMsg): void +} + +interface Gui extends GuiElement { + // Always set for root gui + x: number + y: number + width: number + height: number + + pointer_element?: GuiElement + keyboard_focus_el?: GuiElement + mouse_cursor_gfx?: string | number | false + + update_all(): void + draw_all(): void + get_pointer_element(): GuiElement | undefined + get_keyboard_focus_element(): GuiElement | undefined + el_at_xy(x: number, y: number): GuiElement | undefined + el_at_pointer(x: number, y: number): GuiElement | undefined + new>(el: T): GuiElement & T +} + +declare function create_gui(head_el?: GuiElementAttribs): Gui // ===================== // Main Loop Callbacks // ===================== -declare var _init: () => void; -declare var _draw: () => void; -declare var _update: () => void; -declare var _update60: () => void; +declare var _init: () => void +declare var _draw: () => void +declare var _update: () => void +declare var _update60: () => void