IEnumerator pursueCharacter(CharacterBehavior chara, List <GameObject> opponentObjectives, int movementsThisTurn) { yield return(new WaitForSeconds(1.5f)); for (int i = 0; i < movementsThisTurn; i++) { chara.GetComponent <CharacterBehaviorIHM>().characterSelection(); yield return(new WaitForSeconds(0.75f)); if (gManager.adversaireAdjacent) { yield return(new WaitForSeconds(1.5f)); gManager.combatManager.combat(opponentObjectives[i]); yield return(new WaitForSeconds(1.5f)); break; } else if (opponentObjectives.Count == 1) { Debug.Assert(false, "ScriptedPlayerBehavior, pursueCharacter: Créer le chemin vers la cible"); gManager.actionPoints = movementsThisTurn + 1; //opponentObjectives.Insert(0, null); StartCoroutine(pursueCharacter(chara, opponentObjectives, movementsThisTurn + 1)); break; } // Déplacement if (opponentObjectives[i].GetComponent <CaseBehavior>() != null) { opponentObjectives[i].GetComponent <CaseBehavior>().cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget(); yield return(new WaitForSeconds(1.5f)); } } yield return(new WaitForSeconds(3)); }
IEnumerator playScriptedMoves(CharacterBehavior chara, List <GameObject> opponentObjectives) { yield return(new WaitForSeconds(1.5f)); int steps = opponentObjectives.Count; for (int i = 0; i < steps; i++) { chara.GetComponent <CharacterBehaviorIHM>().characterSelection(); yield return(new WaitForSeconds(0.75f)); // Déplacement if (opponentObjectives[i].GetComponent <CaseBehavior>() != null) { opponentObjectives[i].GetComponent <CaseBehavior>().cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget(); yield return(new WaitForSeconds(0.75f)); } // Combat if (opponentObjectives[i].GetComponent <CharacterBehavior>() != null) { yield return(new WaitForSeconds(1.5f)); gManager.combatManager.combat(opponentObjectives[i]); } yield return(new WaitForSeconds(1.5f)); } yield return(new WaitForSeconds(3)); }
// TODO: allow to reinitialise gameManager in order to reload during an ongoing game (only needed for debug) #region reset private void clearTokenData() { GameObject[] tokens = GameObject.FindGameObjectsWithTag("Token"); foreach (GameObject token in tokens) { Token t = token.GetComponent <Token>(); t.caseActuelle = null; t.tokenPlace = false; t.horsJeu = false; if (t.cibleToken != null) { t.cibleToken.tokenAssociated = null; t.cibleToken.locked = false; } t.cibleToken = null; t.ciblesTokens.Clear(); t.selected = false; t.deplacementRestant = 0; if (token.GetComponent <CharacterBehavior>() != null) { CharacterBehavior chara = token.GetComponent <CharacterBehavior>(); chara.deplacementRestant = chara.MOVE_VALUE; chara.tokenTranporte = null; chara.actionPoints = 0; chara.wounded = false; chara.freshlyHealed = false; chara.freshlyWounded = false; chara.killed = false; chara.GetComponent <TokenIHM>().getTokenIcon().GetComponent <SpriteRenderer>().color = Color.white; } token.GetComponent <TokenIHM>().displayToken(); token.GetComponent <Collider>().enabled = true; } }
public CharacterBehavior addCharacter(Vector3 pos, int id) { Data.Instance.events.OnAddNewPlayer(id); CharacterBehavior newCharacter = null; foreach (CharacterBehavior cb in deadCharacters) { if (cb.player.id == id) { newCharacter = cb; } } if (newCharacter == null) { newCharacter = Instantiate(character, Vector3.zero, Quaternion.identity) as CharacterBehavior; } else { deadCharacters.Remove(newCharacter); } Player player = newCharacter.GetComponent <Player> (); player.Init(id); player.SetInvensible(3); player.id = id; newCharacter.Revive(); characters.Add(newCharacter); totalCharacters = characters.Count; newCharacter.transform.position = pos; Data.Instance.events.OnCharacterInit(id); return(newCharacter); }
void OnAutomataCharacterDie(CharacterBehavior automataCharacter) { CharacterBehavior parentCharacter = null; CharacterBehavior childCharacter = null; foreach (CharacterBehavior cb1 in characters) { foreach (CharacterBehavior cb2 in cb1.controls.childs) { if (cb2 == automataCharacter) { parentCharacter = cb1; childCharacter = cb2; parentCharacter.controls.StopAllCoroutines(); childCharacter.GetComponent <CharacterAutomata> ().Reset(); } } } if (childCharacter != null) { parentCharacter.controls.RemoveChild(childCharacter); } deadCharacters.Remove(automataCharacter); }
private void ExecuteActionDoor(ActionDoor action) { if (gManager.onlineGameInterface.WaitingForExpectedState()) { gManager.onlineGameInterface.ForceEndReplayAction(); return; } CaseBehavior actionCharacterCell = gManager.getCase(action.y1, action.x1).GetComponent <CaseBehavior>(); CharacterBehavior c = actionCharacterCell.getNonWoundedCharacter(); Debug.Assert(c != null); CharacterBehaviorIHM character = c.GetComponent <CharacterBehaviorIHM>(); character.characterSelection(); if (action.action == ActionType.DESTROYDOOR) { Debug.Assert(character is CB_GuerrierIHM); character.GetComponent <CB_GuerrierIHM>().briserHerse(); } else { Debug.Assert(character is CB_VoleuseIHM); character.GetComponent <CB_VoleuseIHM>().changerEtatHerse(); } gManager.onlineGameInterface.ForceEndReplayAction(); }
void Start() { _character = gameObject.GetComponentInParent <CharacterBehavior>(); if (_character != null) { _jetpack = _character.GetComponent <CharacterJetpack>(); } }
public void Init(CharacterBehavior cb) { this.cb = cb; Invoke("MoveLoop", moveRandomTry * 2); Invoke("ShootLoop", shootRandomTry * 2); Invoke("JumpLoop", jumpRandomTry * 2); cb.GetComponent <CharacterControls>().isAutomata = true; }
void Start() { _character = gameObject.GetComponentInParent <CharacterBehavior>(); if (gameObject.GetComponentInParent <Tank>() != null) { _tank = _character.GetComponent <Tank>(); } }
void fireballConsequences() { Debug.Assert(gManager.actionCharacter == associatedItem.tokenHolder.gameObject, "Action Character is not set"); fireballTarget.GetComponent <CharacterBehaviorIHM>().killCharacterIHM(); fireballFired = false; ((Item_BatonDeBouleDeFeu)associatedItem).endfireballaction(); destroyItem(); gManager.onlineGameInterface.EndReplayAction(); }
public CharacterBehavior AddChildPlayer(CharacterBehavior parentPlayer) { int id = parentPlayer.controls.childs.Count + 4; CharacterBehavior newCharacter = addCharacter(parentPlayer.transform.position, id); newCharacter.controls.isAutomata = true; parentPlayer.controls.AddNewChild(newCharacter); newCharacter.GetComponent <CharacterAutomata> ().Init(); return(newCharacter); }
void AddAutomata(int avatarID) { CharacterBehavior cb = Game.Instance.level.charactersManager.AddAutomata(avatarID); if (cb == null) { return; } cb.gameObject.AddComponent <Automata>(); cb.GetComponent <Automata>().Init(cb); }
void Update() { if (characterOnRotationMechanism()) { if (rotationActionReminder == null) { CharacterBehavior character = associatedCase.getMainCharacter(); if (character.GetComponent <CharacterBehaviorIHM>().isAtStandardScale()) { GameObject arrow = (GameObject)Instantiate(rotationArrowPrefab, character.transform.position, rotationArrowPrefab.transform.rotation); if (clockwiseRotation) { arrow.GetComponent <SpriteRenderer>().flipX = true; } rotationActionReminder = arrow.transform; rotationActionReminder.SetParent(character.transform); stdScale = arrow.transform.localScale; arrow.transform.localScale = neutralScale; } } else { if (showRotationAnimationFeedback()) { rotationActionReminder.localScale = stdScale; if (clockwiseRotation) { angleArrow -= 100.0f * Time.deltaTime; } else { angleArrow += 100.0f * Time.deltaTime; } angleArrow = angleArrow % 360.0f; if (angleArrow < 0) { angleArrow += 360; } rotationActionReminder.rotation = Quaternion.Euler(0, 0, angleArrow); } else { rotationActionReminder.localScale = neutralScale; } } } else { if (rotationActionReminder != null) { Destroy(rotationActionReminder.gameObject); } } }
void MoveLoop() { if (Game.Instance.state != Game.states.GAME_OVER && CanDoIt()) { StopAllCoroutines(); int rand = Random.Range(0, 100); if (rand < 70) { if (cb.transform.localPosition.x < 0) { StartCoroutine(Move(1)); } else { StartCoroutine(Move(-1)); } } else { cb.GetComponent <CharacterControls>().MoveInX(0); } } Invoke("MoveLoop", moveRandomTry); }
private void ExecuteActionMove(ActionMove action) { if (gManager.onlineGameInterface.WaitingForExpectedState()) { gManager.onlineGameInterface.ForceEndReplayAction(); return; } CharacterBehavior chara = GetTokenByNameAndPlayerId(action.tokenName, action.playerId).GetComponent <CharacterBehavior>(); CharacterBehaviorIHM charaIHM = chara.GetComponent <CharacterBehaviorIHM>(); if (!chara.selected) { charaIHM.characterSelection(); } // synchronize carried token if (gManager.onlineGameInterface.IsCarrier(action.tokenId)) { int carriedId = gManager.onlineGameInterface.GetCarriedToken(action.tokenId); Token carriedToken = GetTokenById(carriedId); if (chara.tokenTranporte != null && chara.tokenTranporte.GetComponent <Token>() == carriedToken) { charaIHM.deposerToken(); } if (chara.tokenTranporte == null) { charaIHM.ramasserToken(carriedToken.gameObject); } } else { if (chara.tokenTranporte != null) { charaIHM.deposerToken(); } } CaseBehavior target = gManager.getCase(action.y, action.x).GetComponent <CaseBehavior>(); target.cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget(); // jump will automatically call end movement // for simple walk, end movement is called when leaving movingCharacterContinue state. }
private Transform instantiateSmallFighterSprite(Transform side, CharacterBehavior fighter, Vector3 position, bool rightSide) { GameObject instanceFighter = (GameObject)Instantiate(gManager.fighterPrefab, position, Quaternion.identity); Transform fighterDisplay = instanceFighter.transform; fighterDisplay.parent = side; if (rightSide) { fighterDisplay.localScale = new Vector3(1, 1, 1); Vector3 mirror = new Vector3(-1, 1, 1); fighterDisplay.Find("FighterToken").GetComponent <Image>().sprite = fighter.GetComponent <SpriteRenderer>().sprite; //fighterDisplay.Find("FighterToken/FighterName").localScale = mirror; //fighterDisplay.Find("CombatItem1Name").localScale = mirror; fighterDisplay.Find("CombatValue").localScale = mirror; fighterDisplay.Find("CombatBonus").localScale = mirror; } return(fighterDisplay); }
private void ExecuteActionCombatEnd(ActionCombatEnd action) { if (gManager.onlineGameInterface.WaitingForExpectedState()) { gManager.onlineGameInterface.ForceEndReplayAction(); return; } if (gManager.onlineGameInterface.GetCurrentOnlineState() == "movingCharacter") // it must be a kill by fireballwand { if (!fireballTargetsDealtWith) // direct kill notification -> execute the fireball { CharacterBehavior wizard = GetTokenByNameAndPlayerId("Wizard", action.winnerId).GetComponent <CharacterBehavior>(); Debug.Assert(wizard.tokenTranporte != null); Item_BatonDeBouleDeFeu_IHM fireballwand = wizard.tokenTranporte.GetComponent <Item_BatonDeBouleDeFeu_IHM>(); Debug.Assert(fireballwand != null); Debug.Assert(action.killedIds.Count == 1 && action.woundedIds.Count == 0); CharacterBehavior target = GetTokenById(action.killedIds[0]).GetComponent <CharacterBehavior>(); wizard.GetComponent <CharacterBehaviorIHM>().characterSelection(); fireballwand.readyFireballGUI(); fireballwand.fireball(target); fireballTargetsDealtWith = true; } else // secondary kill notification { Multi.Logger.Instance.Log("LOG", "Action Skipped: some wounded token dropped has died"); gManager.onlineGameInterface.ForceEndReplayAction(); } } else // combat result { Multi.Logger.Instance.Log("LOG", "Action Skipped: combat result"); gManager.onlineGameInterface.ForceEndReplayAction(); } }
void Start() { characterBehavior = gameObject.transform.parent.GetComponent <CharacterBehavior>(); rigidbody = characterBehavior.GetComponent <Rigidbody>(); }
private void loadTokens() { // set characters state foreach (var characterData in charactersData) { Token token = GameManager.gManager.GetTokenByNameAndOwnerIndex(characterData.name, characterData.playerIndex); CharacterBehavior chara = token.GetComponent <CharacterBehavior>(); Debug.Assert(chara != null); // Remplacement des valeurs chara.horsJeu = characterData.tokenHorsJeu; chara.tokenPlace = characterData.tokenPlace; chara.wounded = characterData.wounded; chara.freshlyWounded = characterData.freshlyWounded; chara.freshlyHealed = characterData.freshlyHealed; chara.killed = characterData.killed; chara.actionPoints = characterData.actionPoints; SetPreviousState(chara, characterData.previousRow, characterData.previousColumn, characterData.previousAssociatedCharacterName, characterData.previousAssociatedCharacterOwnerIndex); Debug.Assert(chara.transform.parent == GameObject.Find("Personnages").transform, "A character should be child of characterContainer by default"); SetTokenPosition(chara, characterData.row, characterData.column, characterData.associatedCharacterName, characterData.associatedCharacterOwnerIndex, characterData.indexRoomAssociated); if (!chara.isRemovedFromGame() && chara.freshlyHealed) { chara.GetComponent <TokenIHM>().getTokenIcon().GetComponent <SpriteRenderer>().color = Color.green; } } // set items state foreach (var itemData in itemsData) { Token token = GameManager.gManager.GetTokenByNameAndOwnerIndex(itemData.name, itemData.playerIndex); Item item = token.GetComponent <Item>(); Debug.Assert(item != null); // Remplacement des valeurs item.tokenPlace = itemData.tokenPlace; item.horsJeu = itemData.tokenHorsJeu; SetPreviousState(item, itemData.previousRow, itemData.previousColumn, itemData.previousAssociatedCharacterName, itemData.previousAssociatedCharacterOwnerIndex); Debug.Assert(item.transform.parent == GameObject.Find("Items").transform, "An item should be child of itemContainer by default"); SetTokenPosition(item, itemData.row, itemData.column, itemData.associatedCharacterName, itemData.associatedCharacterOwnerIndex, itemData.indexRoomAssociated); } // second pass to place token carried (cannot be done before the holders are placed). foreach (var characterData in charactersData) { if (characterData.tokenHeldName != null) { SetCarriedTokenPosition(characterData); } } // third pass to update previously held tokens' previous position foreach (GameObject g in GameObject.FindGameObjectsWithTag("Token")) { UpdatePreviousPosition(g.GetComponent <Token>()); } removeTargetOfTokensToBePlacedOnDiscoveredRoom(); }
void Update() { if (!_player.canMove) { return; } _player.SetHorizontalMove(CrossPlatformInputManager.GetAxis("Horizontal")); _player.SetVerticalMove(CrossPlatformInputManager.GetAxis("Vertical")); if ((CrossPlatformInputManager.GetButtonDown("Run") || CrossPlatformInputManager.GetButton("Run"))) { _player.RunStart(); } if (CrossPlatformInputManager.GetButtonUp("Run")) { _player.RunStop(); } if (CrossPlatformInputManager.GetButtonDown("Jump")) { _player.JumpStart(); } if (CrossPlatformInputManager.GetButtonUp("Jump")) { _player.JumpStop(); } if (_player.GetComponent <CharacterMelee>() != null) { if (CrossPlatformInputManager.GetButtonDown("Melee")) { _player.GetComponent <CharacterMelee>().Melee(); } } if (_player.GetComponent <CharacterShoot>() != null) { _player.GetComponent <CharacterShoot>().SetHorizontalMove(CrossPlatformInputManager.GetAxis("Horizontal")); _player.GetComponent <CharacterShoot>().SetVerticalMove(CrossPlatformInputManager.GetAxis("Vertical")); if (CrossPlatformInputManager.GetButtonDown("Fire")) { _player.GetComponent <CharacterShoot>().ShootOnce(); } if (CrossPlatformInputManager.GetButton("Fire")) { _player.GetComponent <CharacterShoot>().ShootStart(); } if (CrossPlatformInputManager.GetButtonUp("Fire")) { _player.GetComponent <CharacterShoot>().CmdShootStop(); } } if (_player.GetComponent <CharacterJetpack>() != null) { if ((CrossPlatformInputManager.GetButtonDown("Jetpack") || CrossPlatformInputManager.GetButton("Jetpack"))) { _player.GetComponent <CharacterJetpack>().CmdJetpackStart(); } if (CrossPlatformInputManager.GetButtonUp("Jetpack")) { _player.GetComponent <CharacterJetpack>().CmdJetpackStop(); } } }
private void displayFighter(CharacterBehavior fighter) { string prefix; Transform fighterDisplay = GetFighterSpriteTransform(fighter, out prefix); fighterDisplay.Find(prefix + "FighterSprite").GetComponent <Image>().sprite = fighter.GetComponent <CharacterBehaviorIHM>().fullCharacterSprite; fighterDisplay.Find(prefix + "FighterSprite").GetComponent <FadeSprite>().fighter = fighter; //fighterDisplay.Find(prefix+"FighterName").GetComponent<Image>().sprite = fighter.getTokenNameSprite(); fighterDisplay.Find(prefix + "CombatValue/Text").GetComponent <Text>().text = GetCombatValue(fighter).ToString(); int bonus = GetItemBonus(fighter); if (bonus > 0) { Debug.Assert(!fighter.wounded); fighterDisplay.Find(prefix + "CombatItemsBackground").gameObject.SetActive(true); fighterDisplay.Find(prefix + "CombatItem1Sprite").gameObject.SetActive(true); fighterDisplay.Find(prefix + "CombatItem1Sprite").GetComponent <Image>().sprite = fighter.tokenTranporte.GetComponent <ItemIHM>().getTokenIcon().GetComponent <SpriteRenderer>().sprite; //fighterDisplay.Find(prefix+"CombatItem1Name").gameObject.SetActive(true); //fighterDisplay.Find(prefix+"CombatItem1Name").GetComponent<Image>().sprite = fighter.tokenTranporte.GetComponent<ItemIHM>().getTokenNameSprite(); fighterDisplay.Find(prefix + "CombatBonus").gameObject.SetActive(true); fighterDisplay.Find(prefix + "CombatBonus/Text").GetComponent <Text>().text = "+" + bonus.ToString(); } else { fighterDisplay.Find(prefix + "CombatItemsBackground").gameObject.SetActive(false); fighterDisplay.Find(prefix + "CombatItem1Sprite").gameObject.SetActive(false); //fighterDisplay.Find(prefix+"CombatItem1Name").gameObject.SetActive(false); fighterDisplay.Find(prefix + "CombatBonus").gameObject.SetActive(false); } }
void checkAndExecuteExchange() { gManager.cameraMovementLocked = false; bool spotFound = false; GameObject newPoint = originalPoint; foreach (GameObject spot in gManager.exchangePoints) { if (isInteractableSpot(spot) && spot != originalPoint && Vector3.Distance(transform.position, spot.transform.position) < SNAP_DISTANCE) { newPoint = spot; spotFound = true; break; } } // Si le token n'est pas dirigé vers un emplacement différent, on le remet à son emplacement de départ if (!spotFound) { Debug.LogWarning("Not found"); transform.position = originalPoint.transform.position; } // Sinon, on le déplace vers son nouvel emplacement else { CharacterBehaviorIHM charaIHM = gManager.actionCharacter.GetComponent <CharacterBehaviorIHM>(); //if (!gManager.tokensInteractedWith.Contains(token)) gManager.tokensInteractedWith.Add(token); // Si un autre token se trouve déjà à cet endroit, échanger sa place avec celui-ci if (newPoint.GetComponent <ExchangePointUI>().isHoldingToken()) { Debug.Log("Echange"); TokenExchangeUI otherToken = newPoint.GetComponent <ExchangePointUI>().occupyingToken.GetComponent <TokenExchangeUI>(); otherToken.originalPoint = originalPoint; otherToken.transform.position = originalPoint.transform.position; originalPoint.GetComponent <ExchangePointUI>().occupyingToken = otherToken.gameObject; //if (!gManager.tokensInteractedWith.Contains(otherToken.token)) gManager.tokensInteractedWith.Add(otherToken.token); // Le token est déplacé vers l'emplacement de token transporté if (newPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot()) { charaIHM.deposerToken(); if (token.GetComponent <Token>().tokenHolder != null) { CharacterBehavior characterHoldingThisToken = token.GetComponent <Token>().tokenHolder; characterHoldingThisToken.GetComponent <CharacterBehaviorIHM>().deposerToken(); characterHoldingThisToken.GetComponent <CharacterBehaviorIHM>().ramasserToken(otherToken.token); } else { checkIfHoldingToken(token); otherToken.token.GetComponent <Token>().caseActuelle = currentCase.gameObject; } // Jouer le son de l'objet qui est ramassé GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenGetSound); charaIHM.ramasserToken(token); } // Le token est déplacé vers l'emplacement de sol else if (originalPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot()) { // Jouer le son de l'objet qui est déposé GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenDropSound); charaIHM.deposerToken(); if (otherToken.token.GetComponent <Token>().tokenHolder != null) { CharacterBehavior characterHoldingOtherToken = otherToken.token.GetComponent <Token>().tokenHolder; characterHoldingOtherToken.GetComponent <CharacterBehaviorIHM>().deposerToken(); characterHoldingOtherToken.GetComponent <CharacterBehaviorIHM>().ramasserToken(token); } else { checkIfHoldingToken(otherToken.token); token.GetComponent <Token>().caseActuelle = currentCase.gameObject; } charaIHM.ramasserToken(otherToken.token); } } // Sinon else { Debug.Log("Transfert"); // Déposer le token au sol et si un autre personnage est présent, lui associer if (originalPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot()) { // find if another character can hold the dropped item CharacterBehavior receiverCharacter = currentCase.getOtherMainCharacter(token.GetComponent <Token>().tokenHolder); // Jouer le son de l'objet qui est déposé GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenDropSound); charaIHM.deposerToken(); //Debug.Log(receiverCharacter); if (receiverCharacter != null) { receiverCharacter.GetComponent <CharacterBehaviorIHM>().ramasserToken(token); } token.GetComponent <Token>().caseActuelle = currentCase.gameObject; } // Récupérer le token else if (newPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot()) { // Si le token était déjà tenu par un autre personnage, les dissocier if (token.GetComponent <Token>().tokenHolder != null) { token.GetComponent <Token>().tokenHolder.GetComponent <CharacterBehaviorIHM>().deposerToken(); } // Sinon, si le token à ramasser est un personnage qui porte un objet, déposer son objet else { checkIfHoldingToken(token); } // Jouer le son de l'objet qui est ramassé GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenGetSound); charaIHM.ramasserToken(token); } else { Debug.LogError("TokenExchangeUI, checkAndExecuteExchange: Token non affilié"); } originalPoint.GetComponent <ExchangePointUI>().occupyingToken = null; } originalPoint = newPoint; transform.position = newPoint.transform.position; newPoint.GetComponent <ExchangePointUI>().occupyingToken = gameObject; // Recalculer le déplacement du personnage gManager.actionCharacter.GetComponent <CharacterBehaviorIHM>().recomputePossibleActionsIHM(false, false); } }