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.
		
		
		
		
		
			
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
| using Entitas;
 | |
| using UnityEngine;
 | |
| using Game;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| [Game]
 | |
| public class SkillComponent : IComponent
 | |
| {
 | |
|     public MetaData<string> SkillId = new MetaData<string>();              //正在释放的技能id
 | |
|     public bool IsRunning = false;      //是否技能释放中
 | |
|     public Vector3 CastDir;             //技能释放方向
 | |
|     public Dictionary<Tuple<int, int>, SkillHitInfo> SkillHitInfo = new Dictionary<Tuple<int, int>, SkillHitInfo>();//技能命中信息
 | |
|     public List<SkillHitInfo> HitInfo = new List<SkillHitInfo>();//受击命中信息
 | |
| }
 | |
| 
 | |
| namespace Game
 | |
| {
 | |
|     public abstract partial class Util
 | |
|     {
 | |
|         public static void CastSkill(GameEntity entity, string skillId, string skillTimeline, Vector3 castDir)
 | |
|         {
 | |
|             TimelineManager.Instance.EndSkillTimeline(entity);
 | |
|             entity.skill.SkillHitInfo.Clear();
 | |
| 
 | |
|             var skill = entity.skill;
 | |
|             var move = entity.move;
 | |
|             skill.IsRunning = true;
 | |
|             entity.iD.Data.IsFreeControl = false;
 | |
|             move.IsFreeTurn = false;
 | |
|             move.TempMoveForceScale = 0;
 | |
| 
 | |
|             skill.CastDir = castDir;
 | |
|             skill.SkillId.Value = skillId;
 | |
|             move.MoveDir = castDir; //释放技能会覆盖移动方向
 | |
|             if (castDir != GameConst.NoneDir && castDir != GameConst.Stop)
 | |
|             {
 | |
|                 if (castDir.x != 0)
 | |
|                 {
 | |
|                     move.IsRight = castDir.x > 0;
 | |
|                 }
 | |
|             }
 | |
|             TimelineManager.Instance.RunSkillTimeline(entity, skillTimeline);
 | |
|         }
 | |
|         public static void EndSkillTimeline(GameEntity entity)
 | |
|         {
 | |
|             TimelineManager.Instance.EndSkillTimeline(entity);
 | |
|             ClearSkill(entity);
 | |
|             var move = entity.move;
 | |
|             entity.iD.Data.IsFreeControl = true;
 | |
|             move.IsFreeTurn = true;
 | |
| 
 | |
|             if (entity.hasCombo)
 | |
|             {
 | |
|                 entity.combo.Stance = EComboStance.Idle;
 | |
|             }
 | |
|         }
 | |
|         public static void ClearSkill(GameEntity entity)
 | |
|         {
 | |
|             var skill = entity.skill;
 | |
|             skill.SkillHitInfo.Clear();
 | |
|             skill.HitInfo.Clear();
 | |
|             skill.IsRunning = false;
 | |
|             skill.SkillId.Value = "";
 | |
|         }
 | |
| 
 | |
|         public static void CastSkillMonster(GameEntity entity, int index, Vector3 castDir)
 | |
|         {
 | |
|             if (!entity.hasAI)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
|             var cfgData = Util.GetMonsterConfigData(entity.CfgId());
 | |
|             var cfg = cfgData.GetFeatureEntityParamMonster();
 | |
|             var skillList = cfg.MonsterSkillList;
 | |
|             if (skillList.Count == 0)
 | |
|             {
 | |
|                 Util.Print("怪物技能数量为0:", entity.CfgId());
 | |
|                 return;
 | |
|             }
 | |
|             else if (index < 0 || index >= skillList.Count)
 | |
|             {
 | |
|                 Util.Print("怪物技能释放失败 序号错误:", entity.CfgId(), index, skillList.Count);
 | |
|                 return;
 | |
|             }
 | |
|             var skillCfg = Util.GetSkillMonsterConfigData(skillList[index].TechnicalName);
 | |
|             var skillTimeline = skillCfg.Template.Skill.Timeline;
 | |
|             CastSkill(entity, skillCfg.TechnicalName, skillTimeline, castDir);
 | |
| 
 | |
|         }
 | |
| 
 | |
|         private static void CastSkillBullet(GameEntity entity)
 | |
|         {
 | |
|             if (!entity.hasBullet)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
|             var bullet = entity.bullet;
 | |
|             CastSkill(entity, "bullet", bullet.Timeline, bullet.CastDir);
 | |
|             Util.EntityMove(entity.ID(), bullet.CastDir);
 | |
|         }
 | |
|     }
 | |
| } |