mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-16 17:21:24 +00:00
acab6d9b30
were doing some things in their destructor that needed to be done in the Destroy method. - Rewrote the interpolation code. Interpolations are no longer some objects that are separate from the rest of the engine. Instead, they are owned by the thinkers starting them. Also, polyobjects only spawn a single interpolation for each polyobject instead of a single one for each vertex. Also, different types of interpolation objects are used for different types of interpolation so that they can do some additional work if eventually needed. SVN r1018 (trunk)
77 lines
1.9 KiB
C++
77 lines
1.9 KiB
C++
#ifndef __DSECTOREFFECT_H__
|
|
#define __DSECTOREFFECT_H__
|
|
|
|
#include "dobject.h"
|
|
#include "dthinker.h"
|
|
#include "r_defs.h"
|
|
|
|
class DSectorEffect : public DThinker
|
|
{
|
|
DECLARE_CLASS (DSectorEffect, DThinker)
|
|
public:
|
|
DSectorEffect (sector_t *sector);
|
|
|
|
void Serialize (FArchive &arc);
|
|
void Destroy();
|
|
|
|
sector_t *GetSector() const { return m_Sector; }
|
|
|
|
protected:
|
|
DSectorEffect ();
|
|
sector_t *m_Sector;
|
|
};
|
|
|
|
class DMover : public DSectorEffect
|
|
{
|
|
DECLARE_CLASS (DMover, DSectorEffect)
|
|
HAS_OBJECT_POINTERS
|
|
public:
|
|
DMover (sector_t *sector);
|
|
protected:
|
|
enum EResult { ok, crushed, pastdest };
|
|
TObjPtr<DInterpolation> interpolation;
|
|
private:
|
|
bool MoveAttached(int crush, fixed_t move, int floorOrCeiling, bool resetfailed);
|
|
EResult MovePlane (fixed_t speed, fixed_t dest, int crush, int floorOrCeiling, int direction, bool hexencrush);
|
|
protected:
|
|
DMover ();
|
|
void Serialize (FArchive &arc);
|
|
void Destroy();
|
|
void StopInterpolation();
|
|
inline EResult MoveFloor (fixed_t speed, fixed_t dest, int crush, int direction, bool hexencrush)
|
|
{
|
|
return MovePlane (speed, dest, crush, 0, direction, hexencrush);
|
|
}
|
|
inline EResult MoveFloor (fixed_t speed, fixed_t dest, int direction)
|
|
{
|
|
return MovePlane (speed, dest, -1, 0, direction, false);
|
|
}
|
|
inline EResult MoveCeiling (fixed_t speed, fixed_t dest, int crush, int direction, bool hexencrush)
|
|
{
|
|
return MovePlane (speed, dest, crush, 1, direction, hexencrush);
|
|
}
|
|
inline EResult MoveCeiling (fixed_t speed, fixed_t dest, int direction)
|
|
{
|
|
return MovePlane (speed, dest, -1, 1, direction, false);
|
|
}
|
|
};
|
|
|
|
class DMovingFloor : public DMover
|
|
{
|
|
DECLARE_CLASS (DMovingFloor, DMover)
|
|
public:
|
|
DMovingFloor (sector_t *sector);
|
|
protected:
|
|
DMovingFloor ();
|
|
};
|
|
|
|
class DMovingCeiling : public DMover
|
|
{
|
|
DECLARE_CLASS (DMovingCeiling, DMover)
|
|
public:
|
|
DMovingCeiling (sector_t *sector);
|
|
protected:
|
|
DMovingCeiling ();
|
|
};
|
|
|
|
#endif //__DSECTOREFFECT_H__
|