예제 #1
0
    void OnNextTurn()
    {
        countTillNextTurn -= 1;
        if (countTillNextTurn == 0)
        {
            turn -= 1;

            if (turn == 0)
            {
                GameControlTB.onNextTurnE -= OnNextTurn;
                UnitTB.onUnitDestroyedE   -= OnUnitDestroyed;
                delay = 0;
                DelayDestruct();
            }
            else
            {
                if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
                {
                    countTillNextTurn = UnitControl.activeFactionCount;
                }
                else
                {
                    countTillNextTurn = UnitControl.GetAllUnitCount();
                }
            }
        }
    }
예제 #2
0
    IEnumerator _OnNextTurn()
    {
        yield return(null);

        if (GameControlTB.GetTurnMode() == _TurnMode.SingleUnitPerTurn)
        {
            while (UnitControl.selectedUnit == null)
            {
                yield return(null);
            }
        }

        if (GameControlTB.IsPlayerTurn())
        {
            glow         = false;
            isPlayerTurn = true;
            BroadcastMessage("resetBool");
        }
        else
        {
            isPlayerTurn = false;
        }

        yield return(null);
    }
예제 #3
0
    void OnEndTurnButton()
    {
        if (GameControlTB.IsActionInProgress())
        {
            return;
        }

        if (GameControlTB.GetTurnMode() != _TurnMode.SingleUnitPerTurn)
        {
            if (GameControlTB.GetMoveOrder() == _MoveOrder.Free)
            {
                if (UnitControl.selectedUnit != null)
                {
                    UnitControl.selectedUnit.moved    = true;
                    UnitControl.selectedUnit.attacked = true;
                    UnitControl.MoveUnit(UnitControl.selectedUnit);
                }
            }
        }

        GameControlTB.OnEndTurn();
    }
예제 #4
0
    //buffer function for select when the selection is initiated by player, check turn mode condition before proceed
    public void ManualSelect()
    {
        //if not in target select phase for unitAbility
        if (!GridManager.IsInTargetTileSelectMode())
        {
            if (!GameControlTB.AllowUnitSwitching())
            {
                //Debug.Log("unit swtiching is lock");
                return;
            }

            _MoveOrder moveOrder = GameControlTB.GetMoveOrder();

            //if turn mode and turnOrder doesnt not support unit switching, return
            if (moveOrder != _MoveOrder.Free)
            {
                return;
            }

            _TurnMode turnMode = GameControlTB.GetTurnMode();
            if (turnMode == _TurnMode.FactionSingleUnitPerTurnAll)
            {
                if (unit.MovedForTheRound())
                {
                    Debug.Log("unit has been moved");
                    return;
                }
            }
            else if (turnMode == _TurnMode.SingleUnitPerTurn)
            {
                //Debug.Log("turn mode not allow switching");
                return;
            }
        }
        Select();
    }
예제 #5
0
 void OnEnable()
 {
     if (mode == _DelayMode.RealTime)
     {
         DelayDestruct();
     }
     else if (mode == _DelayMode.Round)
     {
         GameControlTB.onNewRoundE += OnNewRound;
     }
     else if (mode == _DelayMode.Turn)
     {
         GameControlTB.onNextTurnE += OnNextTurn;
         UnitTB.onUnitDestroyedE   += OnUnitDestroyed;
         if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
         {
             countTillNextTurn = UnitControl.activeFactionCount;
         }
         else
         {
             countTillNextTurn = UnitControl.GetAllUnitCount();
         }
     }
 }
예제 #6
0
    //apply a unit ability to the tile
    public void ApplyAbility(UnitAbility ability)
    {
        //spawn effect if any
        if (ability.effectTarget != null)
        {
            StartCoroutine(SpawnAbilityEffect(ability.effectTarget, ability.effectTargetDelay, pos));
        }

        //loop through the effect list and change the modifier
        //commented effect are disabled for tile
        foreach (EffectAttr effectAttr in ability.effectAttrs)
        {
            if (effectAttr.type == _EffectAttrType.HPDamage)
            {
                effectAttr.value = Random.Range(effectAttr.value, effectAttr.valueAlt);
                HPGainModifier  -= (int)effectAttr.value;
                if (unit != null)
                {
                    unit.ApplyDamage((int)effectAttr.value);
                }
            }
            else if (effectAttr.type == _EffectAttrType.HPGain)
            {
                effectAttr.value = Random.Range(effectAttr.value, effectAttr.valueAlt);
                HPGainModifier  += (int)effectAttr.value;
                if (unit != null)
                {
                    unit.ApplyHeal((int)effectAttr.value);
                }
            }
            else if (effectAttr.type == _EffectAttrType.APDamage)
            {
                effectAttr.value = Random.Range(effectAttr.value, effectAttr.valueAlt);
                APGainModifier  += (int)effectAttr.value;
                if (unit != null)
                {
                    unit.GainAP(-(int)effectAttr.value);
                }
            }
            else if (effectAttr.type == _EffectAttrType.APGain)
            {
                effectAttr.value = Random.Range(effectAttr.value, effectAttr.valueAlt);
                APGainModifier  -= (int)effectAttr.value;
                if (unit != null)
                {
                    unit.GainAP((int)effectAttr.value);
                }
            }
            else if (effectAttr.type == _EffectAttrType.Damage)
            {
                damageModifier += (int)effectAttr.value;
            }
            //~ else if(effectAttr.type==_EffectAttrType.MovementRange){
            //~ movementModifier+=(int)effectAttr.value;
            //~ }
            else if (effectAttr.type == _EffectAttrType.AttackRange)
            {
                attRangeModifier += (int)effectAttr.value;
            }
            //~ else if(effectAttr.type==_EffectAttrType.Speed){
            //~ speedModifier+=(int)effectAttr.value;
            //~ }
            else if (effectAttr.type == _EffectAttrType.HitChance)
            {
                attackModifier += effectAttr.value;
            }
            else if (effectAttr.type == _EffectAttrType.DodgeChance)
            {
                defendModifier += effectAttr.value;
            }
            else if (effectAttr.type == _EffectAttrType.CriticalChance)
            {
                criticalModifier += effectAttr.value;
            }
            else if (effectAttr.type == _EffectAttrType.CriticalImmunity)
            {
                critDefModifier += effectAttr.value;
            }
            //~ else if(effectAttr.type==_EffectAttrType.ExtraAttack){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.ExtraCounterAttack){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.Stun){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.DisableAttack){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.DisableMovement){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.DisableAbility){

            //~ }
            //~ else if(effectAttr.type==_EffectAttrType.Teleport){

            //~ }
        }

        if (activeUnitAbilityEffectList.Count == 0)
        {
            SubscribeEvent();
            if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
            {
                countTillNextTurn = UnitControl.activeFactionCount;
            }
            else
            {
                countTillNextTurn = UnitControl.GetAllUnitCount();
            }
        }

        if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
        {
            ability.countTillNextTurn = UnitControl.activeFactionCount;
        }
        else
        {
            ability.countTillNextTurn = UnitControl.GetAllUnitCount();
        }

        //add the ability to the list so it can be keep tracked
        activeUnitAbilityEffectList.Add(ability);
    }
예제 #7
0
    void OnNextTurn()
    {
        for (int i = 0; i < activeUnitAbilityEffectList.Count; i++)
        {
            UnitAbility uAB = activeUnitAbilityEffectList[i];
            uAB.countTillNextTurn -= 1;
            if (uAB.countTillNextTurn == 0)
            {
                if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
                {
                    uAB.countTillNextTurn = UnitControl.activeFactionCount;
                }
                else
                {
                    uAB.countTillNextTurn = UnitControl.GetAllUnitCount();
                }

                bool flag = CalulateEffect(uAB);

                //false means no more effect active for the ability, remove the ability
                if (!flag)
                {
                    activeUnitAbilityEffectList.RemoveAt(i);
                    i -= 1;

                    //if not more ability, stop listening to any event
                    if (activeUnitAbilityEffectList.Count == 0)
                    {
                        UnsubscribeEvent();
                    }
                }
            }
        }

        //apply the effect, this is placed here so it only runs when there are active effect
        countTillNextTurn -= 1;
        if (countTillNextTurn == 0)
        {
            //apply the effect on unit
            if (unit != null)
            {
                if (HPGainModifier > 0)
                {
                    unit.ApplyHeal(HPGainModifier);
                }
                else if (HPGainModifier < 0)
                {
                    unit.ApplyDamage(HPGainModifier);
                }
                if (APGainModifier != 0)
                {
                    unit.GainAP(APGainModifier);
                }
            }

            if (GameControlTB.GetTurnMode() == _TurnMode.FactionAllUnitPerTurn)
            {
                countTillNextTurn = UnitControl.activeFactionCount;
            }
            else
            {
                countTillNextTurn = UnitControl.GetAllUnitCount();
            }
        }
    }
예제 #8
0
    //code execution for when a left mouse click happen on a tile and when a touch is double tap on a tile
    public void OnTouchMouseDown()
    {
                #if !UNITY_IPHONE && !UNITY_ANDROID
        if (GameControlTB.IsCursorOnUI(Input.mousePosition))
        {
            return;
        }
        //if(GameControlTB.IsObjectOnUI(pos)) return;
                #endif

        if (GameControlTB.IsUnitPlacementState())
        {
            PlaceUnit();
            return;
        }

        if (GameControlTB.GetTurnMode() != _TurnMode.SingleUnitPerTurn)
        {
            if (!GameControlTB.IsPlayerTurn())
            {
                //if(GameControlTB.turnID!=GameControlTB.GetPlayerFactionTurnID()){
                return;
            }
        }

        if (GameControlTB.IsActionInProgress())
        {
            return;
        }

        if (!walkable && !GridManager.IsInTargetTileSelectMode())
        {
            return;
        }

        UnitTB sUnit = UnitControl.selectedUnit;

        //if a friendly unit has been selected
        //if(sUnit!=null && sUnit.IsControllable(GameControlTB.GetPlayerFactionID())){
        if (sUnit != null && sUnit.IsControllable())
        {
            //if HexFridManager is actively looking for a target for current selectedUnit
            if (GridManager.IsInTargetTileSelectMode())
            {
                ManualSelect();
            }
            else
            {
                if (!walkableToSelected && !attackableToSelected)
                {
                    ManualSelect();
                }
                else
                {
                    if (attackableToSelected && unit != null)
                    {
                        sUnit.Attack(unit);
                    }
                    else if (walkableToSelected)
                    {
                        sUnit.Move(this);
                    }
                    else
                    {
                        Debug.Log("error");
                    }
                }
            }

            return;
        }
        else
        {
            ManualSelect();
        }
    }