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#
		
	
			
		
		
	
	
			184 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C#
		
	
| 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);
 | |
|     //         }
 | |
| 
 | |
|     //     }
 | |
| }
 |