diff --git a/Assets/Scripts/coa4u/ActionsBase/ActionInstant.cs b/Assets/scripts/coa4u/ActionsBase/ActionInstant.cs
similarity index 100%
rename from Assets/Scripts/coa4u/ActionsBase/ActionInstant.cs
rename to Assets/scripts/coa4u/ActionsBase/ActionInstant.cs
diff --git a/Assets/Scripts/coa4u/ActionsInstant/ActionSelectRoamingPoint.cs b/Assets/scripts/coa4u/ActionsInstant/ActionSelectRoamingPoint.cs
similarity index 100%
rename from Assets/Scripts/coa4u/ActionsInstant/ActionSelectRoamingPoint.cs
rename to Assets/scripts/coa4u/ActionsInstant/ActionSelectRoamingPoint.cs
diff --git a/Assets/Scripts/coa4u/ActionsInterval/ActionMoveForward.cs b/Assets/scripts/coa4u/ActionsInterval/ActionMoveForward.cs
similarity index 100%
rename from Assets/Scripts/coa4u/ActionsInterval/ActionMoveForward.cs
rename to Assets/scripts/coa4u/ActionsInterval/ActionMoveForward.cs
diff --git a/Assets/scripts/coa4uext/Actions.meta b/Assets/scripts/coa4uext/Actions.meta
new file mode 100755
index 0000000..e24e9f7
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 47f23d1678e988842ba4d66cdde3c4f8
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Assets/scripts/coa4uext/Actions/ActionHolder.cs b/Assets/scripts/coa4uext/Actions/ActionHolder.cs
new file mode 100755
index 0000000..17ad294
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionHolder.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ ///
+ /// Creates the and starts the given action instance at Start. If you're using calcers for parameters, they will be also calculated at start.
+ ///
+ class ActionHolder : ActionInstant
+ where T : ActionInstant
+ {
+ protected T action;
+ protected object[] args;
+
+ public ActionHolder(params object[] args) : base()
+ {
+ this.args = args;
+ }
+
+ public override void Start()
+ {
+ if (target == null)
+ throw new Exception("Can start the action only after it's atached to the actor");
+ object[] nargs = new object[args.Length];
+ for (int i = 0; i < args.Length; i++)
+ {
+ if (args[i] is CalcerFloat)
+ {
+ nargs[i] = ((CalcerFloat)args[i]).value;
+ }
+ else if (args[i] is CalcerVector)
+ {
+ nargs[i] = ((CalcerVector)args[i]).value;
+ }
+ else
+ {
+ nargs[i] = args[i];
+ }
+ }
+
+ action = (T)Activator.CreateInstance(typeof(T), nargs);
+ action.SetActor(target);
+ action.locks = locks;
+ action.Start();
+ duration = action.duration;
+ if (action.running)
+ running = true;
+ }
+
+ public override void StepTimer(float dt)
+ {
+ if (target == null)
+ throw new Exception("Can update the action only after it's atached to the actor");
+ action.StepTimer(dt);
+ if (!action.running)
+ {
+ dtr = action.dtr;
+ Stop();
+ }
+ }
+
+ public override void Stop()
+ {
+ if (target == null)
+ throw new Exception("Can stop the action only after it's atached to the actor");
+ if (action.running)
+ action.Stop();
+ running = false;
+ }
+
+ public override ActionInstant Clone()
+ {
+ return new ActionHolder(args);
+ }
+ }
+}
diff --git a/Assets/scripts/coa4uext/Actions/ActionHolder.cs.meta b/Assets/scripts/coa4uext/Actions/ActionHolder.cs.meta
new file mode 100755
index 0000000..de19000
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionHolder.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bbefa1d122cfc4c4e99bd1a82f65569d
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Actions/ActionIf.cs b/Assets/scripts/coa4uext/Actions/ActionIf.cs
new file mode 100755
index 0000000..88a5bff
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionIf.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ class ActionIf : ActionInterval
+ {
+ protected ActionInstant action;
+ protected Predicate predicate;
+ protected bool started;
+
+ public ActionIf(Predicate targetPredicate, ActionInstant targetAction)
+ : base(0)
+ {
+ action = targetAction;
+ predicate = targetPredicate;
+ }
+
+ public override ActionInstant Clone()
+ {
+ return new ActionIf(predicate, action);
+ }
+
+ public override ActionInstant Reverse()
+ {
+ return new ActionIf(predicate, action.Reverse());
+ }
+
+ public override void Start()
+ {
+ base.Start();
+ if (predicate.check())
+ {
+ started = true;
+ action.SetActor(target);
+ action.Start();
+ duration = action.duration;
+ }
+ else
+ {
+ running = false;
+ }
+ }
+
+ public override void StepTimer(float dt)
+ {
+ if (!started)
+ return;
+ dt *= timeScale;
+ if (action.running)
+ action.StepTimer(dt);
+ if (!action.running)
+ {
+ Stop();
+ dtr = action.dtr;
+ }
+ }
+
+ public override void Stop()
+ {
+ base.Stop();
+ action.Stop();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Actions/ActionIf.cs.meta b/Assets/scripts/coa4uext/Actions/ActionIf.cs.meta
new file mode 100755
index 0000000..a6f8e6a
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionIf.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a45c0e16e46018a40813f228d30baa43
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Actions/ActionPlayer.cs b/Assets/scripts/coa4uext/Actions/ActionPlayer.cs
new file mode 100755
index 0000000..19d5470
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionPlayer.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ ///
+ /// Plays the action on another actor;
+ ///
+ class ActionPlayer : ActionInterval
+ {
+ protected ActionInstant action;
+ protected Actor actor;
+
+ public ActionPlayer(ActionInstant targetAction, Actor targetActor)
+ : base(0)
+ {
+ action = targetAction;
+ actor = targetActor;
+ }
+
+ public override ActionInstant Clone()
+ {
+ return new ActionPlayer(action, actor);
+ }
+
+ public override void Start()
+ {
+ base.Start();
+ actor.AttachAction(action);
+ if (!action.running)
+ running = false;
+ }
+
+ public override void StepTimer(float dt)
+ {
+ if (target == null)
+ throw new Exception("Can update the action only after it's atached to the actor");
+ action.StepTimer(dt);
+ if (!action.running)
+ {
+ dtr = action.dtr;
+ Stop();
+ }
+ }
+
+ public override void Step(float dt)
+ {
+ if (!action.running)
+ running = false;
+ }
+ }
+}
diff --git a/Assets/scripts/coa4uext/Actions/ActionPlayer.cs.meta b/Assets/scripts/coa4uext/Actions/ActionPlayer.cs.meta
new file mode 100755
index 0000000..791e8be
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionPlayer.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2d0fe551d8f6b114cb3bfc83d880377a
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs b/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs
new file mode 100755
index 0000000..740e635
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ class ActionSwitchState : ActionInstant
+ {
+ string stateName;
+ int stateIndex;
+
+ public ActionSwitchState(int targetIndex)
+ : base()
+ {
+ stateIndex = targetIndex;
+ }
+
+ public ActionSwitchState(string targetName)
+ : base()
+ {
+ stateName = targetName;
+ }
+
+ public override void Start()
+ {
+ base.Start();
+ if (!(target is SeqActor))
+ {
+ throw new Exception("Target is not capable of switching states.");
+ }
+ if (stateIndex != null)
+ {
+ ((SeqActor)target).SetState(stateIndex);
+ }
+ else
+ {
+ ((SeqActor)target).SetState(stateName);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs.meta b/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs.meta
new file mode 100755
index 0000000..10c4e7a
--- /dev/null
+++ b/Assets/scripts/coa4uext/Actions/ActionSwitchState.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 70a08a1fe8836f0419bd1b03f05a906a
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers.meta b/Assets/scripts/coa4uext/Calcers.meta
new file mode 100755
index 0000000..74fe0aa
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 5a9b2c3311eddf04c861c0f8a385a3a0
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/Calcer.cs b/Assets/scripts/coa4uext/Calcers/Calcer.cs
new file mode 100755
index 0000000..63195b9
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/Calcer.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public abstract class Calcer
+ {
+ }
+
+ public abstract class Calcer : Calcer
+ {
+ public abstract T value {get;}
+ }
+}
diff --git a/Assets/scripts/coa4uext/Calcers/Calcer.cs.meta b/Assets/scripts/coa4uext/Calcers/Calcer.cs.meta
new file mode 100755
index 0000000..35c1b1f
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/Calcer.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1c50d149e0d2dab4bb3a6114abdeb7e8
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs b/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs
new file mode 100755
index 0000000..2150b04
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerDirection : CalcerVector
+ {
+ Actor selfActor;
+ Actor targetActor;
+ Transform selfTransform;
+ Transform targetTransform;
+
+ public CalcerDirection(Actor self, Actor target)
+ : base()
+ {
+ selfActor = self;
+ targetActor = target;
+ }
+
+ public CalcerDirection(Transform self, Transform target)
+ : base()
+ {
+ selfTransform = self;
+ targetTransform = target;
+ }
+
+ public override Vector3 value
+ {
+ get
+ {
+ if (targetTransform != null)
+ {
+ return Quaternion.LookRotation(targetTransform.position - selfTransform.position).eulerAngles;
+ }
+ else
+ {
+ return Quaternion.LookRotation(targetActor.transformCached.position - selfActor.transformCached.position).eulerAngles;
+ }
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs.meta
new file mode 100755
index 0000000..1923608
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerDirection.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0a0a80ede5ea3dc42a372d76d2004cd0
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs b/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs
new file mode 100755
index 0000000..6aa8635
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerFloat : Calcer
+ {
+ private float internalValue;
+
+ public CalcerFloat()
+ {
+ }
+
+ public CalcerFloat(float value)
+ {
+ internalValue = value;
+ }
+
+ public CalcerFloat(int value)
+ {
+ internalValue = (float)value;
+ }
+
+ public CalcerFloat(double value)
+ {
+ internalValue = (float)value;
+ }
+
+ public override float value
+ {
+ get
+ {
+ return internalValue;
+ }
+ }
+
+ public static implicit operator CalcerFloat(float val)
+ {
+ return new CalcerFloat(val);
+ }
+
+ public static implicit operator float(CalcerFloat calc)
+ {
+ return calc.value;
+ }
+
+ public static CalcerFloat operator +(CalcerFloat first, CalcerFloat second)
+ {
+ return new CalcerFloatCalc(first, second, CalcerFloatCalc.Operation.Add);
+ }
+
+ public static CalcerFloat operator -(CalcerFloat first, CalcerFloat second)
+ {
+ return new CalcerFloatCalc(first, second, CalcerFloatCalc.Operation.Sub);
+ }
+
+ public static CalcerFloat operator *(CalcerFloat first, CalcerFloat second)
+ {
+ return new CalcerFloatCalc(first, second, CalcerFloatCalc.Operation.Mul);
+ }
+
+ public static CalcerFloat operator /(CalcerFloat first, CalcerFloat second)
+ {
+ return new CalcerFloatCalc(first, second, CalcerFloatCalc.Operation.Div);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs.meta
new file mode 100755
index 0000000..39158e0
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerFloat.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e93dc2f49487544fa3a9b1468d66779
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs b/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs
new file mode 100755
index 0000000..52fabca
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerFloatCalc : CalcerFloat
+ {
+ public enum Operation
+ {
+ Add,
+ Sub,
+ Mul,
+ Div
+ }
+
+ private Operation operation;
+ private CalcerFloat first;
+ private CalcerFloat second;
+
+ public CalcerFloatCalc(CalcerFloat first, CalcerFloat second, Operation operation = Operation.Add)
+ {
+ this.first = first;
+ this.second = second;
+ this.operation = operation;
+ }
+
+ public float value
+ {
+ get
+ {
+ switch (operation)
+ {
+ case Operation.Add:
+ return first.value + second.value;
+ case Operation.Sub:
+ return first.value - second.value;
+ case Operation.Mul:
+ return first.value * second.value;
+ case Operation.Div:
+ return first.value / second.value;
+ default:
+ throw new Exception("Operation not found.");
+ }
+ }
+ }
+ }
+}
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs.meta
new file mode 100755
index 0000000..adb408e
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerFloatCalc.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 45cbf8512a210f942a10b844f2000826
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs b/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs
new file mode 100755
index 0000000..4eb986d
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerPosition : CalcerVector
+ {
+ Actor targetActor;
+ Transform targetTransform;
+
+ public CalcerPosition(Actor target)
+ : base()
+ {
+ this.targetActor = target;
+ }
+
+ public CalcerPosition(Transform target)
+ : base()
+ {
+ this.targetTransform = target;
+ }
+
+ public override Vector3 value
+ {
+ get
+ {
+ if (targetTransform != null)
+ return (Vector3)targetTransform.position;
+ else
+ return (Vector3)targetActor.transformCached.position;
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs.meta
new file mode 100755
index 0000000..3448fb1
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerPosition.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6f377903d22e64e409c946c5ec777bb9
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs b/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs
new file mode 100755
index 0000000..01e3af4
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerRandomDirection : CalcerVector
+ {
+ Axises axises;
+
+ public CalcerRandomDirection(Axises axises)
+ {
+ this.axises = axises;
+ }
+
+ public override Vector3 value
+ {
+ get
+ {
+ float x = UnityEngine.Random.Range(-360.0F, 360.0F);
+ float y = UnityEngine.Random.Range(-360.0F, 360.0F);
+ float z = UnityEngine.Random.Range(-360.0F, 360.0F);
+ switch (axises)
+ {
+ case Axises.x:
+ return new Vector3(x, 0, 0);
+ case Axises.y:
+ return new Vector3(0, y, 0);
+ case Axises.z:
+ return new Vector3(0, 0, z);
+ case Axises.xy:
+ return new Vector3(x, y, 0);
+ case Axises.xz:
+ return new Vector3(x, 0, z);
+ case Axises.yz:
+ return new Vector3(0, y, z);
+ case Axises.xyz:
+ return new Vector3(x, y, z);
+ default:
+ return Vector3.zero;
+ }
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs.meta
new file mode 100755
index 0000000..e4c6f2d
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerRandomDirection.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ad17ef81ba6b9944bf5aa283e4be908
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerVector.cs b/Assets/scripts/coa4uext/Calcers/CalcerVector.cs
new file mode 100755
index 0000000..511e0c8
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerVector.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerVector : Calcer
+ {
+ private Vector3 internalValue;
+ private int dimensions;
+
+ public CalcerVector()
+ {
+ }
+
+ public CalcerVector(Vector3 value)
+ {
+ internalValue = value;
+ dimensions = 3;
+ }
+
+ public CalcerVector(Vector2 value)
+ {
+ internalValue = value;
+ dimensions = 2;
+ }
+
+ public override Vector3 value
+ {
+ get
+ {
+ switch (dimensions)
+ {
+ case 3:
+ return (Vector3)internalValue;
+ case 2:
+ return (Vector2)internalValue;
+ default:
+ return internalValue;
+ }
+
+ }
+ }
+
+ public static implicit operator CalcerVector(Vector3 val)
+ {
+ return new CalcerVector(val);
+ }
+
+ public static implicit operator CalcerVector(Vector2 val)
+ {
+ return new CalcerVector(val);
+ }
+
+ public static implicit operator Vector3(CalcerVector calc)
+ {
+ return calc.value;
+ }
+
+ public static CalcerVector operator +(CalcerVector first, CalcerVector second)
+ {
+ return new CalcerVectorCalc(first, second, CalcerVectorCalc.Operation.Add);
+ }
+
+ public static CalcerVector operator -(CalcerVector first, CalcerVector second)
+ {
+ return new CalcerVectorCalc(first, second, CalcerVectorCalc.Operation.Sub);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerVector.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerVector.cs.meta
new file mode 100755
index 0000000..2964b76
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerVector.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6c04bfd357341874e8be24608bfd976e
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs b/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs
new file mode 100755
index 0000000..2aa00f3
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace coa4u
+{
+ public class CalcerVectorCalc : CalcerVector
+ {
+ public enum Operation
+ {
+ Add,
+ Sub
+ }
+
+ private Operation operation;
+ private CalcerVector first;
+ private CalcerVector second;
+
+ public CalcerVectorCalc(CalcerVector first, CalcerVector second, Operation operation = Operation.Add)
+ {
+ this.first = first;
+ this.second = second;
+ this.operation = operation;
+ }
+
+ public override Vector3 value
+ {
+ get
+ {
+ switch (operation)
+ {
+ case Operation.Add:
+ return first.value + second.value;
+ case Operation.Sub:
+ return first.value - second.value;
+ default:
+ throw new Exception("Operation not found.");
+ }
+ }
+ }
+ }
+}
diff --git a/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs.meta b/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs.meta
new file mode 100755
index 0000000..206e2ed
--- /dev/null
+++ b/Assets/scripts/coa4uext/Calcers/CalcerVectorCalc.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 78a730b682beb8d4180d80db8bdc6537
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/CoreClasses.meta b/Assets/scripts/coa4uext/CoreClasses.meta
new file mode 100755
index 0000000..84244f8
--- /dev/null
+++ b/Assets/scripts/coa4uext/CoreClasses.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 38016d14a3449b7478e2c667c72063f6
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Assets/scripts/coa4uext/CoreClasses/State.cs b/Assets/scripts/coa4uext/CoreClasses/State.cs
new file mode 100755
index 0000000..321bcad
--- /dev/null
+++ b/Assets/scripts/coa4uext/CoreClasses/State.cs
@@ -0,0 +1,26 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public class State
+ {
+ public readonly ActionInstant action;
+ public readonly Predicate trigger;
+ public readonly string name;
+
+ public State(ActionInstant targetAction, string targetName = "")
+ {
+ action = targetAction;
+ name = targetName;
+ }
+
+ public State(Predicate targetTrigger, ActionInstant targetAction, string targetName = "")
+ {
+ trigger = targetTrigger;
+ action = targetAction;
+ name = targetName;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/CoreClasses/State.cs.meta b/Assets/scripts/coa4uext/CoreClasses/State.cs.meta
new file mode 100755
index 0000000..320d693
--- /dev/null
+++ b/Assets/scripts/coa4uext/CoreClasses/State.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ebc37cf537501dd4f9290a911cb5b757
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates.meta b/Assets/scripts/coa4uext/Predicates.meta
new file mode 100755
index 0000000..8dfb46e
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 470c1cdb0ca2c1a4895bc641646f9474
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates/Predicate.cs b/Assets/scripts/coa4uext/Predicates/Predicate.cs
new file mode 100755
index 0000000..b62ba3f
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/Predicate.cs
@@ -0,0 +1,11 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public abstract class Predicate
+ {
+ public abstract bool check();
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Predicates/Predicate.cs.meta b/Assets/scripts/coa4uext/Predicates/Predicate.cs.meta
new file mode 100755
index 0000000..b832284
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/Predicate.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 97583e10785bec74c939caf211b248b8
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs b/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs
new file mode 100755
index 0000000..cd700a9
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public class PredicateDistanceGreater : Predicate
+ {
+ protected CalcerVector first;
+ protected CalcerVector second;
+ protected float distance;
+
+ public PredicateDistanceGreater(CalcerVector one, CalcerVector other, float dist)
+ : base()
+ {
+ first = one;
+ second = other;
+ distance = dist;
+ }
+
+ public override bool check()
+ {
+ if (Vector3.Distance(first.value, second.value) > distance)
+ return true;
+ else
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs.meta b/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs.meta
new file mode 100755
index 0000000..09a8169
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateDistanceGreater.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 17a24fb6b2830f24fb10e079734a432f
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs b/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs
new file mode 100755
index 0000000..313da0f
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public class PredicateDistanceLess : Predicate
+ {
+ protected CalcerVector first;
+ protected CalcerVector second;
+ protected float distance;
+
+ public PredicateDistanceLess(CalcerVector one, CalcerVector other, float dist)
+ : base()
+ {
+ first = one;
+ second = other;
+ distance = dist;
+ }
+
+ public override bool check()
+ {
+ if (Vector3.Distance(first.value, second.value) <= distance)
+ return true;
+ else
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs.meta b/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs.meta
new file mode 100755
index 0000000..26edadb
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateDistanceLess.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1f98bec35befcf141bfda4291e7aea41
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs b/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs
new file mode 100755
index 0000000..f77a601
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public class PredicateFalse : Predicate
+ {
+ public override bool check()
+ {
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs.meta b/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs.meta
new file mode 100755
index 0000000..19844e8
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateFalse.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c046509f9d6d55b45a9643e86a29c95c
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs b/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs
new file mode 100755
index 0000000..9c8af15
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+namespace coa4u
+{
+ public class PredicateTrue : Predicate
+ {
+ public override bool check()
+ {
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs.meta b/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs.meta
new file mode 100755
index 0000000..e0f0f5a
--- /dev/null
+++ b/Assets/scripts/coa4uext/Predicates/PredicateTrue.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8f6a4b0a53e20504fa28937299d4df63
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/UnityComponents.meta b/Assets/scripts/coa4uext/UnityComponents.meta
new file mode 100755
index 0000000..25ad8fe
--- /dev/null
+++ b/Assets/scripts/coa4uext/UnityComponents.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 45d3e250968191147aeb6b6346456173
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs b/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs
new file mode 100755
index 0000000..0001137
--- /dev/null
+++ b/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using coa4u;
+
+[System.Serializable]
+public class SeqActor : Actor
+{
+ protected State[] states;
+ protected int index;
+ protected List stateLog = new List();
+ protected ActionInstant currentStateAction;
+
+ public void SetState(int idx)
+ {
+ if (idx < states.Length)
+ {
+ stateLog.Add(idx);
+ index = idx;
+ if (currentStateAction != null)
+ RemoveAction(currentStateAction);
+ currentStateAction = states[idx].action;
+ AttachAction(currentStateAction);
+ }
+ else
+ {
+ throw new Exception("Actor doesn't have the state " + idx.ToString());
+ }
+ }
+
+ public void SetState(string name)
+ {
+ SetState(Array.FindIndex(states, x => x.name == name));
+ }
+
+ public int currentStateIndex
+ {
+ get
+ {
+ return index;
+ }
+ }
+
+ public string currentStateName
+ {
+ get
+ {
+ return states[index].name;
+ }
+ }
+
+ public List log
+ {
+ get
+ {
+ return stateLog;
+ }
+ }
+}
diff --git a/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs.meta b/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs.meta
new file mode 100755
index 0000000..4759931
--- /dev/null
+++ b/Assets/scripts/coa4uext/UnityComponents/SeqActor.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fe7dfa7af5880d044b663b7fce129ce4
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs b/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs
new file mode 100755
index 0000000..4cd4efd
--- /dev/null
+++ b/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using coa4u;
+
+[System.Serializable]
+public class SeqTest : SeqActor
+{
+ public Actor enemy;
+ Vector3 startPosition;
+
+ void Start()
+ {
+ startPosition = transformCached.position;
+ CalcerVector endPosition = new CalcerPosition(enemy) + new CalcerVector(new Vector3(-2F, transformCached.position.y, 0F));
+
+ ActionInstant stateDefault = new ActionSequence(
+ new ActionInstant[]
+ {
+ new ActionDelay(3),
+ new ActionSwitchState(1)
+ });
+
+ ActionInstant stateRoam = new ActionSequence(
+ new ActionInstant[] {
+ new ActionHolder(new CalcerPosition(enemy)),
+ new ActionHolder(endPosition, 5, 1, 1),
+ new ActionDelay(0.5F),
+ new ActionHolder(new CalcerPosition(enemy), 0.1F),
+ new ActionHolder(endPosition, 0.1F),
+ new ActionDelay(0.5F),
+ new ActionJumpTo(startPosition, 5, 1, 1),
+ new ActionSwitchState(0)
+ });
+
+ states = new State[]
+ {
+ new State(stateDefault, "wait"),
+ new State(stateRoam, "attack")
+ };
+
+ SetState(0);
+ }
+}
diff --git a/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs.meta b/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs.meta
new file mode 100755
index 0000000..42cfee2
--- /dev/null
+++ b/Assets/scripts/coa4uext/UnityComponents/SeqTest.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a97027e8b127e5049be5e16c73c87275
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData: