/*=============================================================================
        Name    : hs.h
        Purpose : hyperspace rendering & management routines

Created 7/10/1998 by khent
Copyright Relic Entertainment, Inc.  All rights reserved.
=============================================================================*/

#ifndef _HS_H
#define _HS_H

#include "spaceobj.h"

void hsStart(Ship* ship, real32 cliptDelta, bool into, bool displayEffect);
void hsContinue(Ship* ship, bool displayEffect);
void hsEnd(Ship* ship, bool displayEffect);
void hsUpdate(Ship* ship);
void hsFinish(Ship* ship);
bool hsShouldDisplayEffect(Ship* ship);

#define HS_STATIC_ACTIVE        1
#define HS_STATIC_COLLAPSING    2
#define HS_STATIC_EXPANDING     3

#define HSGATE_LABEL_LEN        16

typedef struct hsStaticGate
{
    bool   active;
    vector position;
    real32 rotation;
    sdword state;
    sdword counter;
    Derelict *derelict;
    char label[HSGATE_LABEL_LEN];
} hsStaticGate;

// for hyperspace gates
void hsDerelictDied(Derelict *derelict);
void hsDerelictTakesDamage(Derelict *derelict);

void hsStaticInit(sdword nVectors); //level start (init structs)
void hsStaticReset(void);   //level reset (clear structs)
void hsStaticDestroy(hvector*); //destroy a gate
sdword hsSizeofStaticData(void);    //return size of static hyperspace gate data
void hsGetStaticData(sdword* size, ubyte* data); //retrieve static gate data (for saving)
void hsSetStaticData(sdword size, ubyte* data); //set static gate data (for loading)
void hsStaticRender(void);  //render all static gates
void hsNoGate(bool state);

void SaveHyperspaceGates(void);
void LoadHyperspaceGates(void);

Derelict *GetHyperspaceGateFromVector(vector *compare);

#endif
