mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-13 07:31:04 +00:00
Added PitchFromMomentum, UseActorPitch and UseActorRoll to VOXELDEF. Behaves exactly like their 3D model counterparts. Hardware renderer only.
This commit is contained in:
parent
eb94f81a83
commit
351a4c9a5a
3 changed files with 26 additions and 1 deletions
|
@ -70,6 +70,9 @@ struct FVoxelDef
|
||||||
int VoxeldefIndex; // Needed by GZDoom
|
int VoxeldefIndex; // Needed by GZDoom
|
||||||
double Scale;
|
double Scale;
|
||||||
DAngle AngleOffset;// added to actor's angle to compensate for wrong-facing voxels
|
DAngle AngleOffset;// added to actor's angle to compensate for wrong-facing voxels
|
||||||
|
bool PitchFromMomentum;
|
||||||
|
bool UseActorPitch;
|
||||||
|
bool UseActorRoll;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern TDeletingArray<FVoxel *> Voxels; // used only to auto-delete voxels on exit.
|
extern TDeletingArray<FVoxel *> Voxels; // used only to auto-delete voxels on exit.
|
||||||
|
|
|
@ -390,6 +390,9 @@ void InitModels()
|
||||||
smf.skinIDs[0] = md->GetPaletteTexture();
|
smf.skinIDs[0] = md->GetPaletteTexture();
|
||||||
smf.xscale = smf.yscale = smf.zscale = VoxelDefs[i]->Scale;
|
smf.xscale = smf.yscale = smf.zscale = VoxelDefs[i]->Scale;
|
||||||
smf.angleoffset = VoxelDefs[i]->AngleOffset.Degrees;
|
smf.angleoffset = VoxelDefs[i]->AngleOffset.Degrees;
|
||||||
|
if (VoxelDefs[i]->PitchFromMomentum) smf.flags |= MDL_PITCHFROMMOMENTUM;
|
||||||
|
if (VoxelDefs[i]->UseActorPitch) smf.flags |= MDL_USEACTORPITCH;
|
||||||
|
if (VoxelDefs[i]->UseActorRoll) smf.flags |= MDL_USEACTORROLL;
|
||||||
if (VoxelDefs[i]->PlacedSpin != 0)
|
if (VoxelDefs[i]->PlacedSpin != 0)
|
||||||
{
|
{
|
||||||
smf.yrotate = 1.f;
|
smf.yrotate = 1.f;
|
||||||
|
|
|
@ -53,7 +53,8 @@
|
||||||
struct VoxelOptions
|
struct VoxelOptions
|
||||||
{
|
{
|
||||||
VoxelOptions()
|
VoxelOptions()
|
||||||
: DroppedSpin(0), PlacedSpin(0), Scale(1.), AngleOffset(90.), OverridePalette(false)
|
: DroppedSpin(0), PlacedSpin(0), Scale(1.), AngleOffset(90.), OverridePalette(false),
|
||||||
|
PitchFromMomentum(false), UseActorPitch(false), UseActorRoll(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int DroppedSpin;
|
int DroppedSpin;
|
||||||
|
@ -61,6 +62,9 @@ struct VoxelOptions
|
||||||
double Scale;
|
double Scale;
|
||||||
DAngle AngleOffset;
|
DAngle AngleOffset;
|
||||||
bool OverridePalette;
|
bool OverridePalette;
|
||||||
|
bool PitchFromMomentum;
|
||||||
|
bool UseActorPitch;
|
||||||
|
bool UseActorRoll;
|
||||||
};
|
};
|
||||||
|
|
||||||
void VOX_AddVoxel(int sprnum, int frame, FVoxelDef* def);
|
void VOX_AddVoxel(int sprnum, int frame, FVoxelDef* def);
|
||||||
|
@ -180,6 +184,18 @@ static void VOX_ReadOptions(FScanner &sc, VoxelOptions &opts)
|
||||||
{
|
{
|
||||||
opts.OverridePalette = true;
|
opts.OverridePalette = true;
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("pitchfrommomentum"))
|
||||||
|
{
|
||||||
|
opts.PitchFromMomentum = true;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("useactorpitch"))
|
||||||
|
{
|
||||||
|
opts.UseActorPitch = true;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("useactorroll"))
|
||||||
|
{
|
||||||
|
opts.UseActorRoll = true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptMessage("Unknown voxel option '%s'\n", sc.String);
|
sc.ScriptMessage("Unknown voxel option '%s'\n", sc.String);
|
||||||
|
@ -249,6 +265,9 @@ void R_InitVoxels()
|
||||||
def->DroppedSpin = opts.DroppedSpin;
|
def->DroppedSpin = opts.DroppedSpin;
|
||||||
def->PlacedSpin = opts.PlacedSpin;
|
def->PlacedSpin = opts.PlacedSpin;
|
||||||
def->AngleOffset = opts.AngleOffset;
|
def->AngleOffset = opts.AngleOffset;
|
||||||
|
def->PitchFromMomentum = opts.PitchFromMomentum;
|
||||||
|
def->UseActorPitch = opts.UseActorPitch;
|
||||||
|
def->UseActorRoll = opts.UseActorRoll;
|
||||||
VoxelDefs.Push(def);
|
VoxelDefs.Push(def);
|
||||||
|
|
||||||
for (unsigned i = 0; i < vsprites.Size(); ++i)
|
for (unsigned i = 0; i < vsprites.Size(); ++i)
|
||||||
|
|
Loading…
Reference in a new issue