From fa5403dccd986022b2a849e2078f043c3225348a Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 2 Jan 2017 19:33:41 +0100 Subject: Initial --- .../Sensors.c4d/FingerprintSensor.c4d/Script.c | 172 +++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c (limited to 'Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c') diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c new file mode 100644 index 0000000..58a673b --- /dev/null +++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c @@ -0,0 +1,172 @@ +#strict 2 +#include SN7I + +local masterFinger, fingers; + +func Init() +{ + fingers = []; +} + +func CleanupFingers() +{ + ArrayEraseItem(fingers, 0, true); +} + +func Triggers() { return [["$RightFinger$"], ["$WrongFinger$"]];} + +func ControlThrow(object caller) +{ + if(GetLength(fingers) > 0) + { + var success = IsKnownFinger(caller); + ShowSuccess(success); + Trigger(!success, caller); + } + return ClearCom(caller); +} + +func ShowSuccess(bool success, object caller) +{ + if(!success) + { + Sound("Error"); + CreateParticle("PSpark", -2, -2, 0, 0, 50, RGB(192, 0, 0)); + } + else + { + CreateParticle("PSpark", -2, -2, 0, 0, 50, RGB(0, 192, 0)); + } +} + +func ControlThrowDouble() { return ControlThrow(...); } + +func EntranceCallback() { return "ControlThrow"; } + +func SetupCondition(object caller) +{ + return GetLength(fingers) == 0 || IsKnownFinger(caller); +} + +func IsKnownFinger(object finger) +{ + return GetIndexOf(finger, fingers) != -1; +} + +func Setup(object caller, int& menuIndex) +{ + if(!CheckMasterFinger()) + { + AddMenuItem("$SetMasterFinger$", "SetMasterFinger", RSR1, caller, 0, caller, 0, C4MN_Add_ForceNoDesc); + ++menuIndex; + } + if(caller == masterFinger) + { + if(FindObject2(AddFingerCondition())) + { + AddMenuItem("$AddFinger$", "AddFingers", RSR1, caller, 0, caller, 0, C4MN_Add_ForceNoDesc); + ++menuIndex; + } + if(GetLength(fingers) > 0) + { + AddMenuItem("$ChangeFingers$", "ChangeFingers", RSR1, caller, 0, caller, 0, C4MN_Add_ForceNoDesc); + ++menuIndex; + } + } + return true; +} + +func SetMasterFinger(id id, object caller) +{ + if(!CheckMasterFinger()) + { + masterFinger = caller; + if(!IsKnownFinger(caller)) + { + fingers[GetLength(fingers)] = caller; + } + } +} + +func AddFingerCondition() +{ + return Find_And(Find_OCF(OCF_CrewMember), Find_ActionTarget(this), Find_Procedure("PUSH"), Find_Not(Find_Func("FP7I_IsKnownFinger", this))); +} + +func GetFingerList(array fingers, bool showMaster) +{ + var ret = CreateArray(GetLength(fingers)); + for(var i = 0; i < GetLength(fingers); ++i) + { + var obj = fingers[i]; + ret[i] = [obj, Format("%s (%s)", GetName(obj), GetPlayerName(GetOwner(obj)))]; + if(showMaster && obj == masterFinger) + { + ret[i][1] = Format("$MasterFinger$", ret[i][1]); + } + } + return ret; +} + +func AddFingers(id id, object caller) +{ + return caller->~CreateSelectionMenu("AddFinger", GetFingerList(FindObjects(AddFingerCondition())), GetID(), "$AddFinger$", this); +} + +func AddFinger(id id, object finger, bool right) +{ + if(!IsKnownFinger(finger)) + { + fingers[GetLength(fingers)] = finger; + } + if(right) + { + masterFinger = finger; + } +} + +func ChangeFingers(id id, object caller) +{ + selectCaller = caller; + return caller->~CreateSelectionMenu("ChangeFinger", GetFingerList(fingers, true), GetID(), "$ChangeFingers$", this); +} + +func ChangeFinger(id id, object finger, bool right) +{ + if(right) + { + masterFinger = finger; + } + else + { + var i = GetIndexOf(finger, fingers); + if(i != -1) + { + ArrayErase(fingers, i); + if(finger != masterFinger) + { + ChangeFingers(0, selectCaller); + SelectMenuItem(i - 1, selectCaller); + SelectMenuItem(i, selectCaller); + } + else + { + masterFinger = 0; + } + } + } +} + +global func FP7I_IsKnownFinger(object sensor) +{ + return sensor && sensor->IsKnownFinger(this); +} + +func CheckMasterFinger() +{ + if(masterFinger && !GetAlive(masterFinger)) + { + masterFinger = 0; + } + return !!masterFinger; +} -- cgit v1.2.3-54-g00ecf