Пример #1
0
    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);
    }
Пример #2
0
    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);
                }
            }
        }
    }
Пример #3
0
    //草丛刷新
    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);
    }
Пример #4
0
    //移除玩家
    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);
        }
    }
Пример #5
0
    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);
            }
        }
    }
Пример #6
0
    //刷新对象
    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();
        }
    }
Пример #7
0
 private static void AddBuff(ICharaBattle battleInfo, FightEffectInfo effect, uint userId)
 {
     if (userId <= 0)
     {
         return;
     }
     battleInfo.AddBuff(new BuffData(effect.Param1, ZTBattleSceneManager.GetInstance().SceneFrame, userId));
 }
Пример #8
0
 public SkillActionParser(ICharaBattle playerBase, SkillCommand command)
 {
     SkillPlayer     = playerBase;
     Command         = command;
     _skillActionDic = new Dictionary <uint, List <SkillActionBase> >();
     IsComplete      = false;
     ParseSkillAction();
 }
Пример #9
0
    //激活技能
    private static void ActivateSkill(ICharaBattle battleInfo, FightEffectInfo effect)
    {
        int skillId = effect.Param1;

        if (skillId > 0)
        {
            battleInfo.ActivateSkillId = skillId;
        }
    }
Пример #10
0
    public void UpdatePos(BPBattle bp)
    {
        ICharaBattle info = ZTBattleSceneManager.GetInstance().GetCharaById(bp.BattleId) as ICharaBattle;

        if (null != info)
        {
            info.MovePos = bp.Pos;
        }
    }
Пример #11
0
    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);
        }
    }
Пример #12
0
    //收到玩家进入场景
    public void ParseReborn(BPReborn bp)
    {
        ICharaBattle info = ZTBattleSceneManager.GetInstance().GetCharaById(bp.BattleId) as ICharaBattle;

        if (null != info)
        {
            info.Reborn();
        }
    }
Пример #13
0
 void OnDestroy()
 {
     if (null != _charaActor)
     {
         RemoveEvent();
         _charaActor = null;
         _fightInfo  = null;
         _battleInfo = null;
     }
 }
Пример #14
0
 //震屏
 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);
     }
 }
Пример #15
0
    /// <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;
    }
Пример #16
0
 public void DoneEndMoveAction()
 {
     //指定目标
     if (_colliderInfo.ColliderType == CollBase.ColType.TARGET)
     {
         ICharaBattle battleInfo = ZTBattleSceneManager.GetInstance().GetCharaById(_actionParser.Command.TargetId) as ICharaBattle;
         if (null != battleInfo)
         {
             DoColliderAction(battleInfo);
         }
     }
 }
Пример #17
0
 //地图中心刷新
 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);
         }
     }
 }
Пример #18
0
    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;
        }
    }
Пример #19
0
    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;
        }
    }
Пример #20
0
    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);
    }
Пример #21
0
    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);
    }
Пример #22
0
    //===================================目标选择=================================================
    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);
    }
Пример #23
0
    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;
        }
    }
Пример #24
0
    /// <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;
        }
    }
Пример #25
0
    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();
    }
Пример #26
0
    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;
            }
        }
    }