raze/source/games/duke/src/dukeactor.h

109 lines
2.5 KiB
C
Raw Normal View History

2020-10-17 07:14:31 +00:00
#pragma once
#include "dobject.h"
#include "build.h"
BEGIN_DUKE_NS
using DukeStatIterator = TStatIterator<DDukeActor>;
using DukeSectIterator = TSectIterator<DDukeActor>;
using DukeSpriteIterator = TSpriteIterator<DDukeActor>;
using DukeLinearSpriteIterator = TLinearSpriteIterator<DDukeActor>;
2020-10-17 07:26:52 +00:00
inline DDukeActor* player_struct::GetActor()
{
return &hittype[i];
}
inline int player_struct::GetPlayerNum()
{
return GetActor()->s->yvel;
2020-10-17 07:26:52 +00:00
}
// Refactoring helpers/intermediates
inline void changeactorstat(DDukeActor* a, int newstat)
2020-10-17 07:26:52 +00:00
{
::changespritestat(a->GetSpriteIndex(), newstat);
2020-10-17 07:26:52 +00:00
}
2021-08-27 14:38:53 +00:00
inline void changeactorsect(DDukeActor* a, int newsect)
2020-10-17 07:26:52 +00:00
{
::changespritesect(a->GetSpriteIndex(), newsect);
2020-10-17 07:26:52 +00:00
}
inline void changeactorsect(DDukeActor* a, sectortype* newsect)
{
::changespritesect(a->GetSpriteIndex(), sectnum(newsect));
}
2020-10-17 07:26:52 +00:00
inline int setsprite(DDukeActor* a, int x, int y, int z)
{
return ::setsprite(a->GetSpriteIndex(), x, y, z);
2020-10-17 07:26:52 +00:00
}
inline int setsprite(DDukeActor* a, const vec3_t& pos)
{
return ::setsprite(a->GetSpriteIndex(), pos.x, pos.y, pos.z);
2020-10-17 07:26:52 +00:00
}
// see comment for changespritestat.
inline int setsprite(int i, int x, int y, int z)
{
return ::setsprite(i, x, y, z);
}
inline int ActorToScriptIndex(DDukeActor* a)
{
if (!a) return -1;
return a->GetSpriteIndex();
2020-10-17 07:26:52 +00:00
}
inline DDukeActor* ScriptIndexToActor(int index)
{
// only allow valid actors to get through here. Everything else gets null'ed.
if (index < 0 || index >= MAXSPRITES || hittype[index].s->statnum == MAXSTATUS) return nullptr;
2020-10-17 07:26:52 +00:00
return &hittype[index];
}
DDukeActor* spawn(DDukeActor* spawner, int type);
2020-10-17 07:26:52 +00:00
inline int ldist(DDukeActor* s1, DDukeActor* s2)
{
return ldist(s1->s, s2->s);
2020-10-17 07:26:52 +00:00
}
inline int dist(DDukeActor* s1, DDukeActor* s2)
{
return dist(s1->s, s2->s);
2020-10-17 07:26:52 +00:00
}
inline int badguy(DDukeActor* pSprite)
{
return badguypic(pSprite->s->picnum);
2020-10-17 07:26:52 +00:00
}
inline int bossguy(DDukeActor* pSprite)
{
return bossguypic(pSprite->s->picnum);
2020-10-17 07:26:52 +00:00
}
// old interface versions of already changed functions
inline void deletesprite(int num)
{
deletesprite(&hittype[num]);
}
int movesprite_ex_d(DDukeActor* actor, int xchange, int ychange, int zchange, unsigned int cliptype, Collision& result);
int movesprite_ex_r(DDukeActor* actor, int xchange, int ychange, int zchange, unsigned int cliptype, Collision& result);
inline int movesprite_ex(DDukeActor* actor, int xchange, int ychange, int zchange, unsigned int cliptype, Collision& result)
{
auto f = isRR() ? movesprite_ex_r : movesprite_ex_d;
return f(actor, xchange, ychange, zchange, cliptype, result);
}
2021-11-21 08:05:58 +00:00
2021-08-27 14:38:53 +00:00
2020-10-17 07:14:31 +00:00
END_DUKE_NS