diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 08f36cf..1382efb 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -51,6 +51,7 @@
+
diff --git a/Assets/IsoTools/Examples/Scenes/Scene07.unity b/Assets/IsoTools/Examples/Scenes/Scene07.unity
index 8c6fec3..e1783e3 100644
--- a/Assets/IsoTools/Examples/Scenes/Scene07.unity
+++ b/Assets/IsoTools/Examples/Scenes/Scene07.unity
@@ -443,16 +443,18 @@ MonoBehaviour:
- IsoTools.PlayMaker.Actions.IsoTranslate
- HutongGames.PlayMaker.Actions.Wait
- IsoTools.PlayMaker.Actions.IsoGetPosition
+ - IsoTools.PlayMaker.Actions.IsoGetSize
- PlayMaker.ConditionalExpression.ConditionalExpression
customNames:
-
-
-
-
- actionEnabled: 01010101
- actionIsOpen: 01010101
- actionStartIndex: 00000000090000000c00000012000000
- actionHashCodes: 8ef8760048c011017ebd0202490c8701
+ -
+ actionEnabled: 0101010101
+ actionIsOpen: 0000000000
+ actionStartIndex: 00000000090000000c0000001200000018000000
+ actionHashCodes: 8ef8760048c011017ebd02027ebd0202490c8701
unityObjectParams: []
fsmGameObjectParams: []
fsmOwnerDefaultParams:
@@ -472,6 +474,14 @@ MonoBehaviour:
showInInspector: 0
networkSync: 0
value: {fileID: 0}
+ - ownerOption: 0
+ gameObject:
+ useVariable: 0
+ name:
+ tooltip:
+ showInInspector: 0
+ networkSync: 0
+ value: {fileID: 0}
animationCurveParams: []
functionCallParams: []
fsmTemplateControlParams: []
@@ -532,6 +542,24 @@ MonoBehaviour:
showInInspector: 0
networkSync: 0
value: 0
+ - useVariable: 1
+ name: iso_w
+ tooltip:
+ showInInspector: 1
+ networkSync: 0
+ value: 0
+ - useVariable: 1
+ name:
+ tooltip:
+ showInInspector: 0
+ networkSync: 0
+ value: 0
+ - useVariable: 1
+ name:
+ tooltip:
+ showInInspector: 0
+ networkSync: 0
+ value: 0
fsmIntParams: []
fsmBoolParams:
- useVariable: 1
@@ -554,6 +582,12 @@ MonoBehaviour:
showInInspector: 1
networkSync: 0
value: {x: 0, y: 0, z: 0}
+ - useVariable: 1
+ name: iso_size
+ tooltip:
+ showInInspector: 1
+ networkSync: 0
+ value: {x: 0, y: 0, z: 0}
fsmColorParams: []
fsmRectParams: []
fsmQuaternionParams: []
@@ -561,12 +595,12 @@ MonoBehaviour:
- FINISHED
- TO_RESET_POSITION
-
- byteData: 0000000001000000
+ byteData: 000000000100000000
arrayParamSizes:
arrayParamTypes: []
customTypeSizes:
customTypeNames: []
- paramDataType: 140000001c0000000f0000000f0000000f000000010000000100000001000000010000000f0000001700000001000000140000001c0000000f0000000f0000000f00000001000000120000001700000017000000010000000100000011000000
+ paramDataType: 140000001c0000000f0000000f0000000f000000010000000100000001000000010000000f0000001700000001000000140000001c0000000f0000000f0000000f00000001000000140000001c0000000f0000000f0000000f00000001000000120000001700000017000000010000000100000011000000
paramName:
- gameObject
- vector
@@ -586,14 +620,20 @@ MonoBehaviour:
- y
- z
- everyFrame
+ - gameObject
+ - vector
+ - x
+ - y
+ - z
+ - everyFrame
- expression
- isTrueEvent
- isFalseEvent
- everyFrame
- rawResult
- storeResult
- paramDataPos: 000000000000000000000000010000000200000000000000010000000200000003000000030000000000000004000000010000000100000004000000050000000600000005000000000000000100000002000000060000000700000000000000
- paramByteDataSize: 000000000000000000000000000000000000000001000000010000000100000001000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000010000000100000000000000
+ paramDataPos: 000000000000000000000000010000000200000000000000010000000200000003000000030000000000000004000000010000000100000004000000050000000600000005000000020000000200000007000000080000000900000006000000000000000100000002000000070000000800000000000000
+ paramByteDataSize: 000000000000000000000000000000000000000001000000010000000100000001000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000010000000100000000000000
- name: State 3
description:
colorIndex: 0
@@ -725,6 +765,12 @@ MonoBehaviour:
colorIndex: 0
variables:
floatVariables:
+ - useVariable: 1
+ name: iso_w
+ tooltip:
+ showInInspector: 1
+ networkSync: 0
+ value: 0
- useVariable: 1
name: iso_x
tooltip:
@@ -742,6 +788,12 @@ MonoBehaviour:
showInInspector: 1
networkSync: 0
value: {x: 0, y: 0, z: 0}
+ - useVariable: 1
+ name: iso_size
+ tooltip:
+ showInInspector: 1
+ networkSync: 0
+ value: {x: 0, y: 0, z: 0}
colorVariables: []
rectVariables: []
quaternionVariables: []
@@ -753,7 +805,7 @@ MonoBehaviour:
enumVariables: []
categories:
-
- variableCategoryIDs: 0000000000000000
+ variableCategoryIDs: 00000000000000000000000000000000
description:
docUrl:
showStateLabel: 1
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs b/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs
new file mode 100644
index 0000000..dd9384c
--- /dev/null
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs
@@ -0,0 +1,49 @@
+using UnityEngine;
+using HutongGames.PlayMaker;
+
+namespace IsoTools.PlayMaker.Actions {
+ public abstract class IsoComponentAction : FsmStateAction where T : Component {
+ T _cachedComponent;
+ GameObject _cachedGameObject;
+
+ protected IsoWorld isoWorld {
+ get { return _cachedComponent as IsoWorld; }
+ }
+
+ protected IsoObject isoObject {
+ get { return _cachedComponent as IsoObject; }
+ }
+
+ protected IsoRigidbody isoRigidbody {
+ get { return _cachedComponent as IsoRigidbody; }
+ }
+
+ protected IsoCollider isoCollider {
+ get { return _cachedComponent as IsoCollider; }
+ }
+
+ protected IsoBoxCollider isoBoxCollider {
+ get { return _cachedComponent as IsoBoxCollider; }
+ }
+
+ protected IsoSphereCollider isoSphereCollider {
+ get { return _cachedComponent as IsoSphereCollider; }
+ }
+
+ protected bool UpdateCache(GameObject go) {
+ if ( go ) {
+ if ( _cachedComponent == null || _cachedGameObject != go ) {
+ _cachedComponent = go.GetComponent();
+ _cachedGameObject = go;
+ if ( !_cachedComponent ) {
+ LogWarning("Missing component: " + typeof(T).FullName + " on: " + go.name);
+ }
+ }
+ } else {
+ _cachedComponent = null;
+ _cachedGameObject = null;
+ }
+ return _cachedComponent != null;
+ }
+ }
+} // IsoTools.PlayMaker.Actions
\ No newline at end of file
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs.meta b/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs.meta
new file mode 100644
index 0000000..d855cf3
--- /dev/null
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoComponentAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 063a1435f504a41b691d2cecde558bc9
+timeCreated: 1450018514
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoGetPosition.cs b/Assets/IsoTools/PlayMaker/Actions/IsoGetPosition.cs
index 3095745..00c8515 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoGetPosition.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoGetPosition.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Gets the Position of a IsoObject and stores it in a Vector3 Variable or each Axis in a Float Variable")]
- public class IsoGetPosition : FsmStateAction {
+ public class IsoGetPosition : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -44,9 +45,8 @@ namespace IsoTools.PlayMaker.Actions {
void DoGetPosition() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
- var position = iso_object.position;
+ if ( UpdateCache(go) ) {
+ var position = isoObject.position;
vector.Value = position;
x.Value = position.x;
y.Value = position.y;
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoGetSize.cs b/Assets/IsoTools/PlayMaker/Actions/IsoGetSize.cs
index 009d073..6beee4a 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoGetSize.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoGetSize.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Gets the Size of a IsoObject and stores it in a Vector3 Variable or each Axis in a Float Variable")]
- public class IsoGetSize : FsmStateAction {
+ public class IsoGetSize : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -44,9 +45,8 @@ namespace IsoTools.PlayMaker.Actions {
void DoGetSize() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
- var size = iso_object.size;
+ if ( UpdateCache(go) ) {
+ var size = isoObject.size;
vector.Value = size;
x.Value = size.x;
y.Value = size.y;
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoGetTilePosition.cs b/Assets/IsoTools/PlayMaker/Actions/IsoGetTilePosition.cs
index 254fa96..095652d 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoGetTilePosition.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoGetTilePosition.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Gets the TilePosition of a IsoObject and stores it in a Vector3 Variable or each Axis in a Float Variable")]
- public class IsoGetTilePosition : FsmStateAction {
+ public class IsoGetTilePosition : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -44,9 +45,8 @@ namespace IsoTools.PlayMaker.Actions {
void DoGetPosition() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
- var position = iso_object.tilePosition;
+ if ( UpdateCache(go) ) {
+ var position = isoObject.tilePosition;
vector.Value = position;
x.Value = position.x;
y.Value = position.y;
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoSetPosition.cs b/Assets/IsoTools/PlayMaker/Actions/IsoSetPosition.cs
index cd201b5..99a2962 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoSetPosition.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoSetPosition.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Sets the Position of a IsoObject. To leave any axis unchanged, set variable to 'None'.")]
- public class IsoSetPosition : FsmStateAction {
+ public class IsoSetPosition : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -52,10 +53,9 @@ namespace IsoTools.PlayMaker.Actions {
void DoSetPosition() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
+ if ( UpdateCache(go) ) {
var position = vector.IsNone
- ? iso_object.position
+ ? isoObject.position
: vector.Value;
if ( !x.IsNone ) {
@@ -68,7 +68,7 @@ namespace IsoTools.PlayMaker.Actions {
position.z = z.Value;
}
- iso_object.position = position;
+ isoObject.position = position;
}
}
}
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoSetSize.cs b/Assets/IsoTools/PlayMaker/Actions/IsoSetSize.cs
index 00acef8..4f66456 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoSetSize.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoSetSize.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Sets the Size of a IsoObject. To leave any axis unchanged, set variable to 'None'.")]
- public class IsoSetSize : FsmStateAction {
+ public class IsoSetSize : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -52,10 +53,9 @@ namespace IsoTools.PlayMaker.Actions {
void DoSetSize() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
+ if ( UpdateCache(go) ) {
var size = vector.IsNone
- ? iso_object.size
+ ? isoObject.size
: vector.Value;
if ( !x.IsNone ) {
@@ -68,7 +68,7 @@ namespace IsoTools.PlayMaker.Actions {
size.z = z.Value;
}
- iso_object.size = size;
+ isoObject.size = size;
}
}
}
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoSetTilePosition.cs b/Assets/IsoTools/PlayMaker/Actions/IsoSetTilePosition.cs
index 07876e6..0d92ec8 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoSetTilePosition.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoSetTilePosition.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Sets the TilePosition of a IsoObject. To leave any axis unchanged, set variable to 'None'.")]
- public class IsoSetTilePosition : FsmStateAction {
+ public class IsoSetTilePosition : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -52,10 +53,9 @@ namespace IsoTools.PlayMaker.Actions {
void DoSetTilePosition() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
+ if ( UpdateCache(go) ) {
var tile_position = vector.IsNone
- ? iso_object.tilePosition
+ ? isoObject.tilePosition
: vector.Value;
if ( !x.IsNone ) {
@@ -68,7 +68,7 @@ namespace IsoTools.PlayMaker.Actions {
tile_position.z = z.Value;
}
- iso_object.tilePosition = tile_position;
+ isoObject.tilePosition = tile_position;
}
}
}
diff --git a/Assets/IsoTools/PlayMaker/Actions/IsoTranslate.cs b/Assets/IsoTools/PlayMaker/Actions/IsoTranslate.cs
index e1cae18..b1e0a9a 100644
--- a/Assets/IsoTools/PlayMaker/Actions/IsoTranslate.cs
+++ b/Assets/IsoTools/PlayMaker/Actions/IsoTranslate.cs
@@ -4,8 +4,9 @@ using HutongGames.PlayMaker;
namespace IsoTools.PlayMaker.Actions {
[ActionCategory("IsoTools")]
[HutongGames.PlayMaker.Tooltip("Translates a IsoObject. Use a Vector3 variable and/or XYZ components. To leave any axis unchanged, set variable to 'None'.")]
- public class IsoTranslate : FsmStateAction {
+ public class IsoTranslate : IsoComponentAction {
[RequiredField]
+ [CheckForComponent(typeof(IsoObject))]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
@@ -69,8 +70,7 @@ namespace IsoTools.PlayMaker.Actions {
void DoTranlate() {
var go = Fsm.GetOwnerDefaultTarget(gameObject);
- var iso_object = go ? go.GetComponent() : null;
- if ( iso_object ) {
+ if ( UpdateCache(go) ) {
var translate = vector.IsNone
? new Vector3(x.Value, y.Value, z.Value)
: vector.Value;
@@ -85,7 +85,7 @@ namespace IsoTools.PlayMaker.Actions {
translate.z = z.Value;
}
- iso_object.position +=
+ isoObject.position +=
translate * (perSecond ? Time.deltaTime : 1.0f);
}
}