From 9b5d0a3ddf41e686439dcda1edfe11eee51c3b07 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Thu, 5 Jan 2017 16:19:56 +0100 Subject: Initial --- DTScenUtils.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 DTScenUtils.c (limited to 'DTScenUtils.c') diff --git a/DTScenUtils.c b/DTScenUtils.c new file mode 100644 index 0000000..be55cfe --- /dev/null +++ b/DTScenUtils.c @@ -0,0 +1,91 @@ +#strict 2 + +static const ObjStr_Skip = -1; +static const ObjStr_Defaults = 0; +static const ObjStr_NoDefault = 1; +static const ObjStr_NoLocals = 2; +static const ObjStr_NoContents = 4; +static const ObjStr_ModeParts = 1; // NoDefault + +global func LogObjects(array criteria, bool inline, bool& first) +{ + for(var obj in FindObjects(criteria)) + { + var str = GetObjectString(obj); + if(str) Log((inline && ((first && " %s") || ", %s")) || " %s;", str); + first = false; + } +} + +global func GetObjects(bool inline) +{ + var first = true, exp = Find_And(Find_Not(Find_Func("IsHUD")), Find_Not(Find_Func("IsLight")), Find_NoContainer()); + if(inline) Log("["); + LogObjects(Find_And(Find_Category(C4D_Rule | C4D_Goal | C4D_Environment), exp), inline, first); // goals, rules and environment first + LogObjects(Find_And(Find_Not(Find_Category(C4D_Rule | C4D_Goal | C4D_Environment)), exp), inline, first); // and the rest + if(inline) Log("]"); +} + +global func GetObjectString(obj) +{ + var extra, extray, custom, customStr = ""; + extra = ""; + extray = 0; + custom = obj->~CustomObjectString(customStr); + if(custom == ObjStr_Skip) + { + return; + } + else if((custom & ObjStr_ModeParts) != ObjStr_NoDefault) + { + if(obj->GetR() != 0) extra = Format("%s->SetRX(%d)", extra, obj->GetR()); + if(obj->GetCon() != 100) + { + extra = Format("%s->SetConX(%d)", extra, obj->GetCon()); + extray = -GetDefCoreVal("Offset", "DefCore", GetID(obj), 1) * (100-obj->GetCon()) / 100; + } + if(obj->GetDir()) + { + extra = Format("%s->SetDirX(%d)", extra, obj->GetDir()); + } + if(!(custom & ObjStr_NoLocals)) for(var iFunc = 0; iFunc < 2; ++iFunc) + { + for(var i = 0; i < GetLocalCount(obj, iFunc); ++i) + { + var key = GetLocalByIndex(i, obj, iFunc); + var val; + if(GetType(key) == C4V_Int || GetType(key) == C4V_Any) val = Local(key, obj); + else if(GetType(key) == C4V_String) val = LocalN(key, obj); + if(val == 0) continue; + extra = Format("%s->SetLocalX(%s, %s)", extra, Serialize(key), Serialize(val)); + } + } + if(!(custom & ObjStr_NoContents)) for(var content in FindObjects(Find_Container(obj))) + { + extra = Format("%s->EnterX(%s)", extra, GetObjectString(content)); + } + } + if(GetCategory(obj) & C4D_StaticBack) + { + extray -= GetDefOffset(GetID(obj), 1) * 2 + GetDefHeight(GetID(obj)); + } + return Format("CreateObjectX(%i, %d, %d, %d)%s%s", + GetID(obj), + GetX(obj), + GetY(obj)/* - GetDefCoreVal("Offset", "DefCore", GetID(obj), 1) - extray*/, + GetOwner(obj), + extra, customStr); +} + +global func CreateObjectX(id id, int x, int y, int owner) { return CreateObject(id, x, y, owner)->SetPositionX(x, y); } +global func SetPositionX(int x, int y) { this->SetPosition(x, y); return this; } +global func SetDirX(int dir) { this->SetDir(dir); return this; } +global func SetRX(int r) { this->SetR(r); return this; } +global func SetConX(int con) { this->SetCon(con); return this; } +global func EnterX(object obj) { Enter(this, obj); return this; } +global func SetLocalX(key, val) +{ + if(GetType(key) == C4V_Int || GetType(key) == C4V_Any) Local(key, this) = val; + else LocalN(key) = val; + return this; +} -- cgit v1.2.3-54-g00ecf