Interface Lua #3

Open
opened 2025-07-02 12:50:28 +02:00 by Fcalva · 0 comments
Owner

Les scripts lua sont dans script/ et sont automatiquement exécutés

Ce qui a été implémenté pour le moment ( après les : sont les types des paramètres, et après -> le type de retour) :

  • Type V2d : { .x : number, .y : number}
  • Type Storage : Liste de taille 5 lié a une liste C
  • Type Machine :
{ .pos : V2d,
   .type : integer [0;255], -- De MachineTypes
   .assign_workers : integer [0:255], -- nb de travailleurs assignés
   .active : integer [0;255], -- taux d'activité
   .storage : Storage ,-- stockage des ingrédients, l'index 5 est la sortie
   .id : integer [0;65536]
}
  • Type AiInternal:
{ .status : integer [0;255], -- De Status
   .carrying : integer [0;255], -- Qtt d'ingrédient transportée
   .carry_type : integer [0;255], -- Type d'ingrédient transporté
   .mtype : integer [0;255], -- Type de la machine assignée (si assigné a une machine)
   .assigned_machine : integer [0;65536], -- Id de la machine assignée ou id de la machine depuis laquelle prendre
   .assigned_machine1 : integer [0;65536], -- Id de la machine à laquelle emmener (si en transport)
   .dest : V2d -- La destination actuelle
 }
  • Type Worker :
{ .pos : V2d,
  .ai : AiInternal,
  .traits : integer [0;65536], -- Une bitmap des traits de WorkerTraits
  .anim_frame : integer [0;256], -- frame actuelle de l'animation actuelle
  .assign_n : integer [0;256], -- place assignée si assigné a une machine
  .satisf : integer [0;256], -- Taux de satisfaction
  .fatigue : integer [0;256], -- Taux de fatigue
  .name : integer [0;256] -- Id du nom actuel
}
  • mtprint(texte : string) -> nil : Affiche text dans la console
  • add_machine(x : number, y : number) -> Machine : Instance une nouvelle machine et la retourne
  • get_machine_from_id(id : integer) -> Machine ou nil : Cherche une machine avec l'id id, retourne nil si non trouvée
  • add_worker(x : number, y : number) -> Worker : Instance un nouveau travailleur et le retourne
  • get_worker_from_pos(x : number, y : number) -> Worker ou nil : Cherche un travailleur qui a une collision avec le point x,y. Retourne nil si non trouvé.
  • assign_worker_machine(machine : Machine, worker : Worker) -> integer : Assigne le travailleur worker à machine. Retourne toujours 0 actuellement.
  • assign_worker_fetch(machine_a : Machine, machine_b : Machine, worker : Worker) -> integer : Assign le travailleur worker à transporter de machine_a à machine_b

Hooks :

  • "type" de game :
{ .machines = { .machine_n : integer},
   .workers = { .worker_n : integer},
   .map = {.width : integer, .height : integer},
   .paused : integer, -- 0 si non pausé, 1 si pausé
   .exit : integer, -- Si != 0, le jeu va quitter à la fin de la frame
   .cash : integer
}

Attention, tous les membres sauf cash̀ sont en lecture seule

  • on_tick(game) : Est appelé a chaque tick de logique, soit 20Hz (recommandé)
  • on_frame(game) : Est appelé a chaque frame, peut être de 0Hz à 60Hz
  • on_load(game, map) : Est appelé sur un chargement de map. ̀map` est l'id de la map chargée.
Les scripts lua sont dans script/ et sont automatiquement exécutés Ce qui a été implémenté pour le moment ( après les `:` sont les types des paramètres, et après -> le type de retour) : - Type `V2d` : `{ .x : number, .y : number}` - Type `Storage` : Liste de taille 5 lié a une liste C - Type `Machine` : ``` { .pos : V2d, .type : integer [0;255], -- De MachineTypes .assign_workers : integer [0:255], -- nb de travailleurs assignés .active : integer [0;255], -- taux d'activité .storage : Storage ,-- stockage des ingrédients, l'index 5 est la sortie .id : integer [0;65536] } ``` - Type `AiInternal`: ``` { .status : integer [0;255], -- De Status .carrying : integer [0;255], -- Qtt d'ingrédient transportée .carry_type : integer [0;255], -- Type d'ingrédient transporté .mtype : integer [0;255], -- Type de la machine assignée (si assigné a une machine) .assigned_machine : integer [0;65536], -- Id de la machine assignée ou id de la machine depuis laquelle prendre .assigned_machine1 : integer [0;65536], -- Id de la machine à laquelle emmener (si en transport) .dest : V2d -- La destination actuelle } ``` - Type `Worker` : ``` { .pos : V2d, .ai : AiInternal, .traits : integer [0;65536], -- Une bitmap des traits de WorkerTraits .anim_frame : integer [0;256], -- frame actuelle de l'animation actuelle .assign_n : integer [0;256], -- place assignée si assigné a une machine .satisf : integer [0;256], -- Taux de satisfaction .fatigue : integer [0;256], -- Taux de fatigue .name : integer [0;256] -- Id du nom actuel } ``` - `mtprint(texte : string) -> nil` : Affiche `text` dans la console - `add_machine(x : number, y : number) -> Machine` : Instance une nouvelle machine et la retourne - `get_machine_from_id(id : integer) -> Machine ou nil` : Cherche une machine avec l'id `id`, retourne nil si non trouvée - `add_worker(x : number, y : number) -> Worker` : Instance un nouveau travailleur et le retourne - `get_worker_from_pos(x : number, y : number) -> Worker ou nil` : Cherche un travailleur qui a une collision avec le point x,y. Retourne nil si non trouvé. - `assign_worker_machine(machine : Machine, worker : Worker) -> integer` : Assigne le travailleur `worker` à `machine`. Retourne toujours 0 actuellement. - `assign_worker_fetch(machine_a : Machine, machine_b : Machine, worker : Worker) -> integer` : Assign le travailleur `worker` à transporter de `machine_a` à `machine_b` Hooks : - "type" de game : ``` { .machines = { .machine_n : integer}, .workers = { .worker_n : integer}, .map = {.width : integer, .height : integer}, .paused : integer, -- 0 si non pausé, 1 si pausé .exit : integer, -- Si != 0, le jeu va quitter à la fin de la frame .cash : integer } ``` Attention, tous les membres sauf `cash̀` sont en lecture seule - `on_tick(game)` : Est appelé a chaque tick de logique, soit 20Hz (recommandé) - `on_frame(game)` : Est appelé a chaque frame, peut être de 0Hz à 60Hz - `on_load(game, map)` : Est appelé sur un chargement de map. ̀map` est l'id de la map chargée.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Fcalva/Mineur_Tycoon#3
No description provided.