void SpawnPowerLocally(int type, Vector3 position, float angle, NetworkViewID optionalViewID){ PowerSpawn requestedSpawn = new PowerSpawn(); requestedSpawn.type = (PowerType)type; requestedSpawn.position = position; requestedSpawn.angle = angle; SpawnPowerLocally(requestedSpawn, optionalViewID); }
private void SpawnTriggerPower(PowerSpawn spawn, GameObject uiElement){ if (placementUI.allTraps.Contains(spawn)) { //unitiliazed NetworkViewID newViewID = default(NetworkViewID); if(spawn.type == PowerType.EXPLOSIVE || spawn.type == PowerType.FIREBALL || spawn.type == PowerType.FREEZE){ //Needs a viewID so that bombs can RPC each other. //newViewID = Network.AllocateViewID(); } SpawnPowerLocally(spawn, newViewID); //Remove from your inventory and disable button placementUI.DestroyUIPower(spawn); if(uiElement.GetComponent<PowerSlot>() != null){ PowerSlot powerSlot = uiElement.GetComponent<PowerSlot>(); powerSlot.enabled = false; //remove from grid if power is not infinite. if(!powerSlot.associatedPower.infinite) placementUI.RemoveFromInventory(powerSlot.associatedPower.type); } } }
void Start () { //copy spawn info from parent. spawnInfo = new PowerSpawn(transform.parent.GetComponent<BlackHoleRadius>().spawnInfo); spawnInfo.type = PowerType.BH_INNER; Destroy(gameObject, 5f); }
IEnumerator YieldThenPower(PowerSpawn spawn, NetworkViewID optionalViewID) { GameObject instantiatedSymbol = (GameObject)Instantiate(alertSymbolPrefab, spawn.position, Quaternion.identity); yield return new WaitForSeconds(0.7f); Destroy(instantiatedSymbol); GameObject power = Instantiate (powerPrefabs.list[(int)spawn.type], spawn.position, Quaternion.identity) as GameObject;; power.GetComponent<Power>().spawnInfo = spawn; //If the networkview id is specified, apply it to the networkview of the new power if(!Equals(optionalViewID, default(NetworkViewID))){ power.GetComponent<NetworkView>().viewID = optionalViewID; } }
//To be called by timer in powerspawn void EnableActivation(PowerSpawn spawn){ EnableActivation(); }
public void SetSpawn(PowerSpawn linkedSpawn){ this.linkedSpawn = linkedSpawn; }
//The function that actually starts the coroutine for spawning powers. void SpawnPowerLocally(PowerSpawn spawn, NetworkViewID optionalViewID){ StartCoroutine(YieldThenPower(spawn, optionalViewID)); }
public virtual void Initialize(PowerSpawn spawn) { this.spawnInfo = spawn; }
void SpawnPowerLocally(int type, Vector3 position, float angle, NetworkViewID optionalViewID, NetworkPlayer owner, NetworkMessageInfo info){ PowerSpawn requestedSpawn = new PowerSpawn(); requestedSpawn.type = (PowerType)type; requestedSpawn.position = position; requestedSpawn.angle = angle; requestedSpawn.owner = owner; float networkDelay = (float)(Network.time - info.timestamp); SpawnPowerLocally(requestedSpawn, networkDelay, optionalViewID); }
const float MaxLagAdjustment = 0.24f; //The max amount of time the warning can be reduced to account for lag, for fairness. //http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.StartCoroutine.html //http://docs.unity3d.com/Documentation/ScriptReference/Coroutine.html //Spawn a warning sign, wait .7 seconds, then spawn power. All of these are done locally on every client. IEnumerator YieldThenPower(PowerSpawn spawn, float warningDuration, NetworkViewID optionalViewID) { Vector3 yieldSpawnLocation = spawn.position; yieldSpawnLocation.z = -8; GameObject instantiatedSymbol = (GameObject)Instantiate(alertSymbol, yieldSpawnLocation, Quaternion.identity); yield return new WaitForSeconds(warningDuration); Destroy(instantiatedSymbol); GameObject power = Instantiate (powerPrefabs.list[(int)spawn.type], spawn.position, Quaternion.identity) as GameObject; power.GetComponent<Power>().Initialize(spawn); //If the networkview id is specified, apply it to the networkview of the new power if(!Equals(optionalViewID, default(NetworkViewID))){ power.GetComponent<NetworkView>().viewID = optionalViewID; } }
//This is is called when a player presses one of the trigger keys. private void SpawnTriggerPower(PowerSpawn spawn, GameObject uiElement){ float currentTime = TimeManager.instance.time; if (placementUI.allTraps.Contains(spawn)) { spawn.owner = Network.player; //unitiliazed NetworkViewID newViewID = default(NetworkViewID); if(spawn.type.PowerRequiresNetworking()){ //Needs a viewID so that bombs can RPC each other. newViewID = Network.AllocateViewID(); } //Call this function locally on and remotely networkView.RPC("SpawnPowerLocally", RPCMode.Others, (int)spawn.type, spawn.position, spawn.angle, newViewID, Network.player); SpawnPowerLocally(spawn, 0f, newViewID); //Remove from your inventory and disable button placementUI.DestroyUIPower(spawn); if(uiElement.GetComponent<PowerSlot>() != null){ PowerSlot powerSlot = uiElement.GetComponent<PowerSlot>(); powerSlot.enabled = false; //remove from grid if power is not infinite. if(!powerSlot.associatedPower.infinite) placementUI.RemoveFromInventory(powerSlot.associatedPower.type); } } }
//only to be called by server. void AddPowerSpawnLocally(bool live, PowerSpawn requested){ requested.owner = Network.player; allTimedSpawns.Enqueue(requested, requested.spawnTime); if(live){ networkView.RPC ("AddPowerSpawnLocally", RPCMode.Others, true, (int)requested.type, requested.position, requested.spawnTime, requested.GetLocalID()); } }
void AddPowerSpawnLocally(bool live, int typeIndex, Vector3 position, float time, int localID, NetworkMessageInfo info){ PowerSpawn requested = new PowerSpawn(localID); requested.type = (PowerType)typeIndex; requested.position = position; requested.spawnTime = TimeManager.instance.time + time; requested.owner = info.sender; //print ("Time is set to " + requested.spawnTime) allTimedSpawns.Enqueue(requested, requested.spawnTime); if(live && Network.isServer){ networkView.RPC ("AddPowerSpawnLocally", RPCMode.Others, true, (int)requested.type, requested.position, requested.spawnTime, requested.GetLocalID()); } }
public override void Initialize (PowerSpawn spawn) { this.spawnInfo = spawn; spawn.createEvents = false; }
// Use this for initialization void Start () { spawnInfo = new PowerSpawn(); spawnInfo.type = PowerType.FIREBALL; Destroy(gameObject, 4f); rigidbody2D.AddForce(Vector2.up * 1200f); }
//The function that actually starts the coroutine for spawning powers. void SpawnPowerLocally(PowerSpawn spawn, float networkDelay, NetworkViewID optionalViewID){ float adjustedWarningDuration = MaxWarningDuration - Mathf.Min(networkDelay, MaxLagAdjustment) - (float)NetworkController.interpolationDelay; StartCoroutine(YieldThenPower(spawn, adjustedWarningDuration, optionalViewID)); }
//returns a copy public PowerSpawn(PowerSpawn original){ type = original.type; spawnTime = original.spawnTime; position = original.position; angle = original.angle; owner = original.owner; localID = powersCreated++; }