void C4Effect::SetPropertyByS(C4String * k, const C4Value & to) { if (k >= &Strings.P[0] && k < &Strings.P[P_LAST]) { switch(k - &Strings.P[0]) { case P_Name: if (!to.getStr() || !*to.getStr()->GetCStr()) throw C4AulExecError("effect: Name has to be a nonempty string"); C4PropListNumbered::SetPropertyByS(k, to); ReAssignCallbackFunctions(); return; case P_Priority: throw C4AulExecError("effect: Priority is readonly"); case P_Interval: iInterval = to.getInt(); return; case P_CommandTarget: throw C4AulExecError("effect: CommandTarget is readonly"); case P_Target: throw C4AulExecError("effect: Target is readonly"); case P_Time: iTime = to.getInt(); return; case P_Prototype: throw new C4AulExecError("effect: Prototype is readonly"); } } C4PropListNumbered::SetPropertyByS(k, to); }
bool operator ()(const C4Value &v1, const C4Value &v2) { // sort by whatever type the values have if (v1.getStr() && v2.getStr()) return v1._getStr()->GetData() < v2._getStr()->GetData(); if (v1.CheckConversion(C4V_Int) && v2.CheckConversion(C4V_Int)) return v1._getInt() < v2._getInt(); return false; }
void C4MapScriptMatTexMask::Init(const C4Value &spec) { // Mask may be initialized by a simple string or by an array of strings, of which the effects are OR'ed const C4ValueArray *arr = spec.getArray(); if (arr) { // Init by array for (int32_t i=0; i<arr->GetSize(); ++i) { C4String *smask = arr->GetItem(i).getStr(); if (!smask) throw C4AulExecError(FormatString("MatTexMask expected string as %dth element in array.", (int)i).getData()); UnmaskSpec(smask); } } else { // Init by string C4String *smask = spec.getStr(); if (smask) UnmaskSpec(smask); else { if (spec) throw C4AulExecError("MatTexMask expected string or array of strings."); // nil defaults to everything except index zero unmasked sky_mask = std::vector<bool>(256, true); tunnel_mask = std::vector<bool>(256, true); sky_mask[0] = false; tunnel_mask[0] = false; } } }
bool C4FindObjectProcedure::Check(C4Object *pObj) { assert(pObj); if (!pObj->GetAction()) return false; C4Value v; pObj->GetAction()->GetProperty(P_Procedure, &v); return v != C4VNull && v.getStr() == procedure; }
static int32_t FnLayerGetDefaultBackgroundIndex(C4PropList * _this, const C4Value &value) { uint8_t fg; C4String* str; if ((str = value.getStr())) { if (!TexColSingle(str->GetCStr(), fg)) return -1; } else { if (!Inside(value.getInt(), 0, 255)) return -1; fg = value.getInt(); } return ::MapScript.pTexMap->DefaultBkgMatTex(fg); }
bool operator ()(const C4Value &v1, const C4Value &v2) { return v1.getStr() && v2.getStr() && v1._getStr()->GetData() < v2._getStr()->GetData(); }
bool operator ()(const C4Value &v1, const C4Value &v2) { if (v1.getStr() && v2.getStr()) return std::strcmp(v1._getStr()->GetCStr(), v2._getStr()->GetCStr()) < 0; return v2.getStr(); }