summaryrefslogtreecommitdiffstats
path: root/Items.c4d/Sensors.c4d/FingerprintSensor.c4d
diff options
context:
space:
mode:
Diffstat (limited to 'Items.c4d/Sensors.c4d/FingerprintSensor.c4d')
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/DefCore.txt19
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Graphics.pngbin0 -> 3430 bytes
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Names.txt2
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Script.c172
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblDE.txt6
-rw-r--r--Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblUS.txt6
6 files changed, 205 insertions, 0 deletions
diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/DefCore.txt b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/DefCore.txt
new file mode 100644
index 0000000..335d9ae
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/DefCore.txt
@@ -0,0 +1,19 @@
+[DefCore]
+id=FP7I
+Name=Fingerprint sensor
+Version=4,9,5
+Category=C4D_Object|C4D_SelectMaterial|C4D_SelectKnowledge|C4D_SelectHomebase
+Width=10
+Height=4
+Offset=-5,-2
+Mass=10
+Value=5
+Components=METL=1;
+Picture=10,0,64,64
+Vertices=1
+VertexFriction=100
+Grab=2
+Collectible=1
+MaxUserSelect=10
+Rebuy=1
+NoPushEnter=1
diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Graphics.png b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Graphics.png
new file mode 100644
index 0000000..83ff04b
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Graphics.png
Binary files differ
diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Names.txt b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Names.txt
new file mode 100644
index 0000000..d251351
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Fingerabdrucksensor
+US:Fingerprint sensor
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;
+}
diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblDE.txt b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblDE.txt
new file mode 100644
index 0000000..239f4d7
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblDE.txt
@@ -0,0 +1,6 @@
+RightFinger=Richtiger Fingerabdruck
+WrongFinger=Falscher Fingerabdruck
+SetMasterFinger=Hauptfingerabdruck setzen
+AddFinger=Fingerabdruck hinzufügen
+ChangeFingers=Fingerabdrücke verwalten
+MasterFinger=Hauptfingerabdruck: %s
diff --git a/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblUS.txt b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblUS.txt
new file mode 100644
index 0000000..9f7e56f
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/FingerprintSensor.c4d/StringTblUS.txt
@@ -0,0 +1,6 @@
+RightFinger=Right fingerprint
+WrongFinger=Wrong fingerprint
+SetMasterFinger=Set master fingerprint
+AddFinger=Add fingerprint
+ChangeFingers=Manage fingerprints
+MasterFinger=Master fingerprint: %s