Пример #1
0
    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;
                }
            }
        }
    }
Пример #2
0
 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);
     }
 }
Пример #3
0
 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);
 }
Пример #4
0
 public void OnCharacterDied(Pipe_Character character)
 {
     if (_selectedCharacter == character)
     {
         character.Unselect();
         _selectedCharacter = null;
     }
     _characters.Remove(character);
 }
Пример #5
0
 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;
 }
Пример #6
0
    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);
    }
Пример #7
0
 private void ApplyAttackOnCharacter(SSlot slot, Pipe_Character character, int acolor, int power)
 {
     character.DealDamage(slot, acolor, power);
 }