public void OnCharacterClick(Pipe_Character character) { if (GameManager.Instance.Game.GetGameState() == EGameState.PlayersTurn) { if (_selectedCharacter) { if (_selectedCharacter == character) { character.Unselect(); _selectedCharacter = null; return; } else { _selectedCharacter.Unselect(); _selectedCharacter = null; } } if (character.Mana.IsFull()) { if (!character.IsSelectable()) { character.TryApplyPowerup(); } else { character.Select(); _selectedCharacter = character; } } } }
public bool OnSlotTouched(SSlot slot) { if (_selectedCharacter) { if (_selectedCharacter == slot.Pipe) { _selectedCharacter.Unselect(); _selectedCharacter = null; } else { bool applied = _selectedCharacter.TryApplyPowerup(slot); if (applied) { _selectedCharacter.Unselect(); _selectedCharacter = null; } } return(true); // can't swipe if powerup selected } else { return(false); } }
public void AddCharacters(GameBoard board, List <SSlot> emptySlots) { _selectedCharacter = null; _characters.Clear(); emptySlots = Helpers.ShuffleList <SSlot>(emptySlots); AddCharacter("Character_0", board, emptySlots); AddCharacter("Character_1", board, emptySlots); AddCharacter("Character_2", board, emptySlots); }
public void OnCharacterDied(Pipe_Character character) { if (_selectedCharacter == character) { character.Unselect(); _selectedCharacter = null; } _characters.Remove(character); }
private float CreateAttack(GameBoard board, Enemy enemy) { List<List<SSlot>> slots = GetSlotsWithCharactersInFront(board, enemy, true); float maxTime = 0; for (int i = 0; i < slots.Count; ++i) { Vector3 finalPos = Vector3.zero; SSlot firstSlot = slots[i][0]; bool attackCharacter = false; Pipe_Character character = null; if (!firstSlot) { // attack lives panel firstSlot = slots[i][1]; finalPos = firstSlot.transform.position; finalPos.y -= 1.5f; } else { // attack character attackCharacter = true; finalPos = firstSlot.transform.position; character = firstSlot.Pipe.GetComponent<Pipe_Character>(); } int slotX = firstSlot.X; Vector3 startPos = board.AEnemies.Slots[slotX].transform.position; // instantiate attack beam finalPos.z = -7; startPos.z = -7; GameObject attackObject = (GameObject)GameObject.Instantiate(AttackPrefab, startPos, Quaternion.identity, board.AAttacks.ObjectsContainer); // fly to slot finalPos.z = -7; float distance = Mathf.Abs(finalPos.y - startPos.y); float speed = 0.05f; // per unit float flyTime = distance * speed; if (maxTime < flyTime) { maxTime = flyTime; } LeanTween.move(attackObject, finalPos, flyTime) .setEaseOutSine() .setOnComplete(() => { GameObject.Destroy(attackObject); if (attackCharacter) { ApplyAttackOnCharacter(firstSlot, character, enemy.Color, Power); } else { ApplyAttackOnLivesPanel(enemy.Color, Power); } }); // } return maxTime; }
private void AddCharacter(string characterId, GameBoard board, List <SSlot> emptySlots) { if (emptySlots.Count == 0) { Debug.LogError("NO SLOTS FOR CHARACTER"); return; } GameObject obj = board.GetPool().GetObjectFromPool(characterId, board.SlotsContainer); Pipe_Character character = obj.GetComponent <Pipe_Character>(); SSlot slot = emptySlots[0]; emptySlots.RemoveAt(0); slot.SetPipe(character); character.InitCharacter(1); character.PlayAddAnimation(); _characters.Add(character); }
private void ApplyAttackOnCharacter(SSlot slot, Pipe_Character character, int acolor, int power) { character.DealDamage(slot, acolor, power); }