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