public static ICharaBattle GetNearestTarget(ICharaBattle battleInfo, SkillDefine.ColliderTarget targetType) { List <ICharaBattle> targetList = GetTargetList(battleInfo, targetType); ICharaBattle target = null; float dis = -1; for (int i = 0; i < targetList.Count; i++) { float tmpDis = Vector3.Distance(battleInfo.MovePos, targetList[i].MovePos); if (dis == -1) { dis = tmpDis; target = targetList[i]; } else { if (tmpDis < dis) { dis = tmpDis; target = targetList[i]; } } } return(target); }
public void DoColliderAction(ICharaBattle player) { _colliderCount++; if (_colliderInfo.ColliderMax != -1 && _colliderCount >= _colliderInfo.ColliderMax) { Complete(); return; } if (null != _colliderInfo.FightEffectList && _colliderInfo.FightEffectList.Count > 0) { Vector3 dir = new Vector3(_collider.x, 0, _collider.y); dir = (player.MovePos - dir).normalized; for (int i = 0; i < _colliderInfo.FightEffectList.Count; i++) { FightEffectInfo info = _colliderInfo.FightEffectList[i]; if (info.EffectTarget == FIGHT_EF_TARGET.SELF) { FightEffectDefine.ParseEffect(_skillPlayer, info, _skillPlayer.BattleId, dir); } else { SkillCommand command = null; if (info.EffectType == FIGHT_EF_TPYE.ACTION) { uint frame = ZTBattleSceneManager.GetInstance().SceneFrame; command = FightDefine.GetSkillCommand(player.BattleId, frame, info.Param1, dir, player.MovePos); } FightEffectDefine.ParseEffect(player, info, _skillPlayer.BattleId, dir, command); } } } }
//草丛刷新 private void OnUpdateGrassId(Notification data) { uint battleId = (uint)data.param; CharaActorInfo info = ZTBattleSceneManager.GetInstance().GetCharaById(battleId); ICharaBattle battleInfo = info as ICharaBattle; if (null == info || null == battleInfo) { return; } int GrassId = MyPlayer.GrassId; if (battleInfo.GrassId > 0) { if (battleInfo.Camp == MyPlayer.Camp || GrassId == battleInfo.GrassId) { //半透明 info.ChangeOpacity(0.5f); } else { info.ChangeOpacity(0); //透明 } return; } info.ChangeOpacity(1.0f); }
//移除玩家 private void RemovePlayerById(uint battleId) { int index = _charaList.FindIndex(delegate(CharaActorInfo player) { ICharaBattle info = player as ICharaBattle; if (null != info) { return(info.BattleId == battleId); } return(false); }); //移除数据对象 if (index != -1) { _charaList.RemoveAt(index); } if (_charaDic.ContainsKey(battleId)) { _charaDic.Remove(battleId); } //移除场景对象 if (_charaDic.ContainsKey(battleId)) { GameObject.Destroy(_charaViewDic[battleId]); _charaViewDic.Remove(battleId); } }
public void UpdateLate() { if (null == _addSkillCommand || _addSkillCommand.Count == 0) { return; } while (_addSkillCommand.Count > 0) { SkillCommand command = _addSkillCommand[0]; _addSkillCommand.RemoveAt(0); if (null != command) { ICharaBattle battleInfo = ZTBattleSceneManager.GetInstance().GetCharaById(command.BattleId) as ICharaBattle; if (null == battleInfo) { return; } if (!_skillParserDic.ContainsKey(command.BattleId)) { _skillParserDic.Add(command.BattleId, new List <SkillActionParser>()); } SkillActionParser skillParser = new SkillActionParser(battleInfo, command); _skillParserDic[battleInfo.BattleId].Add(skillParser); } } }
//刷新对象 public override void UpdateActoin(uint curFrame = 0) { base.UpdateActoin(curFrame); if (_moveCount > _moveInfo.FrameCount) { return; } _moveCount++; Vector3 targetPos = _actionParser.Command.TargetPos; if (_actionParser.Command.TargetId > 0) { ICharaBattle battleInfo = ZTBattleSceneManager.GetInstance().GetCharaById(_actionParser.Command.TargetId) as ICharaBattle; if (null != battleInfo) { targetPos = battleInfo.MovePos; } } bool moveDone = SkillMethod.MoveAction(_collider, _moveInfo, _actionParser.Command.SkillDir, targetPos, _skillPlayer.MovePos); if (moveDone) { DoneEndMoveAction(); Complete(); } }
private static void AddBuff(ICharaBattle battleInfo, FightEffectInfo effect, uint userId) { if (userId <= 0) { return; } battleInfo.AddBuff(new BuffData(effect.Param1, ZTBattleSceneManager.GetInstance().SceneFrame, userId)); }
public SkillActionParser(ICharaBattle playerBase, SkillCommand command) { SkillPlayer = playerBase; Command = command; _skillActionDic = new Dictionary <uint, List <SkillActionBase> >(); IsComplete = false; ParseSkillAction(); }
//激活技能 private static void ActivateSkill(ICharaBattle battleInfo, FightEffectInfo effect) { int skillId = effect.Param1; if (skillId > 0) { battleInfo.ActivateSkillId = skillId; } }
public void UpdatePos(BPBattle bp) { ICharaBattle info = ZTBattleSceneManager.GetInstance().GetCharaById(bp.BattleId) as ICharaBattle; if (null != info) { info.MovePos = bp.Pos; } }
private static void DoAction(ICharaBattle battleInfo, FightEffectInfo effect, uint userId = 0, Vector3 dir = default(Vector3), object takeParam = null) { SkillCommand skill = takeParam as SkillCommand; if (null != skill && null != battleInfo) { battleInfo.SkillCommand(skill); } }
//收到玩家进入场景 public void ParseReborn(BPReborn bp) { ICharaBattle info = ZTBattleSceneManager.GetInstance().GetCharaById(bp.BattleId) as ICharaBattle; if (null != info) { info.Reborn(); } }
void OnDestroy() { if (null != _charaActor) { RemoveEvent(); _charaActor = null; _fightInfo = null; _battleInfo = null; } }
//震屏 private static void SharkScreen(ICharaBattle battleInfo, FightEffectInfo effect, uint userId) { //非玩家自己 不需要震动 if (battleInfo.BattleId == ZTBattleSceneManager.GetInstance().MyPlayer.BattleId || userId == ZTBattleSceneManager.GetInstance().MyPlayer.BattleId) { int time = effect.Param1; float offset = effect.Param2 / IntToFloat; ZTBattleSceneManager.GetInstance().SharkScreen(time, offset); } }
/// <summary> /// 行为基类 构造函数 /// </summary> /// <param name="player">技能使用对象</param> /// <param name="actionId">行为编号</param> /// <param name="actionType">行为类型</param> public SkillActionBase(SkillActionParser actionParser, uint actFrame = 0) { _actionParser = actionParser; _skillPlayer = _actionParser.SkillPlayer; ActionType = SkillDefine.SkillActionType.NONE; _curFrame = actFrame; _actFrame = actFrame; _frameMax = actFrame; }
public void DoneEndMoveAction() { //指定目标 if (_colliderInfo.ColliderType == CollBase.ColType.TARGET) { ICharaBattle battleInfo = ZTBattleSceneManager.GetInstance().GetCharaById(_actionParser.Command.TargetId) as ICharaBattle; if (null != battleInfo) { DoColliderAction(battleInfo); } } }
//地图中心刷新 public void OnUpdateCamera(Notification data) { //血条ui刷新 for (int i = 0; i < _charaList.Count; i++) { CharaActorInfo info = _charaList[i]; ICharaBattle bInfo = info as ICharaBattle; if (null != bInfo) { info.UpdatePos(bInfo.MovePos); } } }
private static void RemoveBuff(ICharaBattle battleInfo, FightEffectInfo effect) { switch ((BUFF_REMOVE_TYPE)effect.Param1) { case BUFF_REMOVE_TYPE.ID: battleInfo.RemoveBuff(effect.Param2); break; case BUFF_REMOVE_TYPE.TYPE: battleInfo.RemoveBuffByType(effect.Param2); break; } }
public BPBattle(uint battleId) { BattleId = battleId; Frame = ZTBattleSceneManager.GetInstance().SceneFrame; Pos = new Vector3(400, 0, 400); ICharaBattle info = ZTBattleSceneManager.GetInstance().GetCharaById(battleId) as ICharaBattle; if (null != info) { Pos = info.MovePos; } }
private void CreateBattleHead(CharaActorInfo info) { ICharaBattle battleInfo = info as ICharaBattle; if (null == battleInfo) { return; } GameObject go = GameObject.Instantiate(_battleHeadGo); go.transform.SetParent(_hpTransform, false); go.transform.localScale = new Vector3(1, 1, 1); go.GetComponent <BattleHead>().SetInfo(info); }
private static void CalculateHurt(ICharaBattle battleInfo, FightEffectInfo effect, uint userId) { ICharaFight target = battleInfo as ICharaFight; ICharaFight user = ZTBattleSceneManager.GetInstance().GetCharaById(userId) as ICharaFight; if (null == target || null == user) { return; } HurtInfo hurtInfo = new HurtInfo(); hurtInfo.Type = HURT_TYPE.NORMAL; hurtInfo.BattleId = battleInfo.BattleId; hurtInfo.Pos = battleInfo.MovePos; hurtInfo.Value = -user.Attack; target.AddHurt(hurtInfo); }
//===================================目标选择================================================= public static List <ICharaBattle> GetTargetList(ICharaBattle battleInfo, SkillDefine.ColliderTarget targetType) { List <ICharaBattle> targetList = new List <ICharaBattle>(); if (targetType == SkillDefine.ColliderTarget.SELF) { targetList.Add(battleInfo as ICharaBattle); return(targetList); } List <CharaActorInfo> list = ZTBattleSceneManager.GetInstance().GetCharaList(); for (int i = 0; i < list.Count; i++) { ICharaBattle info = list[i] as ICharaBattle; //过滤死亡玩家 if (null != info && !info.IsDead()) { switch (targetType) { case SkillDefine.ColliderTarget.TEAM: if (battleInfo.Camp == info.Camp) { targetList.Add(info); } break; case SkillDefine.ColliderTarget.ENEMY: if (battleInfo.Camp != info.Camp) { targetList.Add(info); } break; case SkillDefine.ColliderTarget.ALL: targetList.Add(info); break; } } } return(targetList); }
private static void ChangeAttribute(ICharaBattle battleInfo, FightEffectInfo effect) { ICharaFight target = battleInfo as ICharaFight; if (null == target) { return; } float multi = 0; //乘数 int value = 0; //值 //按以下选项修改上面属性 switch ((ATT_ALTER_TYPE)effect.Param2) { case ATT_ALTER_TYPE.VALUE: value = effect.Param3; break; case ATT_ALTER_TYPE.PRECENT: multi = effect.Param3 / 100.0f; break; } //改变的属性选择 switch ((ATTRIBUTE)effect.Param1) { case ATTRIBUTE.ATTACK: target.Attack += Mathf.CeilToInt(target.Attack * multi) + value; break; case ATTRIBUTE.HP: int result = Mathf.CeilToInt(target.MaxHp * multi) + value; HurtInfo hurtInfo = new HurtInfo(); hurtInfo.Type = HURT_TYPE.NORMAL; hurtInfo.BattleId = battleInfo.BattleId; hurtInfo.Pos = battleInfo.MovePos; hurtInfo.Value = result; target.AddHurt(hurtInfo); break; } }
/// <summary> /// 解析技能效果 /// </summary> /// <param name="battleInfo">生效者id</param> /// <param name="effect">效果信息</param> /// <param name="userId">使用者id</param> /// <param name="dir">方向(击退 等带方向效果附带参数)</param> /// <param name="takeParam">技能 等附带参数</param> public static void ParseEffect(ICharaBattle battleInfo, FightEffectInfo effect, uint userId = 0, Vector3 dir = default(Vector3), object takeParam = null) { if (null == battleInfo) { return; } switch (effect.EffectType) { case FIGHT_EF_TPYE.NONE: break; case FIGHT_EF_TPYE.SHARK: SharkScreen(battleInfo, effect, userId); break; case FIGHT_EF_TPYE.HURT: CalculateHurt(battleInfo, effect, userId); break; case FIGHT_EF_TPYE.ADD_BUFF: AddBuff(battleInfo, effect, userId); break; case FIGHT_EF_TPYE.RE_BUFF: RemoveBuff(battleInfo, effect); break; case FIGHT_EF_TPYE.ACTION: DoAction(battleInfo, effect, userId, dir, takeParam); break; case FIGHT_EF_TPYE.ARRTIBUTE: ChangeAttribute(battleInfo, effect); break; case FIGHT_EF_TPYE.ACTIVATE: ActivateSkill(battleInfo, effect); break; } }
public void SetInfo(CharaActorInfo info) { if (null == _slider) { return; } if (null != _charaActor) { RemoveEvent(); } _charaActor = info; _fightInfo = info as ICharaFight; _battleInfo = info as ICharaBattle; if (null == _charaActor || null == _fightInfo || null == _battleInfo) { return; } _slider.maxValue = _fightInfo.MaxHp; _slider.value = _fightInfo.Hp; _hpText.TextStr = _fightInfo.Hp.ToString() + "/" + _fightInfo.MaxHp.ToString(); _name.TextStr = "测试"; InitEvent(); }
private void DoCommand(FightCommandBase command) { uint battleId = command.BattleId; if (_charaDic.ContainsKey(battleId)) { ICharaBattle info = GetCharaById(battleId) as ICharaBattle; if (null == info) { return; } switch (command.CommandType) { case COMMAND_TYPE.MOVE: info.MoveCommand(command as MoveCommand); break; case COMMAND_TYPE.SKILL: info.SkillCommand(command as SkillCommand); break; } } }