diff --git a/Assets/Scripts/Actions/ActionHelper.cs b/Assets/Scripts/Actions/ActionHelper.cs
index 14a5fb1a..b1ff7e73 100644
--- a/Assets/Scripts/Actions/ActionHelper.cs
+++ b/Assets/Scripts/Actions/ActionHelper.cs
@@ -254,27 +254,30 @@ public class ActionHelper
///
public static ICondition GetCondition(XMLTool.ActionItem condition)
{
- switch (condition.Type)
+ if (condition!=null)
{
- case "And":
- case "Or":
- var group = ConditionGroup.Allocate(condition.Type);
- foreach (var item in condition.SubActions)
- {
- group.AddCondition(GetCondition(item));
- }
- return group;
- case "UIClick":
- return UIClickCondition.Allocate(condition.Value);
- case "ObjClick":
- var dict = (XMLTool.DictionaryCondition)condition;
- return ObjClickCondition.Allocate(dict.Value, dict.args);
- case "Input":
- return InputCondition.Allocate(condition.Value);
- case "Var":
- return VarCondition.Allocate(condition.Name, condition.Value);
- case "StrEvent":
- return StrEventCondition.Allocate(condition.Value);
+ switch (condition.Type)
+ {
+ case "And":
+ case "Or":
+ var group = ConditionGroup.Allocate(condition.Type);
+ foreach (var item in condition.SubActions)
+ {
+ group.AddCondition(GetCondition(item));
+ }
+ return group;
+ case "UIClick":
+ return UIClickCondition.Allocate(condition.Value);
+ case "ObjClick":
+ var dict = (XMLTool.DictionaryCondition)condition;
+ return ObjClickCondition.Allocate(dict.Value, dict.args);
+ case "Input":
+ return InputCondition.Allocate(condition.Value);
+ case "Var":
+ return VarCondition.Allocate(condition.Name, condition.Value);
+ case "StrEvent":
+ return StrEventCondition.Allocate(condition.Value);
+ }
}
return null;
}
diff --git a/Assets/Scripts/Controller/StateMachineController.cs b/Assets/Scripts/Controller/StateMachineController.cs
index c6915c07..99c76788 100644
--- a/Assets/Scripts/Controller/StateMachineController.cs
+++ b/Assets/Scripts/Controller/StateMachineController.cs
@@ -48,31 +48,22 @@ public class StateMachineController : MonoSingleton
{
firstState = state.Key;
}
- IAction enterAct = null;
- IAction exitAct = null;
-
-
- fsm.State(state.Key).OnEnter(() =>
+ var vfState = new VfState();
+ vfState.OnEnter(() =>
{
- if (state.Value.Enter != null)
- {
- enterAct = ActionHelper.GetActionAndSub(state.Value.Enter.Action);
- enterAct?.Start(this);
- }
-
+ vfState.enterAct = ActionHelper.GetActionAndSub(state.Value.Enter?.Action);
+ vfState.enterAct?.Start(this);
}).OnExit(() =>
{
- if (enterAct != null)
+ if (vfState.enterAct != null)
{
- enterAct.Deinit();
+ vfState.enterAct.Deinit();
}
- if (state.Value.Exit != null)
- {
- exitAct = ActionHelper.GetActionAndSub(state.Value.Exit.Action);
- exitAct?.Start(this);
+ vfState.exitAct = ActionHelper.GetActionAndSub(state.Value.Exit?.Action);
+ vfState.exitAct?.Start(this);
- }
});
+ fsm.AddState(state.Key, vfState);
}
foreach (var transision in item.Value.Transisions)
{
@@ -84,7 +75,7 @@ public class StateMachineController : MonoSingleton
}
fsmInfo.fsm = fsm;
fsmInfo.fsm.StartState(firstState);
- if (FSMDitc.ContainsKey(item.Key)==false)
+ if (FSMDitc.ContainsKey(item.Key) == false)
{
FSMDitc.Add(item.Key, fsmInfo);
}
@@ -102,14 +93,19 @@ public class StateMachineController : MonoSingleton
{
foreach (var item in FSMDitc)
{
- var curState = item.Value.fsm.CurrentStateId;
- foreach (var trans in item.Value.transisions)
+ VfState state = item.Value.fsm.CurrentState as VfState;
+ if (state.enterAct == null || state.enterAct.Status == ActionStatus.Finished)
{
- if (trans.from == "any" || trans.from == item.Value.fsm.CurrentStateId)
+ foreach (var trans in item.Value.transisions)
{
- if (trans.condition.Check())
+ if ((trans.from == "any" && trans.to != item.Value.fsm.CurrentStateId) || trans.from == item.Value.fsm.CurrentStateId)
{
- item.Value.fsm.ChangeState(trans.to);
+ if (trans.condition == null || trans.condition.Check())
+ {
+ Debug.LogError(trans.from + "To:" + trans.to);
+ item.Value.fsm.ChangeState(trans.to);
+ break;
+ }
}
}
}
diff --git a/Assets/Scripts/CustomAction.meta b/Assets/Scripts/FSM.meta
similarity index 77%
rename from Assets/Scripts/CustomAction.meta
rename to Assets/Scripts/FSM.meta
index ce6f5980..b88a0616 100644
--- a/Assets/Scripts/CustomAction.meta
+++ b/Assets/Scripts/FSM.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 6d7f9813c337725468c8739dba68c439
+guid: 8b474fbd8dd5f4c49b70b10f5328d67e
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Scripts/FSM/CustomState.meta b/Assets/Scripts/FSM/CustomState.meta
new file mode 100644
index 00000000..8f6a5fc8
--- /dev/null
+++ b/Assets/Scripts/FSM/CustomState.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5feaaac014488434681db44e2face542
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/FSM/CustomState/VfState.cs b/Assets/Scripts/FSM/CustomState/VfState.cs
new file mode 100644
index 00000000..d1c8df38
--- /dev/null
+++ b/Assets/Scripts/FSM/CustomState/VfState.cs
@@ -0,0 +1,14 @@
+using QFramework;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class VfState : CustomState
+{
+
+
+ public IAction enterAct = null;
+ public IAction exitAct = null;
+
+
+}
diff --git a/Assets/Scripts/FSM/CustomState/VfState.cs.meta b/Assets/Scripts/FSM/CustomState/VfState.cs.meta
new file mode 100644
index 00000000..210d47cd
--- /dev/null
+++ b/Assets/Scripts/FSM/CustomState/VfState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0a5f77690765e1f44b3f3ac7783076fc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Item/Point3DItem.cs b/Assets/Scripts/Item/Point3DItem.cs
index 49555550..0f67e035 100644
--- a/Assets/Scripts/Item/Point3DItem.cs
+++ b/Assets/Scripts/Item/Point3DItem.cs
@@ -35,6 +35,7 @@ public class Point3DItem : MonoBehaviour
}
rotSpeed = data.rotateSpeed;
+ gameObject.GetComponent().sortingOrder = data.order;
TypeEventSystem.Global.Register(OnObjDestroy).UnRegisterWhenGameObjectDestroyed(gameObject);
}
diff --git a/Assets/Scripts/Xml/XmlParser.cs b/Assets/Scripts/Xml/XmlParser.cs
index 1a0548d6..ab5080b1 100644
--- a/Assets/Scripts/Xml/XmlParser.cs
+++ b/Assets/Scripts/Xml/XmlParser.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using UnityEngine;
+using static UnityEngine.Rendering.DebugUI;
namespace XMLTool
{
public class AppData
@@ -88,6 +89,7 @@ namespace XMLTool
public Vector3 rotate;
public Vector3 scale;
public float rotateSpeed;
+ public int order = 1;
public string clickEvent;
}
public List datas = new List();
@@ -1093,6 +1095,12 @@ namespace XMLTool
data.scale = Utility.GetVector3FromStrArray(item.Attribute("scale")?.Value);
}
float.TryParse(item.Attribute("rotateSpeed")?.Value, out data.rotateSpeed);
+ var order = item.Attribute("order");
+ if (order != null)
+ {
+ int.TryParse(order.Value, out data.order);
+ }
+
data.clickEvent = item.Attribute("clickEvent")?.Value;
act.datas.Add(data);
}
@@ -1146,6 +1154,10 @@ namespace XMLTool
public static Condition ParseCondition(XElement action)
{
+ if (action == null)
+ {
+ return null;
+ }
Condition newAction = null;
string type = action.Attribute("type")?.Value;
switch (type)