2008-03-21 17:35:49 +00:00
|
|
|
#ifndef R_INTERPOLATE_H
|
|
|
|
#define R_INTERPOLATE_H
|
|
|
|
|
|
|
|
#include "doomtype.h"
|
|
|
|
|
|
|
|
// BUILD stuff for interpolating between frames, but modified (rather a lot)
|
|
|
|
#define INTERPOLATION_BUCKETS 107
|
|
|
|
|
|
|
|
|
|
|
|
class FArchive;
|
|
|
|
|
|
|
|
enum EInterpType
|
|
|
|
{
|
|
|
|
INTERP_SectorFloor, // Pass a sector_t *
|
|
|
|
INTERP_SectorCeiling, // Pass a sector_t *
|
|
|
|
INTERP_Vertex, // Pass a vertex_t *
|
|
|
|
INTERP_FloorPanning, // Pass a sector_t *
|
|
|
|
INTERP_CeilingPanning, // Pass a sector_t *
|
|
|
|
INTERP_WallPanning_Top, // Pass a side_t *
|
|
|
|
INTERP_WallPanning_Mid,
|
|
|
|
INTERP_WallPanning_Bottom,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct FActiveInterpolation
|
|
|
|
{
|
|
|
|
FActiveInterpolation *Next;
|
|
|
|
void *Address;
|
|
|
|
EInterpType Type;
|
|
|
|
|
|
|
|
friend FArchive &operator << (FArchive &arc, FActiveInterpolation *&interp);
|
|
|
|
|
|
|
|
static int CountInterpolations ();
|
|
|
|
static int CountInterpolations (int *usedbuckets, int *minbucketfill, int *maxbucketfill);
|
|
|
|
|
|
|
|
private:
|
|
|
|
fixed_t oldipos[2], bakipos[2];
|
|
|
|
|
|
|
|
void CopyInterpToOld();
|
|
|
|
void CopyBakToInterp();
|
|
|
|
void DoAnInterpolation(fixed_t smoothratio);
|
|
|
|
|
|
|
|
static size_t HashKey(EInterpType type, void *interptr);
|
|
|
|
static FActiveInterpolation *FindInterpolation(EInterpType, void *interptr, FActiveInterpolation **&interp_p);
|
|
|
|
|
|
|
|
friend void updateinterpolations();
|
|
|
|
friend void setinterpolation(EInterpType, void *interptr, bool dolinks);
|
|
|
|
friend void stopinterpolation(EInterpType, void *interptr, bool dolinks);
|
|
|
|
friend void dointerpolations(fixed_t smoothratio);
|
|
|
|
friend void restoreinterpolations();
|
|
|
|
friend void clearinterpolations();
|
|
|
|
friend void SerializeInterpolations(FArchive &arc);
|
|
|
|
|
|
|
|
static FActiveInterpolation *curiposhash[INTERPOLATION_BUCKETS];
|
|
|
|
};
|
|
|
|
|
|
|
|
void updateinterpolations();
|
|
|
|
void setinterpolation(EInterpType, void *interptr, bool dolinks = true);
|
|
|
|
void stopinterpolation(EInterpType, void *interptr, bool dolinks = true);
|
|
|
|
void dointerpolations(fixed_t smoothratio);
|
|
|
|
void restoreinterpolations();
|
|
|
|
void clearinterpolations();
|
|
|
|
void SerializeInterpolations(FArchive &arc);
|
|
|
|
|
2008-03-27 04:25:52 +00:00
|
|
|
#endif
|
|
|
|
|