#ifndef JNR_LASER_TURRET_H #define JNR_LASER_TURRET_H #include "engine/entity.h" #include "engine/camera.h" #include "engine/tilemap.h" /* ═══════════════════════════════════════════════════ * LASER TURRET — Hazard that charges up a visible * indicator beam, then fires a sustained laser for * several seconds. Two variants: * - Fixed direction (placed facing left/right) * - Tracking (slowly rotates toward the player * during idle/charge, locks on fire) * ═══════════════════════════════════════════════════ */ #define LASER_WIDTH 14 #define LASER_HEIGHT 14 #define LASER_CHARGE_TIME 1.5f /* seconds to charge up */ #define LASER_FIRE_TIME 2.5f /* seconds beam stays active */ #define LASER_COOLDOWN_TIME 2.0f /* seconds before next cycle */ #define LASER_TRACK_SPEED 1.5f /* radians/s tracking rate */ #define LASER_DAMAGE 1 #define LASER_DAMAGE_CD 0.5f /* seconds between damage ticks */ #define LASER_HEALTH 3 typedef enum LaserState { LASER_IDLE, LASER_CHARGING, LASER_FIRING, LASER_COOLDOWN, } LaserState; typedef struct LaserTurretData { LaserState state; float timer; /* countdown for current state */ float aim_angle; /* current aim angle (radians) */ float damage_cd; /* cooldown between damage ticks */ bool tracking; /* true = slowly follows player */ float beam_end_x; /* computed beam endpoint (world) */ float beam_end_y; } LaserTurretData; void laser_turret_register(EntityManager *em); Entity *laser_turret_spawn(EntityManager *em, Vec2 pos); Entity *laser_turret_spawn_tracking(EntityManager *em, Vec2 pos); #endif /* JNR_LASER_TURRET_H */