Exemplo n.º 1
0
    void Update()
    {
        if (manager.round != Rounds.End && availableList.Count > 0 && furnitureList.Count > 0)
        {
            for (int i = 0; i < availableList.Count; i++)
            {
                if (Input.GetAxis(availableList [i].horizontal) != 0 || Input.GetAxis(availableList [i].vertical) != 0)
                {
                    print("new mimic !");
                    int       parentIndex = Mathf.RoundToInt(Random.Range(0, furnitureList.Count));
                    Transform parent      = furnitureList [parentIndex];
                    parent.GetComponent <Collider> ().material = slippery;
                    parent.GetComponent <Rigidbody> ().mass    = newMass;

                    GameObject newPlayer = GameObject.Instantiate(mimic, parent);
                    mimicList.Add(newPlayer);
                    MimicController mimicScript = newPlayer.GetComponent <MimicController> ();
                    mimicScript.horizontal = availableList [i].horizontal;
                    mimicScript.vertical   = availableList [i].vertical;
                    mimicScript.moveSpeed  = availableList [i].moveSpeed;
                    mimicScript.lungeSpeed = availableList [i].lungeSpeed;
                    //mimicScript.source = source;

                    availableList.RemoveAt(i);
                    furnitureList.RemoveAt(parentIndex);
                }
            }
        }
    }
Exemplo n.º 2
0
	void OnCollisionEnter(Collision col)
	{
		MimicManager mimics = Camera.main.GetComponent<MimicManager> ();

		if (col.gameObject.tag != "BottomWall") 
		{
			/*rb.isKinematic = true;
			transform.parent = col.transform;
			isFlying = false;*/

			if (col.gameObject.tag == "Furniture") 
			{
				Transform mimic = col.transform.Find ("Mimic(Clone)");

				if (mimic != null) 
				{
					//Screenshake
					ScreenShakeGenerator shake = Camera.main.GetComponent<ScreenShakeGenerator> ();
					shake.ShakeScreen (0.1f, 0.2f);

					//Sound
					source.PlayOneShot (hitMimic);

					//Blood
					Instantiate (splatter, new Vector3 (mimic.position.x, 0.01f, mimic.position.z), mimic.rotation);

					//Remove from list

					mimics.mimicList.Remove (mimic.gameObject);

					//Win condition
					if (mimics.mimicList.Count == 0) 
					{
						RoundManager manager = Camera.main.GetComponent<RoundManager> ();
						manager.round = Rounds.End;
						manager.winner = Winner.Human;
					}

					//Kill mimic
					mimic.GetComponent<MimicController> ().Die ();

					//Gain arrow
					if (human.ammo < 3) 
					{
						human.ammo++;
						//source.PlayDelayed (boltRecup, 0.5f);
						StartCoroutine (human.hud.UpdateArrows ());
					}
				} 

				else 
				{
					source.PlayOneShot (hitWood);
					col.gameObject.GetComponent<NavMeshObstacle> ().enabled = false;
					col.gameObject.GetComponent<Rigidbody> ().isKinematic = true;
					col.collider.enabled = false;

					Transform brokenMesh = col.transform.Find("Mesh_Broken");
					Transform mesh = col.transform.Find ("Mesh");
					brokenMesh.gameObject.SetActive (true);
					mesh.gameObject.SetActive (false);
					Vector3 force = rb.velocity.normalized;
					force.y = 0;
					brokenMesh.GetComponent<Destructible> ().direction = force;

					mimics.furnitureList.Remove (col.transform);

				}
			}
		} 

		if (human.ammo == 0) 
		{
			foreach (GameObject m in mimics.mimicList) 
			{
				MimicController mimicCont = m.GetComponent<MimicController> ();
				mimicCont.moveSpeed = mimicCont.moveSpeed * 2;
				mimicCont.lungeSpeed = mimicCont.lungeSpeed * 3;
				mimicCont.speed = mimicCont.moveSpeed;
			}

			foreach (PlayerClass player in mimics.availableList)
			{
				player.moveSpeed = player.moveSpeed * 2;
				player.lungeSpeed = player.lungeSpeed * 3;
			}
		}

		Destroy (gameObject);
	}