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.

103 lines
3.6 KiB
C#

2 years ago
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.GetFeatureMonster();
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)
2 years ago
{
if (!entity.hasBullet)
{
return;
}
var bullet = entity.bullet;
CastSkill(entity, "bullet", bullet.Timeline, bullet.CastDir);
Util.EntityMove(entity.ID(), bullet.CastDir);
}
}
}