using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
namespace YLBattle
{
///
/// 战场技能
///
public partial class BattleManager : IBattleGlobalOper
{
///
/// 释放技能
///
///
///
/// 0=普攻 1=技能
/// 触发参数
public void OnCastBullet(string who, string skillTid, string trg = "", bool ismarktrg = false)
{
if (string.IsNullOrEmpty(who) || string.IsNullOrEmpty(skillTid))
{
this.Env().DebugHelper().Warning("错误:对象:" + who + "模板id:" + who + "释放技能id:" + skillTid);
return;
}
//Debug.Log(who + " castBullet " + skillTid);
//this.mBulletModel.OnCastSkill(who, skillTid, trg, ismarktrg);
}
///
/// 释放技能 (带动作)
///
///
///
///
public void OnCastSkill(string who, string skillId, bool ismark = false)
{
if (skillId == string.Empty || skillId.Trim().Length <= 0)
{
return;
}
/// 需优化对象创建
FieldEvent ev = this.Env().EventDisp().MakeEvent(EFieldEventType.EFIELD_EVENT_CASTSKILL);
ev.PutValue("caster", who);
ev.PutValue("skill", skillId);
ev.PutValue("isskill", "true");
ev.PutValue("ismarktrg", ismark.ToString());
//LogHelper.Log(who + " skill=" + skillId);
this.Env().EventDisp().PostEvent(ev);
}
///
/// 触发被动技能
///
/// 当前事件类型
/// 事件参数
/// 释放者
/// 受影响ID列
public void OnTriggerPassiveSkill(int triggerType, string triggerParm = "", string casterId = "", string targetIds = "")
{
FieldEvent ev = this.Env().EventDisp().MakeEvent(EFieldEventType.EFIELD_EVENT_PASSIVE);
ev.PutValue("markType", triggerType.ToString());
/**
* caster=单项时为事件当前触发者。
*/
ev.PutValue("caster", casterId);
/**
* targets=所有受影响的角色
*/
ev.PutValue("targets", targetIds);
ev.PutValue("parm", triggerParm);
/**
* 这里不采用事件,主要是为了解决被动技能可以及时触发,否则如果压栈到事件里,会慢半拍~~
*/
//------------------------2017-09-04关闭被动技能触发
//this.Env().mSkillManagerOpr.OnTrigger(ev);
//
}
/////
///// 对象向目标【释放】技能
/////
///// 释放者
///// 技能Id
//public void OnCastSkillByConsumePower(string who,bool ismark=false)
//{
// LogicFighter fighter = this.Env().mLogicFighterOper.FindFighter(who);
// if (BattleSwitch.IsConsumePower)
// {
// ///能量消失
// fighter.SetProperty(EBattleProperty.NPOWER, 0);
// }
// //Debug.LogError(who + " OnCastSkillByConsumePower " + fighter.ManuSkill1());
// this.OnCastSkill(who, fighter.ManuSkill1(),ismark);
//}
///
/// 是否可释放技能
///
///
///
public bool ToCheckCouldCastSkill(string who)
{
if (this.mFieldModule.CurrentPoilcy() == null ||
this.mFieldModule.CurrentPoilcy().Type() != EBattleStaus.EBATTLE_STATUS_FIGHTING)
{
return false;
}
if (this.mFieldModule.CurrentSubPolicy() != null)
{
//己方通过UI释放技能时,待技能释放(bomb)完毕后,才可再次点击,敌方才可以继续轮询
return false;
}
LogicFighter fighter = this.Env().mLogicFighterOper.FindFighter(who);
if (fighter == null || fighter.IsDead())
{
return false;
}
List targets = this.Env().mLogicFighterOper.FindTeamAliveFighter(fighter.Team() == EBattleTeam.BLUETEAM ? EBattleTeam.REDTEAM : EBattleTeam.BLUETEAM);
if (targets == null || targets.Count <= 0)
{
LogHelper.Log("无法释放技能:" + (fighter.Team() == EBattleTeam.BLUETEAM ? "红对" : "蓝队") + "敌方全部死亡,战斗结束");
return false;
}
if (fighter.GetBuffEffectProperty(EBuffEffect.EBUFF_EFFECT_Silent) != 0)
{
return false;
}
if (fighter.GetBuffEffectProperty(EBuffEffect.EBUFF_EFFECT_Stun) != 0)
{
return false;
}
return true;
}
#region UI_TipWindow
///
/// [UI]角色释放必杀技能准备【提示】
///
/// 释放者
/// 技能Id
public void OnManualSkillTipFromUnity(string who)
{
if (!ToCheckCouldCastSkill(who))
{
return;
}
LogicFighter fighter = this.Env().mLogicFighterOper.FindFighter(who);
if (BattleSwitch.IsConsumePower)
{
if (fighter.RoleType() == 0)
{
fighter.SetProperty(EBattleProperty.NPOWER, 0);
}
else
{
this.Env().BattleBlueTeamSkillPower -= long.Parse(fighter.GetProperty(EBattleProperty.NMAXPOWER).ToString());
}
}
if (fighter.Team() == EBattleTeam.BLUETEAM && this.Env().levelMode != 2 && this.Env().levelMode != 4)
{
this.Env().BattleCOMBOPower += this.Env().IncreasePowerByCastSkill;
}
this.Env().mBlueSkillFighterId = who;
}
#endregion
#region bullet 实时位置 碰撞事件 死亡
///
/// [Bullet=>ProjectileBase-Update]修改子弹当前位置
///
/// 子弹实例ID
/// 坐标
public void ModifyBulletPostion(string id, Vector3 pos)
{
//CBullet bullet = this.mBulletModel.FindBullet(id);
//if (null == bullet)
//{
// return;
//}
//bullet.ModifyCurrentPos(pos);
}
///
/// [SkillControl.createSkillExplode]子弹碰撞事件
///
/// 子弹实例ID
/// 碰撞到的目标实例ID, 没有则传递string.Empty
public void OnBulletCollideEvent(string id, string target)
{
//CBullet bullet = this.mBulletModel.FindBullet(id);
//if (null == bullet)
//{
// this.Env().DebugHelper().Error("无法查找到指定子弹:" + id);
// return;
//}
//int delay = int.Parse(this.Env().SkillAdapter().GetSkillProperty(bullet.TID(), ESkillProperty.ESKILL_PROPERTY_BOMBTIME));
//BulletCollideEvent bce = new BulletCollideEvent();
//bce.id = id;
//bce.time = this.Env().TimeCenter().Now();
//bce.bombtime = bce.time + delay;
//bce.target = target;
//bce.postion = bullet.CurrentPos();
//bullet.EnqueueCollideEvent(bce);
}
///
/// 标记子弹为消亡状态
///
/// 子弹实例ID
public void MarkBulletDead(string id)
{
//CBullet bullet = this.mBulletModel.FindBullet(id);
//if (null == bullet)
//{
// this.Env().DebugHelper().Warning("无法查找到指定子弹:" + id);
// return;
//}
//this.Env().mBattleGlobalOper.ConfirmSkillBombComplete(bullet.Owner(), bullet.TID());
//bullet.MarkBulletDead();
}
#endregion
}
}