Ejemplo n.º 1
0
    /// <summary>
    /// 创建角色
    /// </summary>
    /// <param name="characterData"></param>
    public void CreateCharacter(CharacterDataBean characterData)
    {
        if (!handler_Gold.GetTargetGold(transform.position))
        {
            //没有金币了也不创建角色
            return;
        }
        UserDataBean userData = handler_GameData.GetUserData();

        if (characterData.characterType == CharacterTypeEnum.Player)
        {
            //如果超过上线则不创建
            if (manager.GetPlayerCharacterNumber() >= userData.pirateNumber)
            {
                return;
            }
        }
        if (characterData.characterType == CharacterTypeEnum.Enemy)
        {
            //如果超过上线则不创建
            if (manager.GetEnemyCharacterNumber() >= numberForEnemy)
            {
                return;
            }
        }

        Vector3 startPosition = handler_Scene.GetStartPosition(characterData.characterType);

        manager.CreateCharacter(startPosition, characterData);
    }
Ejemplo n.º 2
0
    public void CreateCharacter(Vector3 startPosition, CharacterDataBean characterData)
    {
        GameObject objModel = null;

        if (characterData.characterType == CharacterTypeEnum.Player)
        {
            objModel = objCharacterPlayerModel;
        }
        else if (characterData.characterType == CharacterTypeEnum.Enemy)
        {
            objModel = objCharacterEnemyModel;
        }
        GameObject   objCharacter = Instantiate(gameObject, objModel, startPosition);
        CharacterCpt characterCpt = objCharacter.GetComponent <CharacterCpt>();

        characterCpt.SetCharacterData(characterData);

        if (characterData.characterType == CharacterTypeEnum.Player)
        {
            listPlayer.Add(characterCpt);
        }
        else if (characterData.characterType == CharacterTypeEnum.Enemy)
        {
            listEnemy.Add(characterCpt);
        }
    }
Ejemplo n.º 3
0
    public void OnTriggerEnter(Collider other)
    {
        CharacterCpt characterCpt = other.GetComponent <CharacterCpt>();

        if (characterCpt)
        {
            //不可以攻击自己人
            CharacterDataBean characterData = characterCpt.GetCharacterData();
            if (characterData.characterType == this.characterType)
            {
                return;
            }
            //死人不攻击
            if (characterData.life <= 0)
            {
                return;
            }
            characterCpt.AddLife(-bulletDamage, out bool isDead);
            //如果死亡
            if (isDead)
            {
                //炸飞
                characterCpt.BlowUp(transform.position);
            }
            else
            {
                //没死的话展示生命值
                characterCpt.ShowLife(3);
            }
        }
    }
Ejemplo n.º 4
0
    public void ChangeGameStatus(GameStatusEnum gameStatus)
    {
        GetGameData().gameStatus = gameStatus;
        switch (gameStatus)
        {
        case GameStatusEnum.GamePre:
            //扫描地形
            //AstarPath.active.ScanAsync();
            //初始化数据
            handler_GameData.GetPlayerInitData(out float playerSpeed, out int playerLife);
            GameBean gameData = new GameBean(playerSpeed, playerLife);
            SetGameData(gameData);
            manager_UI.RefreshAllUI();
            //打开UI
            manager_UI.OpenUIAndCloseOther <UIGameStart>(UIEnum.GameStart);
            //创建金币
            GameLevelBean gameLevelData = GetGameLevelData();
            handler_Gold.CreateGold(gameLevelData.gold_pile, gameLevelData.gold_number, gameLevelData.gold_id);
            break;

        case GameStatusEnum.GameIng:
            //开启角色创建
            UserDataBean      userData            = handler_GameData.GetUserData();
            CharacterDataBean playerCharacterData = new CharacterDataBean(CharacterTypeEnum.Player)
            {
                life      = userData.life + GetGameData().playerForLife,
                maxLife   = userData.life + GetGameData().playerForLife,
                moveSpeed = userData.speed + GetGameData().GetPlayerSpeed()
            };
            CharacterDataBean enemyCharacterData = new CharacterDataBean(CharacterTypeEnum.Enemy)
            {
                life      = GetGameLevelData().enemy_life,
                maxLife   = GetGameLevelData().enemy_life,
                moveSpeed = GetGameLevelData().enemy_speed
            };
            StartCoroutine(handler_Character.InitCreateCharacter(playerCharacterData, enemyCharacterData, GetGameLevelData().enemy_number));
            //创建船
            Action enemyShipCallBack = () =>
            {
                //开启敌舰自动攻击
                handler_Ship.OpenShipFireAutoForEnemy();
            };
            handler_Ship.CreateShip(CharacterTypeEnum.Player, 1, null);
            handler_Ship.CreateShip(CharacterTypeEnum.Enemy, GetGameLevelData().enemy_ship_id, enemyShipCallBack);
            //开启经验计算
            StartCoroutine(CoroutineForLevelProgress());
            break;

        case GameStatusEnum.GameEnd:
            //打开UI
            manager_UI.OpenUIAndCloseOther <UIGameEnd>(UIEnum.GameEnd);
            CleanGameData();
            break;
        }
    }
Ejemplo n.º 5
0
    public void OnClickForEnemyNumber()
    {
        List <CharacterCpt> listData = handler_Character.GetCharacter(CharacterTypeEnum.Enemy);

        if (CheckUtil.ListIsNull(listData))
        {
            return;
        }
        CharacterDataBean enemyCharacterData = listData[0].GetCharacterData().Clone();

        handler_Character.CreateCharacter(enemyCharacterData);
    }
Ejemplo n.º 6
0
    /// <summary>
    /// 清除NPC
    /// </summary>
    /// <param name="characterCpt"></param>
    public void CleanCharacter(CharacterCpt characterCpt)
    {
        CharacterDataBean characterData = characterCpt.GetCharacterData();

        if (characterData.characterType == CharacterTypeEnum.Player)
        {
            listPlayer.Remove(characterCpt);
        }
        else if (characterData.characterType == CharacterTypeEnum.Enemy)
        {
            listEnemy.Remove(characterCpt);
        }
    }
Ejemplo n.º 7
0
    /// <summary>
    /// 初始化创建角色 用于游戏刚开始
    /// </summary>
    public IEnumerator InitCreateCharacter(CharacterDataBean playerCharacterData, CharacterDataBean enemyCharacterData, int numberForEnemy)
    {
        this.numberForEnemy = numberForEnemy;
        yield return(manager.InitCharacterData());

        //创建一个友方海盗
        CreateCharacter(playerCharacterData);

        //延迟创建敌方海盗
        StartCoroutine(CoroutineForCreateEnmeyCharacter(enemyCharacterData));
        StartCoroutine(CoroutineForEnemySpeedChange());
        StartCoroutine(CoroutineForEnemyLifeChange(enemyCharacterData));
    }
Ejemplo n.º 8
0
    public IEnumerator CoroutineForEnemyLifeChange(CharacterDataBean enemyCharacterData)
    {
        isBuildEnemy = true;
        GameLevelBean gameLevelData = handler_Game.GetGameLevelData();

        while (isBuildEnemy)
        {
            yield return(new WaitForSeconds(gameLevelData.enemy_life_interval));

            enemyCharacterData.AddMaxLife(gameLevelData.enemy_life_incremental);
            SetCharacterLife(CharacterTypeEnum.Enemy, enemyCharacterData.maxLife);
        }
    }
Ejemplo n.º 9
0
 /// <summary>
 /// 设置角色数据
 /// </summary>
 /// <param name="characterData"></param>
 public void SetCharacterData(CharacterDataBean characterData)
 {
     this.characterData = characterData;
     if (characterData.characterType == CharacterTypeEnum.Player)
     {
         gameObject.tag = "Player";
     }
     else if (characterData.characterType == CharacterTypeEnum.Enemy)
     {
         gameObject.tag = "Enemy";
     }
     SetIntentForGoToIsland();
     RefreshCharacter();
     SetBoat(characterData.characterType);
 }
Ejemplo n.º 10
0
    public IEnumerator CoroutineForCreateEnmeyCharacter(CharacterDataBean baseCharacterData)
    {
        isBuildEnemy = true;
        GameLevelBean gameLevelData = handler_Game.GetGameLevelData();

        while (isBuildEnemy)
        {
            CharacterDataBean enemyCharacterData = baseCharacterData.Clone();
            CreateCharacter(enemyCharacterData);
            if (gameLevelData.enemy_build_interval <= 0)
            {
                gameLevelData.enemy_build_interval = 1;
            }
            yield return(new WaitForSeconds(gameLevelData.enemy_build_interval));
        }
    }
Ejemplo n.º 11
0
    public void OnClickForAddNumber()
    {
        GameBean        gameData        = uiComponent.handler_Game.GetGameData();
        GameDataHandler gameDataHandler = uiComponent.handler_GameData;
        UserDataBean    userData        = gameDataHandler.GetUserData();

        int maxLevel = uiComponent.handler_GameData.GetLevelMaxForNumber();

        gameDataHandler.GetLevelLevelUpDataForNumber(gameData.levelForPirateNumber, out int addNumber, out long preNumberGold);

        if (!gameData.HasEnoughGold(preNumberGold))
        {
            //钱不够
            uiComponent.manager_Msg.ShowMsg(GameCommonInfo.GetUITextById(1001));
            return;
        }
        bool isLevelUp = gameData.LevelUpForPlayerPirateNumber(maxLevel, addNumber);

        if (!isLevelUp)
        {
            //升级失败
            uiComponent.manager_Msg.ShowMsg(GameCommonInfo.GetUITextById(1002));
            return;
        }
        //支付金币
        gameData.PayGold(preNumberGold);
        //生成海盗
        for (int i = 0; i < addNumber; i++)
        {
            CharacterDataBean playerCharacterData = new CharacterDataBean(CharacterTypeEnum.Player)
            {
                life      = userData.life + gameData.playerForLife,
                maxLife   = userData.life + gameData.playerForLife,
                moveSpeed = userData.speed + gameData.GetPlayerSpeed()
            };
            uiComponent.handler_Character.CreateCharacter(playerCharacterData);
        }
        RefreshUI();
    }