mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-17 09:41:21 +00:00
64 lines
1.9 KiB
C
64 lines
1.9 KiB
C
|
#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);
|
||
|
|
||
|
#endif
|