2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
6.7 KiB
C#

2 years ago
using System.Collections.Generic;
using UnityEngine;
using Bolt;
namespace Game
{
[UnitTitle("测试打印")]
[UnitSubtitle("NodeDebugLog")]
[UnitCategory("Game-Common")]
public class NodeDebugLog : NodeDefault
{
public ValueInput log { get; private set; }
protected override void Def()
{
log = ValueInput<object>("log");
}
protected override void Run(Flow flow)
{
Util.Print(flow.GetValue<object>(log));
}
}
[UnitTitle("射线检测(1->2)")]
[UnitSubtitle("NodeRayCast")]
[UnitCategory("Game-Common")]
public class NodeRayCast : NodeDefault
{
public ValueInput pos1;
public ValueInput pos2;
public ValueOutput target;
protected override void Def()
{
pos1 = ValueInput<Vector3>("p1");
pos2 = ValueInput<Vector3>("p2");
target = ValueOutput<List<int>>("target");
}
protected override void Run(Flow flow)
{
var entity = Util.GetEntity(data.Entity);
var p1 = flow.GetValue<Vector3>(pos1);
var p2 = flow.GetValue<Vector3>(pos2);
var dir = p2 - p1;
tempListInt.Clear();
if (dir.magnitude != 0)
{
var hitInfos = Physics.RaycastAll(p1, dir, dir.magnitude, layerMask: UtilPhysics.LayerMaskHit);
foreach (var hitInfo in hitInfos)
{
var hitGo = hitInfo.transform.gameObject;
var hitEntityId = 0;
EntityInfo info;
if (hitGo.TryGetComponent<EntityInfo>(out info))
{
hitEntityId = info.entityId;
if (Util.GetEntity(hitEntityId).Team() == entity.Team())
{
continue;
}
tempListInt.Add(hitEntityId);
}
}
}
flow.SetValue(target, tempListInt);
}
}
[UnitTitle("Box检测(1->2)")]
[UnitSubtitle("NodeBoxCast")]
[UnitCategory("Game-Common")]
public class NodeBoxCast : NodeDefault
{
public ValueInput pos1;
public ValueInput pos2;
public ValueInput width;
public ValueInput height;
public ValueOutput target;
protected override void Def()
{
pos1 = ValueInput<Vector3>("p1");
pos2 = ValueInput<Vector3>("p2");
width = ValueInput<float>("width");
height = ValueInput<float>("height");
target = ValueOutput<List<int>>("target");
}
protected override void Run(Flow flow)
{
var entity = Util.GetEntity(data.Entity);
var p1 = flow.GetValue<Vector3>(pos1);
var p2 = flow.GetValue<Vector3>(pos2);
var w = flow.GetValue<float>(width);
var h = flow.GetValue<float>(height);
var dir = p2 - p1;
tempListInt.Clear();
if (dir.magnitude != 0)
{
var center = (p2 + p1) / 2;
var halfExtents = new Vector3(w / 2, h / 2, dir.magnitude);
var rot = Quaternion.FromToRotation(Vector3.right, dir);
var hitInfos = Physics.BoxCastAll(center, halfExtents, dir, rot, 0, layerMask: UtilPhysics.LayerMaskHit);
Util.DrawBox(center, halfExtents, dir, Color.green);
foreach (var hitInfo in hitInfos)
{
var hitGo = hitInfo.transform.gameObject;
var hitEntityId = 0;
EntityInfo info;
if (hitGo.TryGetComponent<EntityInfo>(out info))
{
hitEntityId = info.entityId;
if (Util.GetEntity(hitEntityId).Team() == entity.Team())
{
continue;
}
tempListInt.Add(hitEntityId);
}
}
}
flow.SetValue(target, tempListInt);
}
}
// [UnitTitle("造成伤害")]
// [UnitSubtitle("NodeDamage")]
// [UnitCategory("Game-Common")]
// public class NodeDamage : NodeDefault
// {
// public ValueInput target;
// public ValueInput damageRate;
// public ValueInput hitDir;
// public ValueInput isFlow;
// public ValueInput hitId;
// public ValueInput isSkill;
// public ValueInput performance;
// protected override void Def()
// {
// target = ValueInput<int>("entity");
// damageRate = ValueInput<float>("damageRate");
// hitDir = ValueInput<Vector3>("hitDir");
// isFlow = ValueInput<bool>("isFlow");
// hitId = ValueInput<int>("hitId");
// isSkill = ValueInput<bool>("isSkill");
// performance = ValueInput<ESKillPerformance>("performance");
// }
// protected override void Run(Flow flow)
// {
// var t = flow.GetValue<int>(target);
// var d = flow.GetValue<float>(damageRate);
// var hd = flow.GetValue<Vector3>(hitDir);
// var ifw = flow.GetValue<bool>(isFlow);
// var hid = flow.GetValue<int>(hitId);
// var s = flow.GetValue<bool>(isSkill);
// var p = flow.GetValue<ESKillPerformance>(performance);
// var hitKey = new Tuple<int, int>(t, hid);
// var owner = Util.GetEntity(data.owner);
// var targetEntity = Util.GetEntity(t);
// var hitInfo = new SkillHitInfo()
// {
// skillParam = new AttackBehaviour()
// {
// isFlow = ifw,
// damageRate = d,
// hitId = hid,
// },
// ownerEntity = owner.ID(),
// hitEntity = t,
// hitPos = targetEntity.Pos(),
// hitDir = hd,
// isRight = true,
// isDealed = false,
// isSkill = s,
// performance = (uint)p,
// };
// if (s)
// {
// if (!owner.skill.skillHitInfo.ContainsKey(hitKey))
// {
// owner.skill.skillHitInfo[hitKey] = hitInfo;
// }
// }
// else
// {
// owner.skill.hitInfo.Add(hitInfo);
// }
// }
}