terminalFundamentos del lenguaje

A los efectos de esta documentación, nos referimos a CSL y al runtime/plataforma en torno a él de forma indistinta

Esta página es la parte de “modelado de datos” de CSL: primitivas, structs/clases y los patrones que usarás para representar el estado del juego con claridad.

circle-info

Si eres totalmente nuevo, empieza con Primeros pasos con CSL. Esta página asume que ya sabes declarar variables y escribir proc/method.

Tipos primitivos

Números y bools

  • Enteros con signo: s8, s16, s32, s64 (alias: int == s64)

  • Enteros sin signo: u8, u16, u32, u64 (alias: uint == u64)

  • Flotantes: f32 (alias: float), f64

  • Booleanos: b8 (alias: bool), b16, b32, b64

health: int = 100;
speed: float = 6.5;
is_dead: bool = false;

Cadenas

string se usa constantemente para IDs, nombres y formato.

item_id := "sword";
log_info("recogido %", {item_id});

Vectores

v2, v3, v4 son tipos integrados de matemáticas/datos:

Enums

Los enums son ideales para campos de “modo/estado” legibles:

circle-info

Los valores de enum suelen referenciarse con la forma abreviada .VALUE cuando el compilador puede inferir el tipo de enum.

Structs (tipos por valor)

Usa structs para “datos simples” que quieras copiar de forma barata (configuración, pequeños bloques de estado, descriptores).

Cuándo usar un struct

  • Un objeto descriptor/configuración (*_Desc)

  • Estado pequeño e independiente que quieras copiar por valor

  • Datos que quieras incrustar dentro de otro tipo

Cuándo no usar un struct

  • Estado mutable grande compartido entre varios sistemas (usa una clase)

  • Objetos de “identidad” (jugadores, objetos, objetos de larga vida) (usa una clase)

Clases (tipos por referencia)

Las clases son tipos por referencia. Crea instancias con new(...).

Herencia

Puedes heredar de otros structs/clases:

circle-exclamation

Arrays, slices y arrays dinámicos

Verás tres formas comunes:

  • Arrays fijos: [N]T (tamaño en tiempo de compilación)

  • Slices / arrays gestionados: []T (una vista de un array)

  • Arrays dinámicos: [..]T (lista redimensionable)

Ejemplo:

Para una guía completa, consulta Arrays y colecciones.

Paso por referencia (ref)

Si un procedimiento necesita modificar un valor, usa ref:

Esto es especialmente útil para APIs de estilo “layout” que recortan/reducen progresivamente un rect:

Conversión de tipos

Usa expr.(T):

Polimorfismo de tipos (procedimientos de estilo genérico)

CSL admite procedimientos polimórficos usando $ para deducir tipos en el sitio de llamada:

Tipos como valores (typeid)

typeid es un valor que representa un tipo en tiempo de ejecución y/o para llamadas polimórficas:

Pautas prácticas de modelado

  • El estado por jugador vive en Player. Si debe diferir entre jugadores, no debería ser global.

  • Prefiere structs pequeños para descriptores y guarda el estado en tiempo de ejecución en clases/componentes.

  • Mantén autoritativos los datos autorizados por el servidor. Si afecta al gameplay, no lo calcules solo en el cliente.

Para patrones específicos de jugador, consulta Añadir lógica de jugador. Para la parte ECS del mundo, consulta Entidades y componentes.

Última actualización