コード例 #1
0
 override public bool Initialize(object[] args)
 {
     base.Initialize(args);
     m_pCharacter     = args[0] as CharacterLogic;
     m_iSpeedInterval = (int)Math.Ceiling(0.01 * m_pCharacter.m_pInfo.m_pInstructionData.fire_range);
     m_iSpeedFlag     = 1;
     m_eAttackState   = AttackState.FinishAttack;
     return(true);
 }
コード例 #2
0
 public override bool Initialize(object [] args)
 {
     base.Initialize(args);
     m_pCharacter = args[0] as CharacterLogic;
     m_pTarget    = (Vector2)args[1];
     m_bIsLiving  = (bool)args[2];
     m_bCanIgnore = (bool)args[3];
     return(true);
 }
コード例 #3
0
 override public bool Initialize(object[] args)
 {
     base.Initialize(args);
     m_pCharacter = args[0] as CharacterLogic;
     m_iDir       = (int)args[1];
     m_pTarget    = (Vector2)args[2];
     _isFinished  = false;
     return(true);
 }
コード例 #4
0
ファイル: BaseBomb.cs プロジェクト: zhanpang/test_tank
 public BaseBomb()
     : base(0, 1, 10.0f, 100.0f, 1.0f, 1.0f)
 {
     _testRect     = new Rect(-3, -3, 9, 9);
     m_pConfig     = null;
     m_pHost       = null;
     m_stShape     = null;
     m_stBorder    = null;
     m_pAttackInfo = new AttackInfo();
 }
コード例 #5
0
        public void Throw_Bomb(SkillType x, CharacterLogic A, AttackBaseData AA)
        {
            Init_Round();
            set_animation((int)x);
            if (A.go_down == true)
            {
                return;
            }
            thunder_bomb_num = 0;
            kill_bomb        = 1.0f;
            DO_bomb_Action   = true;
            bomb_num         = 1;

            switch (x)
            {
            case SkillType.Normal:
                Throw_one_Bomb(A, AA);
                break;

            case SkillType.Cure:
                DO_bomb_Action = false;
                Throw_cure_bomb(A, AA);
                break;

            case SkillType.DoubleBomb:
                bomb_num = 2;
                Throw_two_Bomb(A, AA);
                break;

            case SkillType.TripleBomb:
                bomb_num = 3;
                Throw_three_Bomb(A, AA);
                break;

            case SkillType.Teleport:
                DO_bomb_Action = false;
                Throw_one_Bomb(A, AA);
                break;

            case SkillType.Robot:
                break;

            case SkillType.ThunderBomb:
                thunder_bomb_num = 6;
                bomb_num         = 5;
                Throw_thunder_bomb(A, AA);
                break;

            case SkillType.Rocket:
                Rock_Bomb();
                Throw_one_Bomb(A, AA);
                break;
            }
        }
コード例 #6
0
        public void ThrowBomb(CharacterLogic pHost, AttackBombData pData, bool is_foucs)   //is_foucs 为camera是否跟踪
        {
            SkillINstructionData self_skill = GameGOW.Get().DataMgr.GetSkillINstructionDataByID(SkillManager.CurrentSkillId == 0?0:100 + SkillManager.CurrentSkillId);

            pData.damage        = self_skill.damage;
            pData.center_damage = self_skill.center_damage;
            BombData pBombData = GameGOW.Get().DataMgr.GetBombDataByID(pData.bomb_config_id);

            if (pBombData != null)
            {
                int uid;
                lock (locker)
                {
                    uid = GameGOW.Get().GetNextUid();
                }
                //   Debug.Log("EEEEEEEEEEEEEEEEEEEEEEE-------------UID"+uid);
                BaseBomb m_stBombLogic = ObjectPools.CheckOut <BaseBomb>(uid, pHost, pBombData, pData);
                //  Debug.Log("EEEEEEEEEEEEEEEEEEEEEEE-------------UID" + m_stBombLogic.Config.m_iResourceID);
                m_stBombLogic.Position = pHost.GetWeaponPosition();
                float radian;
                if (SkillManager.CurrentSkillId == (int)SkillManager.SkillType.Rocket)
                {
                    radian = MathUtil.AngleToRadian(pHost.GetFireAngle()) * pHost.m_pInfo.m_iFacing;
                    GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iFireAngle = SkillManager.PreAngle;
                }
                else
                {
                    radian = MathUtil.AngleToRadian(pHost.GetFireAngle() + pHost.CalcObjectAngle()) * pHost.m_pInfo.m_iFacing;
                }

                float speedX = pHost.m_pInfo.m_iBombSpeed * Mathf.Cos(radian) * pHost.m_pInfo.m_iFacing;
                float speedY = pHost.m_pInfo.m_iBombSpeed * Mathf.Sin(radian);

                m_stBombLogic.Start();
                if (SkillManager.thunder_bomb_num > 0)
                {
                    speedX = 0.0f;
                    speedY = 0.0f;

                    float val = GameGOW.Get().MapMgr.m_stBound.xMax - GameGOW.Get().MapMgr.m_stBound.xMin;
                    float add = val / 6;
                    m_stBombLogic.Position = new Vector2(GameGOW.Get().MapMgr.m_stBound.xMin + add * SkillManager.thunder_bomb_num, GameGOW.Get().MapMgr.m_stBound.yMax - 10);
                }
                m_stBombLogic.SetSpeedXY(speedX, speedY);
                m_dicBombs[uid] = m_stBombLogic;

                if (OnBombNew != null)
                {
                    OnBombNew(m_stBombLogic, is_foucs);
                }
            }
        }
コード例 #7
0
        public void Throw_three_Bomb(CharacterLogic A, AttackBaseData AA)
        {
            int temp = GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iBombSpeed;

            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iBombSpeed -= 100;
            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iCurrentAngle -= 3;
            GameGOW.Get().BombMgr.ThrowBomb(A, AA as AttackBombData, false);

            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iBombSpeed += 100;
            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iCurrentAngle += 3;
            GameGOW.Get().BombMgr.ThrowBomb(A, AA as AttackBombData, true);

            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iBombSpeed += 100;
            GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iCurrentAngle += 6;
            GameGOW.Get().BombMgr.ThrowBomb(A, AA as AttackBombData, false);
        }
コード例 #8
0
        public void Clear()
        {
            m_dicPlayerResult.Clear();
            m_dicTeamResult.Clear();

            m_bIsInBattle              = false;
            m_stBattleInfo             = null;
            m_iCurrentRoundPlayerIndex = 0;
            m_iCurrentRoundTime        = ROUND_TIME;
            m_pCurrentPlayer           = null;
            m_iPlayerCount             = 0;
            m_iBattleStartTick         = 0;
            m_iBattleEndTick           = 0;
            m_iBossUID  = 0;
            m_iWaitTime = 0;
        }
コード例 #9
0
 public CharacterLogic CreateCharacter(int uid, CharacterInstructionData pData)
 {
     if (m_dicCharacterLogic.ContainsKey(uid))
     {
         return(m_dicCharacterLogic[uid]);
     }
     else
     {
         CharacterLogic pRet = ObjectPools.CheckOut <CharacterLogic>((int)uid, pData);
         m_dicCharacterLogic[uid] = pRet;
         if (OnCharacterNew != null)
         {
             OnCharacterNew(pRet);
         }
         return(pRet);
     }
 }
コード例 #10
0
        public void StartBattle(BattleInfo info, MapData pMapData)
        {
            m_iCurrentRoundPlayerIndex = 0;
            m_stBattleInfo             = info;
            m_iCurrentRound            = 0;
            m_iWaitTime = 0;

            InitPlayerInfo(pMapData);

            m_pCurrentPlayer = GameGOW.Get().CharacterMgr.GetCharacterByUid(info.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID);

            m_iCurrentRoundTime = ROUND_TIME; //info.m_iRoundLimit * 60;

            AddEvents();
            m_bIsInBattle = true;
            EventDispatcher.DispatchEvent("EventBattleStart", this, new ChangeControllerEvent(info.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID));
        }
コード例 #11
0
 public void Throw_one_Bomb(CharacterLogic A, AttackBaseData AA)
 {
     GameGOW.Get().BombMgr.ThrowBomb(A, AA as AttackBombData, true);
 }
コード例 #12
0
 override public bool Initialize(object[] args)
 {
     base.Initialize(args);
     m_pCharacter = args[0] as CharacterLogic;
     return(true);
 }
コード例 #13
0
ファイル: BaseBomb.cs プロジェクト: zhanpang/test_tank
        public void Bomb(Dictionary <int, bool> attackedMask = null)
        {
            //  SounderManager.Get().PlaySound(1, "boom1");
            bool flag = true;

            if (GameGOW.Get().MapMgr.IsOutMap(this.Position))
            {
                flag = false;
            }
            if (flag)
            {
                SounderManager.Get().PlaySound(1, "sound/yinxiao/pet_boom_" + (int)SkillManager.CurrentSkillId);
            }

            if (SkillManager.DO_bomb_Action == true && flag)
            {
                DigMap();
            }

            Vector2 boom_pos = new Vector2();

            if (Network.gamemode == BattleType.AI_1v1)
            {
                boom_pos = this.Position;
            }
            else if (Network.NetworkMode == true)
            {
                boom_pos = Boom_pos;
            }
            else
            {
                boom_pos = this.Position;
            }
            for (int i = -1; i <= 1; i++)
            {
                if (GameGOW.Get().MapMgr.IsEmpty((int)(boom_pos.x + i), (int)(boom_pos.y + 5)))
                {
                    boom_pos.x = (int)(boom_pos.x + i);
                    boom_pos.y = (int)((int)(boom_pos.y + 5));
                    break;
                }
            }
            if (SkillManager.CurrentSkillId == 7)
            {
                /*
                 * 能飞自杀
                 *  if(flag && boom_pos.y==0)
                 *  {
                 *
                 *
                 *  }
                 *  else
                 *  {
                 *      if (flag)
                 *      SelfCharacterWalkAction.Set_m_pCharacter(boom_pos);
                 *      else
                 *      {
                 *          Debug.Log("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW");
                 *          this.Stop();
                 *      }
                 *  }
                 */
                if (flag)
                {
                    SelfCharacterWalkAction.Set_m_pCharacter(boom_pos);
                }
                else
                {
                    this.Stop();
                }
            }



            List <TKPhysicalObj> bombList = GameGOW.Get().MapMgr.GetObjectsInMap(boom_pos, m_pConfig.m_fBombRange, null);
            int rr = 0;

            for (int i = 0; i < bombList.Count; ++i)
            {
                CharacterLogic pCharacter = bombList[i] as CharacterLogic;
                if (pCharacter != null)
                {
                    pCharacter.Falling(); //attackmask
                    m_pAttackInfo.m_Position        = boom_pos;
                    m_pAttackInfo.m_bIsCenterDamage = (attackedMask != null && attackedMask.ContainsKey(pCharacter.ID));
                    if (SkillManager.DO_bomb_Action == true || SkillManager.CurrentSkillId == 6)
                    {
                        BattleUtils.TriggerAttack(m_pAttackInfo, pCharacter, Boom_Skill);
                    }
                }

                if ((SkillManager.DO_bomb_Action == false && SkillManager.CurrentSkillId == 7) && flag)
                {
                    rr++;
                    if (rr < 2)
                    {
                        this.Stop();
                    }
                }
            }

            //xue move from BombView.cs
            BombStatus++;
            SkillManager.bomb_num--;
            if (Network.gamemode == BattleType.AI_1v1 && SkillManager.bomb_num <= 0)
            {
                if (GameGOW.Get().BattleMgr.m_bIsInBattle == true)
                {
                    if (GameGOW.Get().BattleMgr.m_pCurrentPlayer.ID == Network.playerid)
                    {
                        EventDispatcher.DispatchEvent("EventHideBattleJoyStickUI", null, null);
                    }
                    else
                    {
                        EventDispatcher.DispatchEvent("EventShowBattleJoyStickUI", null, null);
                    }

                    GameGOW.Get().BattleMgr.ChangeController_Quick();
                    if (GameGOW.Get().BattleMgr.Get_InBattle() == true && GameGOW.Get().BattleMgr.m_iCurrentRoundPlayerIndex % 2 == 1)
                    {
                        GameGOW.Get().AIMgr.Act_AI_1v1();
                    }
                }
            }
            else if (Network.NetworkMode == true)
            {
            }
            else
            {
                if (SkillManager.bomb_num <= 0)
                {
                    GameGOW.Get().BattleMgr.ChangeController();
                }
            }
        }
コード例 #14
0
        IEnumerator DelayBomb(CharacterLogic A, AttackBaseData attack, float delay_time)         //延迟发炮,delay_time 为延迟时间
        {
            yield return(new WaitForSeconds(delay_time));

            GameGOW.Get().BombMgr.ThrowBomb(A, attack as AttackBombData, false);
        }
コード例 #15
0
 public void Throw_two_Bomb(CharacterLogic A, AttackBaseData AA)
 {
     GameGOW.Get().BombMgr.ThrowBomb(A, AA as AttackBombData, true);
     StartCoroutine(DelayBomb(A, AA, 0.2f));
 }
コード例 #16
0
 public void Throw_cure_bomb(CharacterLogic A, AttackBaseData AA)
 {
     kill_bomb = -1.0f;
     Throw_one_Bomb(A, AA);
 }
コード例 #17
0
        private void DoChangeController()
        {
            Debug.Log("HHHHHHHHHHHHHH                  1" + "here");
            if (!m_bIsInBattle)
            {
                return;
            }

            m_iCurrentRoundTime = ROUND_TIME;
            m_iCurrentRoundPlayerIndex++;

            GameGOW.Get().MapMgr.RandomWind();
            //  Debug.Log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ GameGOW.Get().MapMgr.WindPercent+"BBBBBBBBBBB"+Network.Wind);
            GameGOW.Get().PlayWind(2, -90f * GameGOW.Get().MapMgr.WindPercent, true);

            //   Debug.Log("CCCCCC  Wind wind_range wind_step "+ GameGOW.Get().MapMgr.WindPercent+" "+  GameGOW.Get().MapMgr.Wind + " "+ GameGOW.Get().MapMgr.wind_range + "  "+ GameGOW.Get().MapMgr.wind_step );


            if (m_iCurrentRoundPlayerIndex == m_iPlayerCount)
            {
                m_iCurrentRoundPlayerIndex = 0;
                m_iCurrentRound++;
            }
#if xue
            while (m_stBattleInfo != null && m_stBattleInfo.m_listPlayers != null && GameGOW.Get().CharacterMgr.GetCharacterByUid(m_stBattleInfo.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID) != null &&
                   GameGOW.Get().CharacterMgr.GetCharacterByUid(m_stBattleInfo.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID).IsLiving == false)
            {
                m_iCurrentRoundPlayerIndex++;
                if (m_iCurrentRoundPlayerIndex == m_iPlayerCount)
                {
                    m_iCurrentRoundPlayerIndex = 0;
                    m_iCurrentRound++;
                }
            }
#endif

            int uid;
            if (Network.gamemode == BattleType.AI_1v1)
            {
                uid = m_stBattleInfo.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID;
            }
            else if (Network.NetworkMode == true)
            {
                uid = Network.next_playerid;
                for (int i = 0; i < GameGOW.Get().BattleMgr.m_stBattleInfo.m_listPlayers.Count; i++)
                {
                    if (GameGOW.Get().BattleMgr.m_stBattleInfo.m_listPlayers[i].m_iPlayerUID == uid)
                    {
                        m_iCurrentRoundPlayerIndex = i;
                        break;
                    }
                }
            }
            else
            {
                uid = m_stBattleInfo.m_listPlayers[m_iCurrentRoundPlayerIndex].m_iPlayerUID;
            }

            SkillManager.CurrentSkillId = 0;
            Network.InitRound();
            m_pCurrentPlayer = GameGOW.Get().CharacterMgr.GetCharacterByUid(uid);
            m_pCurrentPlayer.m_pInfo.m_bIsInRound = true;
            //m_pCurrentPlayer.m_pInfo.m_iMoveEnergy = m_pCurrentPlayer.m_pInfo.m_iMaxMoveEnergy;
            m_pCurrentPlayer.m_pInfo.m_iMoveEnergy = Math.Min(m_pCurrentPlayer.m_pInfo.m_iMaxMoveEnergy,
                                                              m_pCurrentPlayer.m_pInfo.m_iMoveEnergy + m_pCurrentPlayer.m_pInfo.m_iAddEnergy);
            EventDispatcher.DispatchEvent("EventChangeController", null, new ChangeControllerEvent(uid));
        }
コード例 #18
0
ファイル: BattleUtils.cs プロジェクト: zhanpang/test_tank
        static public int TriggerAttack(AttackInfo attackInfo, CharacterLogic dstObject, int Boom_Skill)
        {
            CharacterLogic pSrcObject = attackInfo.m_pFight;
            int            iDamage    = 0;
            DamageType     eType      = DamageType.NORMAL;
            float          Range_boom = GameGOW.Get().DataMgr.GetBombDataByID(1).m_fBombRange;

            // SkillManager._debug("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW  WWWW   " + attackInfo.m_Position.x + "-" + attackInfo.m_Position.y);
            // SkillManager._debug("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW  WWWW   " + dstObject.Position.x + "-" + dstObject.Position.y);
            // SkillManager._debug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCC  " + get_distance(attackInfo.m_Position, dstObject.Position));

            if (get_distance(attackInfo.m_Position, dstObject.Position) < Range_boom * 1.7 / 3)  //
            {
                iDamage = GameGOW.Get().DataMgr.GetSkillINstructionDataByID(Boom_Skill == 0 ? 0 : 100 + SkillManager.CurrentSkillId).center_damage;
            }

            else if (get_distance(attackInfo.m_Position, dstObject.Position) < Range_boom)
            {
                double temp = (Range_boom - get_distance(attackInfo.m_Position, dstObject.Position)) * (3 / 1.7) / (Range_boom);
                iDamage = (int)(GameGOW.Get().DataMgr.GetSkillINstructionDataByID(Boom_Skill == 0 ? 0 : 100 + SkillManager.CurrentSkillId).center_damage *temp);
                if (iDamage >= 0 && iDamage < 28)
                {
                    iDamage = 28;
                }
            }
            else
            {
                if (Boom_Skill == 6)
                {
                    iDamage = -28;
                }
                else
                {
                    iDamage = 28;
                }
            }

            /*
             * if (attackInfo.m_bIsCenterDamage)
             * {
             *  iDamage = GameGOW.Get().DataMgr.GetSkillINstructionDataByID(SkillManager.CurrentSkillId == 0 ? 0 : 100 + SkillManager.CurrentSkillId).center_damage;
             * }
             * else
             * {
             *  iDamage = GameGOW.Get().DataMgr.GetSkillINstructionDataByID(SkillManager.CurrentSkillId == 0 ? 0 : 100 + SkillManager.CurrentSkillId).damage;
             * }
             * /*
             * if(iDamage < 0)
             * {
             *  iDamage = 0;
             * }
             */


            if (Network.gamemode == BattleType.AI_1v1 || Network.NetworkMode == false)
            {
                int   hp = dstObject.m_pInfo.m_iHP;
                float DD = iDamage;
                hp -= (int)DD;
                if (hp > dstObject.m_pInfo.m_iMaxHP)
                {
                    hp = dstObject.m_pInfo.m_iMaxHP;
                }
                dstObject.OnDamage(hp, iDamage, eType);
            }
            else if (Network.NetworkMode == true)
            {
                if (GameGOW.Get().BattleMgr.m_pCurrentPlayer.ID == Network.playerid)
                {
                    Network.Send_Damage(dstObject.ID, iDamage);
                }
            }

            return(iDamage);
        }