/// <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); }
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); } }
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); } } }
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; } }
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); }
/// <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); } }
/// <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)); }
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); } }
/// <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); }
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)); } }
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(); }