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 static void AddBuff(ICharaBattle battleInfo, FightEffectInfo effect, uint userId) { if (userId <= 0) { return; } battleInfo.AddBuff(new BuffData(effect.Param1, ZTBattleSceneManager.GetInstance().SceneFrame, userId)); }
//激活技能 private static void ActivateSkill(ICharaBattle battleInfo, FightEffectInfo effect) { int skillId = effect.Param1; if (skillId > 0) { battleInfo.ActivateSkillId = skillId; } }
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); } }
//震屏 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); } }
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; } }
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); }
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; } }
private void UpdateFightEffectItem(FightEffectInfo effectInfo) { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.Label("EffectType:", GUILayout.Width(100)); effectInfo.EffectType = (FIGHT_EF_TPYE)EditorGUILayout.EnumPopup("", effectInfo.EffectType); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("EffectType:", GUILayout.Width(100)); effectInfo.EffectTarget = (FIGHT_EF_TARGET)EditorGUILayout.EnumPopup("", effectInfo.EffectTarget); GUILayout.EndHorizontal(); if (effectInfo.EffectType == FIGHT_EF_TPYE.ARRTIBUTE) { GUILayout.BeginHorizontal(); GUILayout.Label("ATTRIBUTE:", GUILayout.Width(100)); effectInfo.Param1 = (int)(ATTRIBUTE)EditorGUILayout.EnumPopup("", ((ATTRIBUTE)effectInfo.Param1)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ATT_ALTER_TYPE:", GUILayout.Width(150)); effectInfo.Param2 = (int)(ATT_ALTER_TYPE)EditorGUILayout.EnumPopup("", ((ATT_ALTER_TYPE)effectInfo.Param2)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Param:", GUILayout.Width(100)); effectInfo.Param3 = EditorGUILayout.IntField(effectInfo.Param3); GUILayout.EndHorizontal(); } else if (effectInfo.EffectType == FIGHT_EF_TPYE.SHARK) { GUILayout.BeginHorizontal(); GUILayout.Label("SharkTime:", GUILayout.Width(100)); effectInfo.Param1 = EditorGUILayout.IntField(effectInfo.Param1); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Offset:", GUILayout.Width(100)); effectInfo.Param2 = EditorGUILayout.IntField(effectInfo.Param2); GUILayout.EndHorizontal(); } else if (effectInfo.EffectType == FIGHT_EF_TPYE.RE_BUFF) { GUILayout.BeginHorizontal(); GUILayout.Label("RemoveType:", GUILayout.Width(100)); effectInfo.Param1 = (int)(BUFF_REMOVE_TYPE)EditorGUILayout.EnumPopup("", ((BUFF_REMOVE_TYPE)effectInfo.Param1)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); string label = "BuffId:"; if ((BUFF_REMOVE_TYPE)effectInfo.Param1 == BUFF_REMOVE_TYPE.TYPE) { label = "BuffType:"; } GUILayout.Label(label, GUILayout.Width(100)); effectInfo.Param2 = EditorGUILayout.IntField(effectInfo.Param2); GUILayout.EndHorizontal(); } else if (effectInfo.EffectType == FIGHT_EF_TPYE.NONE || effectInfo.EffectType == FIGHT_EF_TPYE.HURT) { //do nothing } else { GUILayout.BeginHorizontal(); GUILayout.Label("Param:", GUILayout.Width(100)); effectInfo.Param1 = EditorGUILayout.IntField(effectInfo.Param1); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); }