Yume Project 3.0
Touhou-inspired Danmaku game made in C only
Chargement...
Recherche...
Aucune correspondance
Référence du fichier looseLaser.h
#include "systems/timer.h"
#include "ecs/component.h"
#include <raymath.h>
#include "components/sprite.h"
#include "components/common.h"

Aller au code source de ce fichier.

Classes

struct  Loose_laser
 Représente un loose laser — un filament composé de plusieurs nodes. Plus de détails...

Macros

#define MAX_LOOSE_NODES   1000
#define DURATION_ETERNAL   20000
#define MAX_LOOSE_LASER   282

Fonctions

bool loose_laser_update (Pool *pool, Loose_laser *laser)
 Met à jour un loose laser pour une frame.
void loose_lasers_update_all (Pool *pool)
 Met à jour tous les loose lasers de la Pool.
Entity loose_laser_create (Pool *pool, int x, int y, float speed, float length, float width, int duration, Color color)
 Crée et attache un Loose_laser à une nouvelle entité.
Entity node_create (Pool *pool, float x, float y, float radius)
 Crée un node (entité) pour un loose laser.
void Loose_laser_destroy (Pool *pool, Entity id)
 Détruit un Loose_laser et libère ses ressources.
void draw_loose_laser (Loose_laser *laser, PositionManager *positionManager)
 Dessine un Loose_laser.
void draw_all_loose_lasers (Loose_laserManager *looseManager, PositionManager *positionManager)
 Dessine tous les loose lasers actifs du manager.

Documentation des macros

◆ DURATION_ETERNAL

#define DURATION_ETERNAL   20000

◆ MAX_LOOSE_LASER

#define MAX_LOOSE_LASER   282

◆ MAX_LOOSE_NODES

#define MAX_LOOSE_NODES   1000

Documentation des fonctions

◆ draw_all_loose_lasers()

void draw_all_loose_lasers ( Loose_laserManager * looseManager,
PositionManager * positionManager )

Dessine tous les loose lasers actifs du manager.

Paramètres
looseManagerPointeur vers le Loose_laserManager.
positionManagerPointeur vers le PositionManager.

◆ draw_loose_laser()

void draw_loose_laser ( Loose_laser * laser,
PositionManager * positionManager )

Dessine un Loose_laser.

Ne fait rien si moins de deux nodes sont présents. Parcourt les segments, calcule les normales et dessine des triangles et des cercles pour lisser les jonctions.

Paramètres
laserPointeur vers le Loose_laser à afficher.
positionManagerPointeur vers le PositionManager pour consulter les positions des nodes.

◆ loose_laser_create()

Entity loose_laser_create ( Pool * pool,
int x,
int y,
float speed,
float length,
float width,
int duration,
Color color )

Crée et attache un Loose_laser à une nouvelle entité.

  • Alloue un tableau de MAX_LOOSE_NODES pour stocker les nodes.
  • Crée la tête du laser en spawnant une Bullet ennemie.
  • Initialise le timer, la longueur cible, la largeur et la couleur.
  • Ajoute le composant Loose_laser à l'entité et assigne le tag ENT_LOOSE_LASER.
Paramètres
poolpool courante (toutes les données de l'ECS)
xPosition X initiale de la tête.
yPosition Y initiale de la tête.
speedVitesse initiale de la tête (transmise au spawn de la bullet).
lengthLongueur cible du laser.
widthÉpaisseur du laser.
durationDurée de vie (unités du timer utilisée par le système).
colorCouleur du laser pour le rendu.
Renvoie
L'identifiant de l'entité créée contenant le Loose_laser.

◆ Loose_laser_destroy()

void Loose_laser_destroy ( Pool * pool,
Entity id )

Détruit un Loose_laser et libère ses ressources.

Tue toutes les entités correspondant aux nodes, libère le tableau de nodes et retire le composant du manager.

Paramètres
poolpool courante (toutes les données de l'ECS)
idIdentifiant de l'entité contenant le Loose_laser.

◆ loose_laser_update()

bool loose_laser_update ( Pool * pool,
Loose_laser * laser )

Met à jour un loose laser pour une frame.

  • Ajoute un nouveau node si la capacité le permet.
  • Décale les positions des nodes pour conserver l'historique.
  • Tronque la chaîne si la longueur actuelle dépasse looseTargetLength.
  • Incrémente le timer et indique si le laser doit persister.
Paramètres
poolpool courante (toutes les données de l'ECS)
laserPointeur vers le Loose_laser à mettre à jour.
Renvoie
true si le laser doit continuer d'exister; false s'il doit être supprimé.

◆ loose_lasers_update_all()

void loose_lasers_update_all ( Pool * pool)

Met à jour tous les loose lasers de la Pool.

Parcourt le manager de Loose_laser, appelle loose_laser_update pour chaque instance et marque les entités à supprimer si nécessaire.

Paramètres
poolpool courante (toutes les données de l'ECS)

◆ node_create()

Entity node_create ( Pool * pool,
float x,
float y,
float radius )

Crée un node (entité) pour un loose laser.

Ajoute une Position et une Collision_circle à l'entité nouvellement créée.

Paramètres
poolpool courante (toutes les données de l'ECS)
xPosition X initiale du node.
yPosition Y initiale du node.
radiusRayon du cercle de collision.
Renvoie
Identifiant de l'entité node créée.