1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-10 21:40:15 +00:00

Implement PcForce1stPerson, PcForce3rdPerson, PcGet3rdPerson (Bug #2078)

This commit is contained in:
scrawl 2014-12-11 20:57:25 +01:00
parent d955017079
commit be16f1d0a5
6 changed files with 47 additions and 1 deletions

View File

@ -387,6 +387,7 @@ namespace MWBase
virtual bool isOnGround(const MWWorld::Ptr &ptr) const = 0;
virtual void togglePOV() = 0;
virtual bool isFirstPerson() const = 0;
virtual void togglePreviewMode(bool enable) = 0;
virtual bool toggleVanityMode(bool enable) = 0;
virtual void allowVanityMode(bool allow) = 0;

View File

@ -433,5 +433,8 @@ op 0x20002c4-0x20002db: ModMagicEffect
op 0x20002dc-0x20002f3: ModMagicEffect, explicit
op 0x20002f4: ResetActors
op 0x20002f5: ToggleWorld
op 0x20002f6: PCForce1stPerson
op 0x20002f7: PCForce3rdPerson
op 0x20002f8: PCGet3rdPerson
opcodes 0x20002f6-0x3ffffff unused
opcodes 0x20002f9-0x3ffffff unused

View File

@ -312,6 +312,35 @@ namespace MWScript
}
};
class OpPcForce1stPerson : public Interpreter::Opcode0
{
public:
virtual void execute (Interpreter::Runtime& runtime)
{
if (!MWBase::Environment::get().getWorld()->isFirstPerson())
MWBase::Environment::get().getWorld()->togglePOV();
}
};
class OpPcForce3rdPerson : public Interpreter::Opcode0
{
virtual void execute (Interpreter::Runtime& runtime)
{
if (MWBase::Environment::get().getWorld()->isFirstPerson())
MWBase::Environment::get().getWorld()->togglePOV();
}
};
class OpPcGet3rdPerson : public Interpreter::Opcode0
{
public:
virtual void execute(Interpreter::Runtime& runtime)
{
runtime.push(!MWBase::Environment::get().getWorld()->isFirstPerson());
}
};
class OpToggleVanityMode : public Interpreter::Opcode0
{
static bool sActivate;
@ -1002,6 +1031,9 @@ namespace MWScript
interpreter.installSegment5 (Compiler::Misc::opcodeToggleWater, new OpToggleWater);
interpreter.installSegment5 (Compiler::Misc::opcodeToggleWorld, new OpToggleWorld);
interpreter.installSegment5 (Compiler::Misc::opcodeDontSaveObject, new OpDontSaveObject);
interpreter.installSegment5 (Compiler::Misc::opcodePcForce1stPerson, new OpPcForce1stPerson);
interpreter.installSegment5 (Compiler::Misc::opcodePcForce3rdPerson, new OpPcForce3rdPerson);
interpreter.installSegment5 (Compiler::Misc::opcodePcGet3rdPerson, new OpPcGet3rdPerson);
interpreter.installSegment5 (Compiler::Misc::opcodeToggleVanityMode, new OpToggleVanityMode);
interpreter.installSegment5 (Compiler::Misc::opcodeGetPcSleep, new OpGetPcSleep);
interpreter.installSegment5 (Compiler::Misc::opcodeGetPcJumping, new OpGetPcJumping);

View File

@ -451,6 +451,10 @@ namespace MWWorld
mRendering->togglePOV();
}
virtual bool isFirstPerson() const {
return mRendering->getCamera()->isFirstPerson();
}
virtual void togglePreviewMode(bool enable) {
mRendering->togglePreviewMode(enable);
}

View File

@ -261,6 +261,9 @@ namespace Compiler
extensions.registerInstruction ("togglepathgrid", "", opcodeTogglePathgrid);
extensions.registerInstruction ("tpg", "", opcodeTogglePathgrid);
extensions.registerInstruction ("dontsaveobject", "", opcodeDontSaveObject);
extensions.registerInstruction ("pcforce1stperson", "", opcodePcForce1stPerson);
extensions.registerInstruction ("pcforce3rdperson", "", opcodePcForce3rdPerson);
extensions.registerFunction ("pcget3rdperson", 'l', "", opcodePcGet3rdPerson);
extensions.registerInstruction ("togglevanitymode", "", opcodeToggleVanityMode);
extensions.registerInstruction ("tvm", "", opcodeToggleVanityMode);
extensions.registerFunction ("getpcsleep", 'l', "", opcodeGetPcSleep);

View File

@ -215,6 +215,9 @@ namespace Compiler
const int opcodeToggleWorld = 0x20002f5;
const int opcodeTogglePathgrid = 0x2000146;
const int opcodeDontSaveObject = 0x2000153;
const int opcodePcForce1stPerson = 0x20002f6;
const int opcodePcForce3rdPerson = 0x20002f7;
const int opcodePcGet3rdPerson = 0x20002f8;
const int opcodeToggleVanityMode = 0x2000174;
const int opcodeGetPcSleep = 0x200019f;
const int opcodeGetPcJumping = 0x2000233;