mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-03-10 11:11:51 +00:00
Add WorldOffset field
Adjusts the thing's 3D position on render side. This allows for adjusting a thing's visual position without impacting their hitbox. # Conflicts: # src/playsim/p_mobj.cpp
This commit is contained in:
parent
6b7ef697be
commit
a98c1efc26
6 changed files with 11 additions and 6 deletions
|
@ -1049,6 +1049,7 @@ public:
|
||||||
DVector3 OldRenderPos;
|
DVector3 OldRenderPos;
|
||||||
DVector3 Vel;
|
DVector3 Vel;
|
||||||
DVector2 SpriteOffset;
|
DVector2 SpriteOffset;
|
||||||
|
DVector3 WorldOffset;
|
||||||
double Speed;
|
double Speed;
|
||||||
double FloatSpeed;
|
double FloatSpeed;
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,8 @@ void AActor::Serialize(FSerializer &arc)
|
||||||
A("friction", Friction)
|
A("friction", Friction)
|
||||||
A("SpriteOffset", SpriteOffset)
|
A("SpriteOffset", SpriteOffset)
|
||||||
("viewpos", ViewPos)
|
("viewpos", ViewPos)
|
||||||
A("userlights", UserLights);
|
A("userlights", UserLights)
|
||||||
|
A("WorldOffset", WorldOffset);
|
||||||
|
|
||||||
SerializeTerrain(arc, "floorterrain", floorterrain, &def->floorterrain);
|
SerializeTerrain(arc, "floorterrain", floorterrain, &def->floorterrain);
|
||||||
SerializeArgs(arc, "args", args, def->args, special);
|
SerializeArgs(arc, "args", args, def->args, special);
|
||||||
|
|
|
@ -797,9 +797,9 @@ void HWSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t
|
||||||
bottomclip = rendersector->PortalBlocksMovement(sector_t::floor) ? -LARGE_VALUE : rendersector->GetPortalPlaneZ(sector_t::floor);
|
bottomclip = rendersector->PortalBlocksMovement(sector_t::floor) ? -LARGE_VALUE : rendersector->GetPortalPlaneZ(sector_t::floor);
|
||||||
|
|
||||||
uint32_t spritetype = (thing->renderflags & RF_SPRITETYPEMASK);
|
uint32_t spritetype = (thing->renderflags & RF_SPRITETYPEMASK);
|
||||||
x = thingpos.X;
|
x = thingpos.X + thing->WorldOffset.X;
|
||||||
z = thingpos.Z;
|
z = thingpos.Z + thing->WorldOffset.Z;
|
||||||
y = thingpos.Y;
|
y = thingpos.Y + thing->WorldOffset.Y;
|
||||||
if (spritetype == RF_FACESPRITE) z -= thing->Floorclip; // wall and flat sprites are to be considered di->Level-> geometry so this may not apply.
|
if (spritetype == RF_FACESPRITE) z -= thing->Floorclip; // wall and flat sprites are to be considered di->Level-> geometry so this may not apply.
|
||||||
|
|
||||||
// snap shadow Z to the floor
|
// snap shadow Z to the floor
|
||||||
|
|
|
@ -1027,6 +1027,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
// The X offsetting (SpriteOffset.X) is performed in r_sprite.cpp, in RenderSprite::Project().
|
// The X offsetting (SpriteOffset.X) is performed in r_sprite.cpp, in RenderSprite::Project().
|
||||||
sprite.pos = thing->InterpolatedPosition(Thread->Viewport->viewpoint.TicFrac);
|
sprite.pos = thing->InterpolatedPosition(Thread->Viewport->viewpoint.TicFrac);
|
||||||
|
sprite.pos += thing->WorldOffset;
|
||||||
sprite.pos.Z += thing->GetBobOffset(Thread->Viewport->viewpoint.TicFrac) - thing->SpriteOffset.Y;
|
sprite.pos.Z += thing->GetBobOffset(Thread->Viewport->viewpoint.TicFrac) - thing->SpriteOffset.Y;
|
||||||
sprite.spritenum = thing->sprite;
|
sprite.spritenum = thing->sprite;
|
||||||
sprite.tex = nullptr;
|
sprite.tex = nullptr;
|
||||||
|
|
|
@ -1851,6 +1851,7 @@ DEFINE_FIELD_NAMED(AActor, __Pos.X, x)
|
||||||
DEFINE_FIELD_NAMED(AActor, __Pos.Y, y)
|
DEFINE_FIELD_NAMED(AActor, __Pos.Y, y)
|
||||||
DEFINE_FIELD_NAMED(AActor, __Pos.Z, z)
|
DEFINE_FIELD_NAMED(AActor, __Pos.Z, z)
|
||||||
DEFINE_FIELD(AActor, SpriteOffset)
|
DEFINE_FIELD(AActor, SpriteOffset)
|
||||||
|
DEFINE_FIELD(AActor, WorldOffset)
|
||||||
DEFINE_FIELD(AActor, Prev)
|
DEFINE_FIELD(AActor, Prev)
|
||||||
DEFINE_FIELD(AActor, SpriteAngle)
|
DEFINE_FIELD(AActor, SpriteAngle)
|
||||||
DEFINE_FIELD(AActor, SpriteRotation)
|
DEFINE_FIELD(AActor, SpriteRotation)
|
||||||
|
|
|
@ -100,6 +100,7 @@ class Actor : Thinker native
|
||||||
native vector3 Prev;
|
native vector3 Prev;
|
||||||
native uint ThruBits;
|
native uint ThruBits;
|
||||||
native vector2 SpriteOffset;
|
native vector2 SpriteOffset;
|
||||||
|
native vector3 WorldOffset;
|
||||||
native double spriteAngle;
|
native double spriteAngle;
|
||||||
native double spriteRotation;
|
native double spriteRotation;
|
||||||
native float VisibleStartAngle;
|
native float VisibleStartAngle;
|
||||||
|
|
Loading…
Reference in a new issue