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));
	}
示例#8
0
	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));
	}
示例#17
0
	//returns a copy
	public PowerSpawn(PowerSpawn original){
		type = original.type;
		spawnTime = original.spawnTime;
		position = original.position;
		angle = original.angle;
		owner = original.owner;
		localID = powersCreated++;
	}