This commit is contained in:
2020-07-04 14:41:25 +08:00
parent 70c346d2c1
commit a8f02e4da5
3748 changed files with 587372 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Hivemind;
#if UNITY_EDITOR
using UnityEditor;
#endif
public abstract class ActionBase
{
public abstract Hashtable Serialize ();
public abstract void Deserialize (Hashtable map);
public static ActionBase newAction (Hashtable map)
{
if (map == null) {
return null;
}
return null;
}
#if UNITY_EDITOR
public abstract void DrawInspector (Node node);
#endif
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c8d2fae72e25943db8b4cd1c62acb0c3
timeCreated: 1501582378
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,77 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Hivemind;
#if UNITY_EDITOR
using UnityEditor;
#endif
using Coolape;
using System;
namespace Hivemind
{
public class NodeAction : Node
{
public ActionBase action;
#if UNITY_EDITOR
MonoScript _monoScript;
public MonoScript monoScript{
get {
return _monoScript;
}
set {
if(_monoScript != value && value != null) {
Type tp = value.GetClass ();
action = Activator.CreateInstance (tp) as ActionBase;
}
_monoScript = value;
}
}
#endif
public virtual void OnEnable() {
#if UNITY_EDITOR
if (monoScript == null) {
monoScript = AssetDatabase.LoadAssetAtPath ("Assets/CoolapeFrame/Hivemind/Test/MyAction.cs", typeof(MonoScript)) as MonoScript;
}
#endif
}
public override Hashtable Serialize ()
{
Hashtable m = base.Serialize ();
if (action != null) {
m ["action"] = action.Serialize ();
}
#if UNITY_EDITOR
if (monoScript != null) {
string actionClass = AssetDatabase.GetAssetPath (monoScript);
m ["actionClass"] = actionClass;
}
#endif
return m;
}
public override void Deserialize (Hashtable map)
{
#if UNITY_EDITOR
base.Deserialize (map);
string actionClass = MapEx.getString (map, "actionClass");
if (string.IsNullOrEmpty (actionClass)) {
monoScript = null;
} else {
monoScript = AssetDatabase.LoadAssetAtPath (actionClass, typeof(MonoScript)) as MonoScript;
if (monoScript != null) {
Type tp = monoScript.GetClass ();
action = Activator.CreateInstance (tp) as ActionBase;
if (action != null) {
action.Deserialize (MapEx.getMap (map, "action"));
}
}
}
#endif
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 456f96f74bcae48cf8a2d9317b960e9f
timeCreated: 1501551538
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,203 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Hivemind;
using Coolape;
namespace Hivemind
{
public class NodeBranch : NodeAction
{
// 要结束的节点
public List<Node> KillLeftNodes = new List<Node>();
public List<Node> KillRightNodes = new List<Node>();
public virtual void ConnectKillLeftChild(Node child)
{
if (!KillLeftNodes.Contains(child) && !ChildrenLeft.Contains(child)) {
KillLeftNodes.Add(child);
child.ParentKillNodes.Add(this);
}
}
public virtual void DisconnectKillLeftChild(Node child)
{
if (KillLeftNodes.Contains(child)) {
KillLeftNodes.Remove(child);
child.ParentKillNodes.Remove(this);
}
}
public virtual void ConnectKillRightChild(Node child)
{
if (!KillRightNodes.Contains(child) && !ChildrenRight.Contains(child)) {
KillRightNodes.Add(child);
}
}
public virtual void DisconnectKillRightChild(Node child)
{
if (KillRightNodes.Contains(child)) {
KillRightNodes.Remove(child);
}
}
[SerializeField]
public List<Node> _childrenLeft = new List<Node>();
[SerializeField]
public List<Node> _childrenRight = new List<Node>();
public virtual List<Node> ChildrenLeft { get { return _childrenLeft; } }
public virtual List<Node> ChildrenRight { get { return _childrenRight; } }
public virtual bool inLeft(Node node)
{
if (node == null)
return false;
return ChildrenLeft.Contains(node);
}
public virtual bool inRight(Node node)
{
if (node == null)
return false;
return ChildrenRight.Contains(node);
}
public virtual void ConnectLeftChild(Node child)
{
if (child == null)
return;
if (!ChildrenLeft.Contains(child) && !KillLeftNodes.Contains(child)) {
ChildrenLeft.Add(child);
child.setParent(this);
}
}
public virtual void ConnectRightChild(Node child)
{
if (child == null)
return;
if (!ChildrenRight.Contains(child) && !KillRightNodes.Contains(child)) {
ChildrenRight.Add(child);
child.setParent (this);
}
}
public virtual void DisconnectLeftChild(Node child)
{
if (child == null)
return;
if (ChildrenLeft.Contains(child)) {
ChildrenLeft.Remove(child);
child.Unparent(this);
}
}
public virtual void DisconnectRightChild(Node child)
{
if (child == null)
return;
if (ChildrenRight.Contains(child)) {
ChildrenRight.Remove(child);
child.Unparent(this);
}
}
public override void DisconnectChild(Node child)
{
if (child == null)
return;
base.DisconnectChild(child);
DisconnectLeftChild(child);
DisconnectRightChild(child);
}
public override void Disconnect()
{
base.Disconnect();
// Disconnect children
for (int i = ChildrenLeft.Count - 1; i >= 0; i--) {
DisconnectLeftChild(ChildrenLeft [i]);
}
for (int i = ChildrenRight.Count - 1; i >= 0; i--) {
DisconnectRightChild(ChildrenRight [i]);
}
for (int i = KillLeftNodes.Count - 1; i >= 0; i--) {
DisconnectKillLeftChild(KillLeftNodes [i]);
}
for (int i = KillRightNodes.Count - 1; i >= 0; i--) {
DisconnectKillRightChild(KillRightNodes [i]);
}
}
public override Hashtable Serialize()
{
Hashtable map = base.Serialize();
ArrayList lefts = new ArrayList();
for (int i = 0; i < ChildrenLeft.Count; i++) {
lefts.Add(ChildrenLeft [i].id);
}
map ["ChildrenLeft"] = lefts;
ArrayList rights = new ArrayList();
for (int i = 0; i < ChildrenRight.Count; i++) {
rights.Add(ChildrenRight [i].id);
}
map ["ChildrenRight"] = rights;
ArrayList killlefts = new ArrayList();
for (int i = 0; i < KillLeftNodes.Count; i++) {
killlefts.Add(KillLeftNodes [i].id);
}
map ["KillLeftNodes"] = killlefts;
ArrayList killrights = new ArrayList();
for (int i = 0; i < KillRightNodes.Count; i++) {
if (KillRightNodes [i] == null)
continue;
killrights.Add(KillRightNodes [i].id);
}
map ["KillRightNodes"] = killrights;
return map;
}
public override void DeserializeChildren(Hashtable map)
{
ArrayList children = MapEx.getList(map, "ChildrenLeft");
Node node = null;
for (int i = 0; i < children.Count; i++) {
int id = int.Parse(children [i].ToString());
node = behaviorTree.getNodeByID(id);
ConnectLeftChild(node);
}
children = MapEx.getList(map, "ChildrenRight");
for (int i = 0; i < children.Count; i++) {
int id = int.Parse(children [i].ToString());
node = behaviorTree.getNodeByID(id);
ConnectRightChild(node);
}
children = MapEx.getList(map, "KillLeftNodes");
for (int i = 0; i < children.Count; i++) {
int id = int.Parse(children [i].ToString());
node = behaviorTree.getNodeByID(id);
ConnectKillLeftChild(node);
}
children = MapEx.getList(map, "KillRightNodes");
for (int i = 0; i < children.Count; i++) {
int id = int.Parse(children [i].ToString());
node = behaviorTree.getNodeByID(id);
ConnectKillRightChild(node);
}
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8296fe6385d2a4398a4edc55236087ed
timeCreated: 1501552530
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,12 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Hivemind;
using Coolape;
namespace Hivemind
{
public class NodeTogether : NodeAction
{
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0cb0498c85a854d1f92a5b6602aad53e
timeCreated: 1502099325
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,146 @@

// Root ------------------------------------------------------------------------------------------------------------------------------------------------------
using Hivemind;
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using Coolape;
#if UNITY_EDITOR
using UnityEditor;
#endif
using System;
namespace Hivemind
{
[System.Serializable]
public class Root : Node
{
public int begainIndex = 0;
public int maxIndex = 0;
public ActionBase attr;
#if UNITY_EDITOR
MonoScript _monoScript;
public MonoScript monoScript{
get {
return _monoScript;
}
set {
if(_monoScript != value && value != null) {
Type tp = value.GetClass ();
attr = Activator.CreateInstance (tp) as ActionBase;
}
_monoScript = value;
}
}
#endif
public virtual void OnEnable() {
#if UNITY_EDITOR
if (monoScript == null) {
monoScript = AssetDatabase.LoadAssetAtPath ("Assets/CoolapeFrame/Hivemind/Test/MyRoot.cs", typeof(MonoScript)) as MonoScript;
}
#endif
}
// Child connections
[SerializeField]
Node _child;
public override void ConnectChild (Node child)
{
if (_child == null) {
_child = child;
child.setParent(this);
} else {
throw new System.InvalidOperationException (string.Format ("{0} already has a connected child, cannot connect {1}", this, child));
}
}
public override void DisconnectChild (Node child)
{
if (_child == child) {
_child = null;
child.Unparent(this);
} else {
throw new System.InvalidOperationException (string.Format ("{0} is not a child of {1}", child, this));
}
}
public override List<Node> Children {
get {
List<Node> nodeList = new List<Node> ();
nodeList.Add (_child);
return nodeList;
}
}
public override int ChildCount {
get { return _child != null ? 1 : 0; }
}
public override bool CanConnectChild {
get { return _child == null; }
}
public override bool ContainsChild (Node child)
{
return _child == child;
}
public override Hashtable Serialize ()
{
Hashtable map = base.Serialize ();
#if UNITY_EDITOR
map ["begainIndex"] = begainIndex;
map ["maxIndex"] = maxIndex;
if (attr != null) {
map ["attr"] = attr.Serialize ();
}
if (monoScript != null) {
string actionClass = AssetDatabase.GetAssetPath (monoScript);
map ["actionClass"] = actionClass;
}
#endif
return map;
}
public override void Deserialize (Hashtable map)
{
#if UNITY_EDITOR
base.Deserialize (map);
begainIndex = MapEx.getInt (map, "begainIndex");
maxIndex = MapEx.getInt (map, "maxIndex");
string actionClass = MapEx.getString (map, "actionClass");
if (string.IsNullOrEmpty (actionClass)) {
monoScript = null;
} else {
monoScript = AssetDatabase.LoadAssetAtPath (actionClass, typeof(MonoScript)) as MonoScript;
if (monoScript != null) {
Type tp = monoScript.GetClass ();
attr = Activator.CreateInstance (tp) as ActionBase;
if (attr != null) {
attr.Deserialize (MapEx.getMap (map, "attr"));
}
}
}
#endif
}
// Runtime
public override Status Tick (GameObject agent, Context context)
{
Status result = Status.Error;
if (_child != null) {
result = behaviorTree.Tick (_child, agent, context);
}
return result;
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f48fda5512bad4dc3835524f7ed477ba
timeCreated: 1501502853
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: