mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-30 05:47:57 +03:00
added Enable, Disable, GetDisabled
This commit is contained in:
parent
4ecb63203b
commit
592fa84e2d
22 changed files with 310 additions and 12 deletions
|
@ -346,7 +346,17 @@ namespace Compiler
|
|||
|
||||
mNextOperand = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (keyword==Scanner::K_getdisabled)
|
||||
{
|
||||
mTokenLoc = loc;
|
||||
|
||||
Generator::getDisabled (mCode);
|
||||
mOperands.push_back ('l');
|
||||
|
||||
mNextOperand = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// check for custom extensions
|
||||
|
|
|
@ -284,6 +284,22 @@ namespace
|
|||
{
|
||||
code.push_back (Compiler::Generator::segment5 (50));
|
||||
}
|
||||
|
||||
void opEnable (Compiler::Generator::CodeContainer& code)
|
||||
{
|
||||
code.push_back (Compiler::Generator::segment5 (51));
|
||||
}
|
||||
|
||||
void opDisable (Compiler::Generator::CodeContainer& code)
|
||||
{
|
||||
code.push_back (Compiler::Generator::segment5 (52));
|
||||
}
|
||||
|
||||
void opGetDisabled (Compiler::Generator::CodeContainer& code)
|
||||
{
|
||||
code.push_back (Compiler::Generator::segment5 (53));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Compiler
|
||||
|
@ -685,6 +701,21 @@ namespace Compiler
|
|||
{
|
||||
opGetSecondsPassed (code);
|
||||
}
|
||||
|
||||
void getDisabled (CodeContainer& code)
|
||||
{
|
||||
opGetDisabled (code);
|
||||
}
|
||||
|
||||
void enable (CodeContainer& code)
|
||||
{
|
||||
opEnable (code);
|
||||
}
|
||||
|
||||
void disable (CodeContainer& code)
|
||||
{
|
||||
opDisable (code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -110,6 +110,12 @@ namespace Compiler
|
|||
void getDistance (CodeContainer& code);
|
||||
|
||||
void getSecondsPassed (CodeContainer& code);
|
||||
|
||||
void getDisabled (CodeContainer& code);
|
||||
|
||||
void enable (CodeContainer& code);
|
||||
|
||||
void disable (CodeContainer& code);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -162,7 +162,19 @@ namespace Compiler
|
|||
mExprParser.parseArguments ("c", scanner, mCode, true);
|
||||
Generator::stopScript (mCode);
|
||||
mState = EndState;
|
||||
return true;
|
||||
return true;
|
||||
|
||||
case Scanner::K_enable:
|
||||
|
||||
Generator::enable (mCode);
|
||||
mState = EndState;
|
||||
return true;
|
||||
|
||||
case Scanner::K_disable:
|
||||
|
||||
Generator::disable (mCode);
|
||||
mState = EndState;
|
||||
return true;
|
||||
}
|
||||
|
||||
// check for custom extensions
|
||||
|
|
|
@ -247,6 +247,7 @@ namespace Compiler
|
|||
"startscript", "stopscript", "scriptrunning",
|
||||
"getdistance",
|
||||
"getsecondspassed",
|
||||
"enable", "disable", "getdisabled",
|
||||
0
|
||||
};
|
||||
|
||||
|
|
|
@ -53,7 +53,8 @@ namespace Compiler
|
|||
K_random,
|
||||
K_startscript, K_stopscript, K_scriptrunning,
|
||||
K_getdistance,
|
||||
K_getsecondspassed
|
||||
K_getsecondspassed,
|
||||
K_enable, K_disable, K_getdisabled
|
||||
};
|
||||
|
||||
enum special
|
||||
|
|
|
@ -55,7 +55,13 @@ namespace Interpreter
|
|||
|
||||
virtual float getDistance (const std::string& name) const = 0;
|
||||
|
||||
virtual float getSecondsPassed() const = 0;
|
||||
virtual float getSecondsPassed() const = 0;
|
||||
|
||||
virtual bool isDisabled() const = 0;
|
||||
|
||||
virtual void enable() = 0;
|
||||
|
||||
virtual void disable() = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -109,6 +109,9 @@ op 47: start script stack[0] and pop
|
|||
op 48: stop script stack[0] and pop
|
||||
op 49: replace stack[0] with distance between implicit reference and a reference of ID stack[0]
|
||||
op 50: push frame duration (float)
|
||||
opcodes 51-33554431 unused
|
||||
op 51: enable implicit reference
|
||||
op 52: disable implicit reference
|
||||
op 53: push 1, if implicit reference is disabled, 0 else
|
||||
opcodes 54-33554431 unused
|
||||
opcodes 33554432-67108863 reserved for extensions
|
||||
|
||||
|
|
|
@ -89,6 +89,9 @@ namespace Interpreter
|
|||
interpreter.installSegment5 (38, new OpMenuMode);
|
||||
interpreter.installSegment5 (45, new OpRandom);
|
||||
interpreter.installSegment5 (50, new OpGetSecondsPassed);
|
||||
interpreter.installSegment5 (51, new OpEnable);
|
||||
interpreter.installSegment5 (52, new OpDisable);
|
||||
interpreter.installSegment5 (53, new OpGetDisabled);
|
||||
|
||||
// script control
|
||||
interpreter.installSegment5 (46, new OpScriptRunning);
|
||||
|
|
|
@ -130,6 +130,37 @@ namespace Interpreter
|
|||
runtime.push (*reinterpret_cast<Type_Data *> (&duration));
|
||||
}
|
||||
};
|
||||
|
||||
class OpEnable : public Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Runtime& runtime)
|
||||
{
|
||||
runtime.getContext().enable();
|
||||
}
|
||||
};
|
||||
|
||||
class OpDisable : public Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Runtime& runtime)
|
||||
{
|
||||
runtime.getContext().disable();
|
||||
}
|
||||
};
|
||||
|
||||
class OpGetDisabled : public Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Runtime& runtime)
|
||||
{
|
||||
runtime.push (runtime.getContext().isDisabled());
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue