From 1f280cb06cc579c2a98d215e202dc0642fb40a3d Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 2 Jan 2017 19:34:09 +0100 Subject: Initial --- Items.c4d/Tubekit.c4d/DefCore.txt | 19 ++ Items.c4d/Tubekit.c4d/Graphics.png | Bin 0 -> 4993 bytes Items.c4d/Tubekit.c4d/Names.txt | 2 + Items.c4d/Tubekit.c4d/Script.c | 85 +++++++ Items.c4d/Tubekit.c4d/StringTblDE.txt | 7 + Items.c4d/Tubekit.c4d/StringTblUS.txt | 7 + Items.c4d/Tubekit.c4d/Tube.c4d/ActMap.txt | 4 + Items.c4d/Tubekit.c4d/Tube.c4d/DefCore.txt | 13 ++ Items.c4d/Tubekit.c4d/Tube.c4d/DescDE.txt | 1 + Items.c4d/Tubekit.c4d/Tube.c4d/DescUS.txt | 1 + Items.c4d/Tubekit.c4d/Tube.c4d/Graphics.png | Bin 0 -> 1217 bytes Items.c4d/Tubekit.c4d/Tube.c4d/Names.txt | 2 + Items.c4d/Tubekit.c4d/Tube.c4d/Script.c | 305 +++++++++++++++++++++++++ Items.c4d/Tubekit.c4d/Tube.c4d/StringTblDE.txt | 1 + Items.c4d/Tubekit.c4d/Tube.c4d/StringTblUS.txt | 1 + 15 files changed, 448 insertions(+) create mode 100644 Items.c4d/Tubekit.c4d/DefCore.txt create mode 100644 Items.c4d/Tubekit.c4d/Graphics.png create mode 100644 Items.c4d/Tubekit.c4d/Names.txt create mode 100644 Items.c4d/Tubekit.c4d/Script.c create mode 100644 Items.c4d/Tubekit.c4d/StringTblDE.txt create mode 100644 Items.c4d/Tubekit.c4d/StringTblUS.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/ActMap.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/DefCore.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/DescDE.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/DescUS.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/Graphics.png create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/Names.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/Script.c create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/StringTblDE.txt create mode 100644 Items.c4d/Tubekit.c4d/Tube.c4d/StringTblUS.txt (limited to 'Items.c4d/Tubekit.c4d') diff --git a/Items.c4d/Tubekit.c4d/DefCore.txt b/Items.c4d/Tubekit.c4d/DefCore.txt new file mode 100644 index 0000000..b65a2b3 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/DefCore.txt @@ -0,0 +1,19 @@ +[DefCore] +id=TK7I +Version=4,9,8 +Name=Tubekit +Category=C4D_Object|C4D_SelectMaterial|C4D_SelectKnowledge|C4D_SelectHomebase +MaxUserSelect=10 +Width=8 +Height=6 +Offset=-4,-3 +Vertices=5 +VertexX=0,-4,-4,4,4 +VertexY=1,-3,2,-3,2 +VertexFriction=50,50,50,50,50 +Value=10 +Mass=15 +Components=METL=1 +Picture=8,0,80,60 +Rebuy=1 +Collectible=1 diff --git a/Items.c4d/Tubekit.c4d/Graphics.png b/Items.c4d/Tubekit.c4d/Graphics.png new file mode 100644 index 0000000..b24ab47 Binary files /dev/null and b/Items.c4d/Tubekit.c4d/Graphics.png differ diff --git a/Items.c4d/Tubekit.c4d/Names.txt b/Items.c4d/Tubekit.c4d/Names.txt new file mode 100644 index 0000000..7dd4557 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Postrohrbausatz +US:Tubekit diff --git a/Items.c4d/Tubekit.c4d/Script.c b/Items.c4d/Tubekit.c4d/Script.c new file mode 100644 index 0000000..25df4db --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Script.c @@ -0,0 +1,85 @@ +#strict 2 + +static const TK7I_Tube = TU7I; + +func Find_TubeTarget() +{ + return [C4FO_Func, "IsTubeTarget"]; +} + +func Activate(object caller) +{ + var line = FindObject2(Find_Tube(this)), lineEnd; + if(line) + { + lineEnd = line->GetLineEnd(this); + } + var targets = FindObjects(Find_AtRect(0, -9, 1, 18), Find_TubeTarget()); + if(GetLength(targets) > 1) + { + caller->~CreateSelectionMenu("ConnectTarget", targets, GetID(), "$SelectTarget$", this); + } + else if(GetLength(targets) == 1) + { + ConnectTarget(0, targets[0]); + } + else + { + PlayerMessage(GetController(caller), "$TxtNoNewLine$", this); + } + return true; +} + +func ConnectTarget(id id, object target) +{ + var line = FindObject2(Find_Line(TK7I_Tube, this)), lineEnd; + if(line) + { + lineEnd = line->GetLineEnd(this); + if(lineEnd == target) + { + PlayerMessage(GetController(Contained()), "$TxtLineRemoval$", Contained(), GetName(line)); + RemoveObject(line); + return true; + } + } + else + { + line = CreateObject(TK7I_Tube); + CreateObject(TK7I_Tube)->Complement(line); + } + + if(line->GetActionTarget(0) == lineEnd) + { + line->SetActionTargets(lineEnd || this, target); + } + else + { + line->SetActionTargets(target, lineEnd || this); + } + + PlayerMessage(GetController(Contained()), "$TxtConnect$", Contained(), GetName(line), GetName(target)); + if(lineEnd) + { + RemoveObject(); + } + return true; +} + +func AcceptsObject(object obj) +{ + return true; +} + +func ReceiveObject(object obj, bool noReturn) +{ + obj->Enter(this); + Exit(obj); + if(Contained()) + { + Put(Contained(), obj); + } + return true; +} + +func IsAnvilProduct() { return true; } diff --git a/Items.c4d/Tubekit.c4d/StringTblDE.txt b/Items.c4d/Tubekit.c4d/StringTblDE.txt new file mode 100644 index 0000000..d700dc6 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/StringTblDE.txt @@ -0,0 +1,7 @@ +TxtConnectline=Rohr anschließen +TxtNoNewLine=Neues Rohr hier|nicht möglich. +TxtLineRemoval=%s abgenommen. +TxtNewLine=Konstruktion|%s. +TxtNoConnectType=%s kann nicht an|%s angeschlossen werden. +TxtConnect=%s an|%s angeschlossen +SelectTarget=Rohrziel wählen diff --git a/Items.c4d/Tubekit.c4d/StringTblUS.txt b/Items.c4d/Tubekit.c4d/StringTblUS.txt new file mode 100644 index 0000000..3258152 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/StringTblUS.txt @@ -0,0 +1,7 @@ +TxtConnectline=Connect tube +TxtNoNewLine=Cannot create a new tube here. +TxtLineRemoval=%s disconnected. +TxtNewLine=New|%s +TxtNoConnectType=%s cannot be connected|to %s. +TxtConnect=%s connected|to %s +SelectTarget=Select tube target diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/ActMap.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/ActMap.txt new file mode 100644 index 0000000..2a84bf1 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/ActMap.txt @@ -0,0 +1,4 @@ +[Action] +Name=Connect +Procedure=CONNECT +FacetBase=1 diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/DefCore.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/DefCore.txt new file mode 100644 index 0000000..a312dcf --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/DefCore.txt @@ -0,0 +1,13 @@ +[DefCore] +id=TU7I +Version=4,9,8 +Name=Tube +Category=C4D_StaticBack +Width=1 +Height=1 +Vertices=2 +Value=10 +Mass=15 +Components=METL=3 +Picture=0,0,36,32 +Line=C4D_LineColored diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/DescDE.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/DescDE.txt new file mode 100644 index 0000000..9c1fb62 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/DescDE.txt @@ -0,0 +1 @@ +Abfluß für Pumpen. diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/DescUS.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/DescUS.txt new file mode 100644 index 0000000..75008ce --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/DescUS.txt @@ -0,0 +1 @@ +Drain for pumps. diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/Graphics.png b/Items.c4d/Tubekit.c4d/Tube.c4d/Graphics.png new file mode 100644 index 0000000..8b4683b Binary files /dev/null and b/Items.c4d/Tubekit.c4d/Tube.c4d/Graphics.png differ diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/Names.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/Names.txt new file mode 100644 index 0000000..cab7bf6 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Postrohr +US:Mail tube diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/Script.c b/Items.c4d/Tubekit.c4d/Tube.c4d/Script.c new file mode 100644 index 0000000..02d3796 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/Script.c @@ -0,0 +1,305 @@ +#strict 2 + +static TU7I_Speed; +static const TU7I_NoCallback = -1; + +func Initialize() +{ + SetAction("Connect"); + + SetVertex(0, 0, GetX()); + SetVertex(0, 1, GetY()); + + SetVertex(1, 0, GetX()); + SetVertex(1, 1, GetY()); + + SetPosition(0, 0, this); + + Local(0) = 2; + Local(1) = 2; + + SetClrModulation(RGBa(255, 255, 255, 64)); +} + +func Complement(object line) +{ + if(line) + { + SetAction("Idle"); + SetObjectOrder(this, line, true); + return AddEffect("ComplementLine", line, 1, 1, this); + } +} + +func LineBreak(bool noMsg) +{ + if(!noMsg) + { + var source = GetActionTarget(0); + var target = GetActionTarget(1); + + if(source && GetID(source) == TK7I) + { + Message("$TxtLinebroke$", source); + } + else + { + Message("$TxtLinebroke$", target); + } + } +} + +func KitID() +{ + return TK7I; +} + +func CanSendObject(object sender, object obj) +{ + var lineEnd = GetLineEnd(sender); + return lineEnd && lineEnd->~AcceptsObject(obj, 0, this); +} + +func CanRetrieveObject(object receiver, id type, bool allowProduction, object excludeOrigin, object sender) +{ + if(ObjectOrigin(receiver) == excludeOrigin) + { + return false; + } + var lineEnd = sender || GetLineEnd(receiver); + return lineEnd && lineEnd->~HasObject(type, allowProduction, this, excludeOrigin); +} + +func SendObject(object sender, object obj, arriveCallback, bool noReturn, object realTarget) +{ + var lineEnd = GetLineEnd(sender); + if(obj != lineEnd && (noReturn || (realTarget || lineEnd)->~AcceptsObject(obj, 0, this))) + { + var box = CreateObject(TC7I, 0, 0, GetOwner(obj)); + SetObjectOrder(this, box, true); + if(!obj->Enter(box)) + { + return false; + } + AddEffect("SendObject", box, 1, 1, this, 0, sender, noReturn, arriveCallback); + return true; + } + return false; +} + +func RetrieveObject(object receiver, id type, arriveCallback, object excludeOrigin, failCallback, object realTarget) +{ + var lineEnd = GetLineEnd(receiver); + return lineEnd && CanRetrieveObject(receiver, type, true, excludeOrigin, lineEnd) && lineEnd->~RetrieveObject(this, type, arriveCallback, excludeOrigin, failCallback, realTarget); +} + +func GetRetrievableObjects(object receiver) +{ + var lineEnd = GetLineEnd(receiver); + return lineEnd && lineEnd->~GetRetrievableObjects(this, ...); +} + +func GetLineDistancePoint(int distance, int startVertex, int dir, int& x, int& y, int& r) +{ + if(!dir) + { + return; + } + var max = GetVertexNum() - 1, vertexDistance, vXC, vYC, vXN, vYN; + var rOff = 3 + (dir < 0); + for(var vertex = startVertex; Inside(vertex + dir, 0, max); vertex += dir) + { + vXC = GetVertex(vertex, VTX_X); + vYC = GetVertex(vertex, VTX_Y); + vXN = GetVertex(vertex + dir, VTX_X); + vYN = GetVertex(vertex + dir, VTX_Y); + var dist = Distance(vXC, vYC, vXN, vYN); + if(dist > distance) + { + var angle = Angle(vXC, vYC, vXN, vYN); + x = vXC + ((vXN - vXC) * distance + dist / 2) / dist - Cos(angle, rOff) * dir; + y = vYC + ((vYN - vYC) * distance + dist / 2) / dist - Sin(angle, rOff) * dir; + r = angle - 90; + return false; + } + else + { + distance -= dist; + } + } + x = vXN; + y = vYN; + return true; +} + +func FxSendObjectStart(object target, int effectNumber, int temp, object sender, bool noReturn, arriveCallback) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = (GetActionTarget(1) == sender); + EffectVar(1, target, effectNumber) = noReturn; + + EffectCall(target, effectNumber, "Timer"); + EffectVar(2, target, effectNumber) = AddEffect("SendObjectHelper", this, 1, 0, this, 0, target); + EffectVar(3, target, effectNumber) = arriveCallback; + } +} + +func FxSendObjectHelperStart(object target, int effectNumber, int temp, object box) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = box; + } +} + +func FxSendObjectHelperStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp) + { + var box = EffectVar(0, target, effectNumber); + if(box) + { + RemoveObject(box, true); + } + } +} + +func FxSendObjectTimer(object target, int effectNumber, int effectTime) +{ + var startTarget = EffectVar(0, target, effectNumber); + var dir = -(startTarget * 2 - 1); + var startVertex = 0; + if(startTarget) + { + startVertex = GetVertexNum() - 1; + } + var x, y, r, end; + r = target->GetR(); + end = GetLineDistancePoint(effectTime * (TU7I_Speed || 20), startVertex, dir, x, y, r); + + target->SetPosition(x, y); + target->SetR(r); + target->SetRDir(0); + + if(end) + { + var lineEnd = GetActionTarget(!startTarget); + var noReturn = EffectVar(1, target, effectNumber); + var arriveCallback = EffectVar(3, target, effectNumber); + var cnt = target->ContentsCount(); + for(var i = cnt - 1; i >= 0; --i) + { + var obj = target->Contents(i); + var ret; + if(!(ret = lineEnd->~ReceiveObject(obj, noReturn, arriveCallback, this)) && !noReturn) + { + SendObject(lineEnd, obj, 0, true); + } + else + { + if(arriveCallback && ret != TU7I_NoCallback) + { + lineEnd->CallA(arriveCallback, [obj, this, lineEnd], true); + } + } + } + return FX_Execute_Kill; + } +} + +func FxSendObjectStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp) + { + RemoveObject(target, true); + RemoveEffect(0, this, EffectVar(2, target, effectNumber)); + } +} + +func FxComplementLineStart(object target, int effectNumber, int temp) +{ + if(!temp) + { + return EffectCall(target, effectNumber, "Timer"); + } +} + +func FxComplementLineTimer(object target, int effectNumber) +{ + var i; + var angle, prevAngle, midAngle; + var cnt = target->GetVertexNum(); + for(i = 0; i < cnt; ++i) + { + var x = target->GetVertex(i, VTX_X); + var y = target->GetVertex(i, VTX_Y); + + if(i < cnt - 1) + { + var nX = target->GetVertex(i + 1, VTX_X); + var nY = target->GetVertex(i + 1, VTX_Y); + angle = Angle(x, y, nX, nY); + } + + if(i == 0) + { + midAngle = angle; + } + else if(i == cnt - 1) + { + midAngle = prevAngle; + } + else + { + midAngle = (angle + prevAngle) / 2; + if(Abs(angle - prevAngle) > 180) + { + midAngle += 180; + } + } + + if(GetVertexNum() <= i) + { + AddVertex(x, y); + } + else + { + SetVertex(i, VTX_X, x - Cos(midAngle, 7)); + SetVertex(i, VTX_Y, y - Sin(midAngle, 7)); + } + prevAngle = angle; + } + for(var j = GetVertexNum() - 1; j >= i; --j) + { + RemoveVertex(j); + } +} + +func FxComplementLineStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp) + { + RemoveObject(); + } +} + +func ObjectOrigin(object other) +{ + return GetLineEnd(other)->~ObjectOrigin(); +} + +func HasObjectOrigin(object origin) +{ + return GetLineEnd()->~ObjectOrigin() == origin || GetLineEnd(0, true)->~ObjectOrigin() == origin; +} + +func IsTube() +{ + return true; +} + +func FactoryLoad(object other) +{ + return GetLineEnd(other)->~FactoryLoad(); +} diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblDE.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblDE.txt new file mode 100644 index 0000000..107e9e9 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblDE.txt @@ -0,0 +1 @@ +TxtLinebroke=Rohr gebrochen diff --git a/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblUS.txt b/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblUS.txt new file mode 100644 index 0000000..cf1be94 --- /dev/null +++ b/Items.c4d/Tubekit.c4d/Tube.c4d/StringTblUS.txt @@ -0,0 +1 @@ +TxtLinebroke=Tube broke -- cgit v1.2.3-54-g00ecf