using System.Collections.Generic; using UnityEngine; using Bolt; namespace Game { [UnitTitle("删除实体")] [UnitSubtitle("NodeDestroyEntity")] [UnitCategory("Game-Entity")] public class NodeDestroyEntity : NodeDefault { public ValueInput entity; protected override void Def() { entity = ValueInput("entity"); } protected override void Run(Flow flow) { Util.DestroyEntity(flow.GetValue(entity)); } } [UnitTitle("实体位置")] [UnitSubtitle("NodeEntityPosition")] [UnitCategory("Game-Entity")] public class NodeEntityPosition : NodeDefault { public ValueInput entity; public ValueOutput pos; protected override void Def() { entity = ValueInput("entity"); pos = ValueOutput("pos"); } protected override void Run(Flow flow) { var e = flow.GetValue(entity); var p = Util.EntityLogicPos(e); flow.SetValue(pos, p); } } [UnitTitle("实体距离")] [UnitSubtitle("NodeEntityDistance")] [UnitCategory("Game-Entity")] public class NodeEntityDistance : NodeDefault { public ValueInput entity1; public ValueInput entity2; public ValueOutput distance; protected override void Def() { entity1 = ValueInput("entity1"); entity2 = ValueInput("entity2"); distance = ValueOutput("distance"); } protected override void Run(Flow flow) { var e1 = flow.GetValue(entity1); var e2 = flow.GetValue(entity2); var dist = Util.EntityDistance(e1, e2); flow.SetValue(distance, dist); } } [UnitTitle("实体偏移向量(1->2)")] [UnitSubtitle("NodeEntityOffset")] [UnitCategory("Game-Entity")] public class NodeEntityOffset : NodeDefault { public ValueInput entity1; public ValueInput entity2; public ValueOutput offset; protected override void Def() { entity1 = ValueInput("entity1"); entity2 = ValueInput("entity2"); offset = ValueOutput("offset"); } protected override void Run(Flow flow) { var e1 = flow.GetValue(entity1); var e2 = flow.GetValue(entity2); var dist = Util.EntityOffset(e1, e2); flow.SetValue(offset, dist); } } [UnitTitle("实体是否浮空")] [UnitSubtitle("NodeEntityInAir")] [UnitCategory("Game-Entity")] public class NodeEntityInAir : NodeDefault { public ValueInput entity; public ValueOutput inAir; protected override void Def() { entity = ValueInput("entity"); inAir = ValueOutput("inAir"); } protected override void Run(Flow flow) { var e = flow.GetValue(entity); var b = Util.EntityInAir(e); flow.SetValue(inAir, b); } } [UnitTitle("移动")] [UnitSubtitle("NodeEntityMove")] [UnitCategory("Game-Entity")] public class NodeEntityMove : NodeDefault { public ValueInput direction { get; private set; } protected override void Def() { direction = ValueInput("direction"); } protected override void Run(Flow flow) { var e = data.Entity; var d = flow.GetValue(direction); d = new Vector3(d.x, 0, d.z); Util.EntityMove(e, d); } } [UnitTitle("停止移动")] [UnitSubtitle("NodeEntityStop")] [UnitCategory("Game-Entity")] public class NodeEntityStop : NodeDefault { protected override void Run(Flow flow) { var e = data.Entity; Util.EntityStopMove(e); } } [UnitTitle("获取主角")] [UnitSubtitle("NodeGetMaster")] [UnitCategory("Game-Entity")] public class NodeGetMaster : NodeDefault { public ValueOutput master { get; private set; } protected override void Def() { master = ValueOutput("master"); } protected override void Run(Flow flow) { flow.SetValue(master, Util.GetMasterID()); } } [UnitTitle("获取所有敌人")] [UnitSubtitle("NodeGetAllEnemies")] [UnitCategory("Game-Entity")] public class NodeGetAllEnemies : NodeDefault { public ValueOutput list { get; private set; } protected override void Def() { list = ValueOutput>("list"); } protected override void Run(Flow flow) { flow.SetValue(list, Util.GetAllEnemies()); } } [UnitTitle("按照实体距离排序")] [UnitSubtitle("NodeSortByDistance")] [UnitCategory("Game-Entity")] public class NodeSortByDistance : NodeDefault { public ValueInput entity { get; private set; } public ValueInput list { get; private set; } public ValueOutput result { get; private set; } protected override void Def() { entity = ValueInput("entity"); list = ValueInput>("list"); result = ValueOutput>("list"); } protected override void Run(Flow flow) { var e = flow.GetValue(entity); var l = flow.GetValue>(list); l.Sort((left, right) => { return (int)((Util.EntityDistance(e, left) - Util.EntityDistance(e, right)) * 10); }); flow.SetValue(result, l); } } }