Add forced variable syntax in PDT.
This commit is contained in:
@@ -17,6 +17,7 @@ namespace Cryville.Crtr {
|
||||
static readonly int _var_true = IdentifierManager.SharedInstance.Request("true");
|
||||
static readonly int _var_false = IdentifierManager.SharedInstance.Request("false");
|
||||
protected override void GetVariable(int name, out int type, out byte[] value) {
|
||||
protected override void GetVariable(int name, bool forced, out int type, out byte[] value) {
|
||||
if (name == _var_w) { LoadNum(ChartPlayer.hitRect.width); type = PdtInternalType.Number; value = _numbuf; }
|
||||
else if (name == _var_h) { LoadNum(ChartPlayer.hitRect.height); type = PdtInternalType.Number; value = _numbuf; }
|
||||
else if (name == _var_true) { LoadNum(1); type = PdtInternalType.Number; value = _numbuf; }
|
||||
@@ -44,6 +45,10 @@ namespace Cryville.Crtr {
|
||||
if (result != null) {
|
||||
result.Get(out type, out value);
|
||||
}
|
||||
else if (forced) {
|
||||
type = PdtInternalType.Error;
|
||||
value = _nullbuf;
|
||||
}
|
||||
else {
|
||||
type = PdtInternalType.Undefined;
|
||||
LoadIdent(name);
|
||||
@@ -84,6 +89,7 @@ namespace Cryville.Crtr {
|
||||
static readonly int _colop_and = IdentifierManager.SharedInstance.Request("&");
|
||||
static readonly int _colop_or = IdentifierManager.SharedInstance.Request("|");
|
||||
protected override bool Collapse(int name, PdtVariableMemory param) {
|
||||
if (param.Type == PdtInternalType.Error) throw new ArgumentException("Error");
|
||||
if (name == _colop_and) return param.Type == PdtInternalType.Number && param.AsNumber() <= 0;
|
||||
else if (name == _colop_or) return param.Type != PdtInternalType.Number || param.AsNumber() > 0;
|
||||
else throw new KeyNotFoundException(string.Format("Undefined collapse operator {0}", IdentifierManager.SharedInstance.Retrieve(name)));
|
||||
|
Reference in New Issue
Block a user