// instantiate a new soldier public void InstantiateSoldier() { SoldierSlot availableSlot = getAvailableSlot(); // no place was found if (availableSlot == null) { print(string.Format("Tower {0} - No free slots", playerNumber)); } // instantiate a new soldier and target it towards the free soldier slot else { setGateOpen(true); GameObject newSoldier = Instantiate(soldierPrefab, soldierInstantiatePosition.position, Quaternion.LookRotation(-transform.forward, transform.up), transform) as GameObject; newSoldier.GetComponent <SortingGroup>().sortingOrder = countNumOfSoldiers; SoldierHealth newSoldierComponent = newSoldier.GetComponent <SoldierHealth>(); newSoldierComponent.spawnPoint = soldierInstantiatePosition; newSoldierComponent.soldierSlot = availableSlot; //newSoldierComponent.speed = 10; currentNumOfSoldiers++; countNumOfSoldiers++; //Invoke("closeGate", delayBeforeClosingTheGate); } }
// activated after a soldier came back to the tower's gate gate public void OnSoldierIsBack(SoldierSlot soldierSlotToFree) { currentNumOfSoldiers--; // free the soldierSlot foreach (SoldierSlot slot in soldierSlots) { if (slot == soldierSlotToFree) { slot.isFree = true; } } Invoke("InstantiateSoldier", delayBeforeInstantiating); }
//public void openGate() //{ // setGateOpen(true); //} //public void closeGate() //{ // setGateOpen(false); //} // returns a free SoldierSlot or null if it's all taken SoldierSlot getAvailableSlot() { // search for a free soldier slot SoldierSlot availableSlot = null; foreach (SoldierSlot slot in soldierSlots) { if (slot.isFree) { availableSlot = slot; slot.isFree = false; // mark the spot as taken break; } } return(availableSlot); }