internal void ReduceLadderCount(HumanScript human)
 {
     //Application.CaptureScreenshot("Screenshot.png");
     missSound.Play();
     ladderCount--;
     countText.text = ladderCount.ToString();
     humans.Remove(human);
     prepareHumans.Add(human);
 }
    // Update is called once per frame
    void Update()
    {
        if (!playingOn)
        {
            return;
        }
        switch (status)
        {
        case 0:
            waitShift -= Time.deltaTime;
            if (waitShift < 0)
            {
                nextHuman = GetHuman();
                nextHuman.ReStart(fallPoint);
                status = 2;
            }
            break;

        case 1:
            status++;
            break;

        case 2:                         // 准备获取触摸或点击
            if (Input.GetButtonDown("Fire1"))
            {
                touchSound.Play();
                status++;
            }
            break;

        case 3:                         // 持续触摸或点击 调整位置
            //Debug.Log("Input.GetButton(\"Fire1\") = " + Input.GetButton("Fire1"));
            if (Input.GetButton("Fire1"))
            {
                nextHuman.Position = new Vector3(Camera.main.ScreenPointToRay(Input.mousePosition).origin.x, 0, 0);
            }
            else
            {
                fallSound.Play();
                nextHuman.Fall();
                status++;
            }
            break;

        case 4:                         // 松手 放开 准备下一个human
            waitShift = waitTime;
            status    = 0;
            break;
        }
    }
    HumanScript GetHuman()
    {
        HumanScript human = null;

        if (prepareHumans.Count > 0)
        {
            human = prepareHumans[0];
            prepareHumans.RemoveAt(0);
        }
        else
        {
            human = (Instantiate(humanPrefab) as GameObject).GetComponent <HumanScript>();
            human.humanLadderController = this;
            Rigidbody2D rigidbody2D = human.GetComponent <Rigidbody2D>();
            rigidbody2D.centerOfMass = new Vector2(0, 0.01f);
        }
        return(human);
    }
Example #4
0
    // Start is called before the first frame update
    void Start()
    {
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(this);
        }

        zombies   = new List <ZombieScript>();
        humans    = new List <HumanScript>();
        obstacles = new List <Obstacle>();

        //creates obstacles at random positions
        for (int i = 0; i < numObstacles; i++)
        {
            obstacleTemp = Instantiate(obstaclePrefab);
            obstacleTemp.transform.position = new Vector3(Random.Range(-floorWidth, floorWidth), 3, Random.Range(-floorHeight, floorHeight));
            obstacles.Add(obstacleTemp);
        }

        //cerates humans at random positions
        for (int i = 0; i < numHumans; i++)
        {
            humanTemp = Instantiate(humanPrefab);
            humanTemp.transform.position = new Vector3(Random.Range(-floorWidth, floorWidth), 1, Random.Range(-floorHeight, floorHeight));
            humans.Add(humanTemp);
        }

        //creates zombies at random positions
        for (int i = 0; i < numZombies; i++)
        {
            zombieTemp = Instantiate(zombiePrefab);
            zombieTemp.transform.position = new Vector3(Random.Range(-floorWidth, floorWidth), 1, Random.Range(-floorHeight, floorHeight));
            zombies.Add(zombieTemp);
        }
    }
Example #5
0
    // Update is called once per frame
    void Update()
    {
        temp = 50;

        for (int i = 0; i < humanScripts.Count; i++)
        {
            for (int j = 0; j < zombieScripts.Count; j++)
            {
                if (Vector3.Distance(humanScripts[i].transform.position, zombieScripts[j].transform.position) < temp)
                {
                    temp = Vector3.Distance(humanScripts[i].transform.position, zombieScripts[j].transform.position);
                    zombieScripts[j].seekTarget = humans[i];
                }

                if (Vector3.Distance(humanScripts[i].transform.position, zombieScripts[j].transform.position) < 5)
                {
                    newZ = true;
                    GameObject  tempHuman   = humans[i];
                    HumanScript tempScript  = humanScripts[i];
                    Vehicle     tempVehicle = humans[i].GetComponent <Vehicle>();
                    humans.Remove(tempHuman);
                    humanScripts.Remove(tempScript);

                    GameObject   newZombie  = Instantiate(zPrefab, tempHuman.transform.position, Quaternion.identity);
                    ZombieScript newZScript = newZombie.GetComponent <ZombieScript>();
                    newZScript.seekTarget = humans[i];
                    newZScript.maxSpeed   = 10;
                    newZScript.seekWeight = 1;
                    tempVehicle.maxSpeed  = 10;

                    zombie.Add(newZombie);
                    zombieScripts.Add(newZScript);

                    tempHuman.SetActive(false);

                    break;
                }

                Vehicle check = humanScripts[i].GetComponent <Vehicle>();

                if (Vector3.Distance(humanScripts[i].transform.position, zombieScripts[j].transform.position) < 15)
                {
                    check.mass = 0.25f;
                    steer      = check.Evade(zombieScripts[j].transform.position, zombieScripts[j].transform.position + this.transform.position);
                    steer.y    = 0;
                    check.ApplyForce(steer);
                }

                else
                {
                    Wander(check);
                }

                if (humanScripts[i].transform.position.x > 50 || humanScripts[i].transform.position.x < -50 || humanScripts[i].transform.position.z < -50 || humanScripts[i].transform.position.z > 50)
                {
                    steer   = check.Seek(new Vector3(0, 0.5f, 0));
                    steer.y = 0;
                    check.ApplyForce(steer);
                }
            }

            if (newZ)
            {
                newZ = false;
                break;
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            Vehicle      tempVehicle = humans[0].GetComponent <Vehicle>();
            GameObject   newZombie   = Instantiate(zPrefab, Vector3.zero, Quaternion.identity);
            ZombieScript newZScript  = newZombie.GetComponent <ZombieScript>();
            newZScript.seekTarget = humans[0];
            newZScript.maxSpeed   = 10;
            newZScript.seekWeight = 1;
            tempVehicle.maxSpeed  = 10;

            zombie.Add(newZombie);
            zombieScripts.Add(newZScript);
        }


        if (humans.Count == 0)
        {
            for (int i = 0; i < zombieScripts.Count; i++)
            {
                Vehicle check = zombieScripts[i].GetComponent <Vehicle>();
                Wander(check);

                if (zombieScripts[i].transform.position.x > 50 || zombieScripts[i].transform.position.x < -50 || zombieScripts[i].transform.position.z < -50 || zombieScripts[i].transform.position.z > 50)
                {
                    steer   = check.Seek(new Vector3(0, 0.5f, 0));
                    steer.y = 0;
                    check.ApplyForce(steer);
                }
            }
        }

        foreach (Vehicle v in all)
        {
            for (int i = 0; i < blocks.Length; i++)
            {
                Vector3 avoidForce = v.AvoidObstacle(blocks[i], 4.5f);
                avoidForce.y = 0;
                v.ApplyForce(avoidForce);
            }
        }

        if (Input.GetKeyDown(KeyCode.F))
        {
            toggle = false;
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            toggle = true;
        }
    }
 internal void AddLadderCount(HumanScript human)
 {
     ladderCount++;
     countText.text = ladderCount.ToString();
     humans.Add(human);
 }