Files
starruler-linux/source/game/design/projectiles.h
T
2018-07-17 14:15:37 +02:00

86 lines
1.4 KiB
C++

#pragma once
#include "vec3.h"
#include "threads.h"
#include <stddef.h>
namespace scene {
class Node;
};
struct MissileData {
vec3d pos;
double lastUpdate;
vec3f vel;
double aliveUntil;
};
class Effector;
class Object;
class SaveFile;
enum ProjType {
PT_Bullet,
PT_Beam,
PT_Missile
};
enum ProjMode {
PM_Normal,
PM_OnlyHitsTarget,
PM_PassthroughInvalid
};
struct Projectile {
//NOTE: Velocity is reused to specify a beam's target
vec3d position, velocity;
double lastTick;
vec3d* impact;
const Effector* effector;
Object* source, *target, *lastImpact;
scene::Node* graphics;
union {
threads::SharedData<bool>* endNotice;
threads::SharedData<MissileData>* missileData;
};
float lifetime;
float scale;
//radians per second of turning
float tracking;
//efficiency of the subsystem
float efficiency;
//recovery time in which nothing can be hit
float recover;
ProjType type;
ProjMode mode;
//Advances projectile and performs collision
//Returns true if the projectile is dead
bool tick(double time);
Projectile(ProjType Type);
~Projectile();
static Projectile* load(SaveFile& file);
void save(SaveFile& file);
void* operator new(size_t size);
void operator delete(void*);
};
void registerProjectile(Projectile* proj);
void initProjectiles();
void stopProjectiles();
void saveProjectiles(SaveFile& file);
void loadProjectiles(SaveFile& file);
void pauseProjectiles();
void resumeProjectiles();