예제 #1
0
    public void CreateSpecificRole(Role newRole)
    {
        if (transform.position.y > 0)
        {
            // Determine start and end positions for pedestrian
            float startY = 2.2f;
            float endY   = -3f;

            // Create pedestrian
            Vector3 streetcarPosition = GameObject.FindGameObjectWithTag("Streetcar").transform.position;
            Vector3 spawnPosition     = new Vector3(streetcarPosition.x + 3, startY, 0);

            GameObject newPedestrian = Instantiate(pedestrianPrefab, spawnPosition, Quaternion.identity) as GameObject;
            newPedestrian.transform.SetParent(pedestrianContainer);

            // Set Role
            Pedestrian pedestrianScript = newPedestrian.GetComponent <Pedestrian> ();
            pedestrianScript.SetRole(newRole);
            pedestrianScript.SetMoveSpeed(1f);
            pedestrianScript.SetMoveDelayTime(1f);

            // Set Sprite
            switch (newRole)
            {
            case Role.Coin:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = pedestrianSprites [0];
                break;

            case Role.Stink:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = pedestrianSprites [Random.Range(0, pedestrianSprites.Length)];
                break;

            case Role.Chunky:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = chunkySprites [Random.Range(0, chunkySprites.Length)];
                break;

            case Role.Inspector:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = inspectorSprites [Random.Range(0, inspectorSprites.Length)];
                break;

            case Role.Dazer:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = dazerSprites [Random.Range(0, dazerSprites.Length)];
                break;

            case Role.Officer:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = officerSprites [Random.Range(0, officerSprites.Length)];
                break;

            case Role.Raver:
                newPedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = pedestrianSprites [Random.Range(0, pedestrianSprites.Length)];
                break;
            }

            // Set destination
            Vector3 newDestination = new Vector3(streetcarPosition.x + 3, endY, 0);
            pedestrianScript.SetDestination(newDestination);
        }
    }
예제 #2
0
    void SetDestination(GameObject pedestrian)
    {
        Pedestrian pedestrianScript = pedestrian.GetComponent <Pedestrian>();

        pedestrianScript.SetMoveDelayTime(1f);

        if (pedestrianScript.GetRole() == Role.Norm)
        {
            Vector3 newDestination = (Random.value < 0.5f) ? leftEnd : rightEnd;
            pedestrianScript.SetDestination(newDestination);
            pedestrian.transform.SetParent(pedestrianContainer);
        }

        else if (pedestrianScript.GetRole() == Role.Coin)
        {
            // Either spawn to walk sidewalk or spawn in stop
            if (Random.value < 0.75)
            {
                Vector3 newDestination = (Random.value < 0.5f) ? leftEnd : rightEnd;
                pedestrianScript.SetDestination(newDestination);
                pedestrian.transform.SetParent(pedestrianContainer);
            }
            else
            {
                GameObject streetcarStop;

                //Find a stop that the streetcar is not currently stopped at.
                do
                {
                    streetcarStop = streetcarStops[Random.Range(0, streetcarStops.Length)];
                } while(streetcarStop.GetComponent <StreetcarStop>().StreetcarStopped());

                pedestrian.transform.SetParent(streetcarStop.transform);
                Vector3 pedestrianPosition = streetcarStop.transform.position + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.3f, 0.3f), 0);
                pedestrian.transform.position = pedestrianPosition;
                chunkyPercentage *= (streetcarStop.transform.childCount - 1);
                streetcarStop.GetComponent <StreetcarStop>().UpdateMinimap();
                pedestrian.GetComponent <Pedestrian>().CheckIfBusStopPedestrian();
            }
        }

        else if (pedestrianScript.GetRole() == Role.Inspector || pedestrianScript.GetRole() == Role.Officer || pedestrianScript.GetRole() == Role.Raver)
        {
            GameObject streetcarStop;

            do
            {
                streetcarStop = streetcarStops[Random.Range(0, streetcarStops.Length)];
            } while(streetcarStop.GetComponent <StreetcarStop>().StreetcarStopped());

            // If stop already has role, change new person to a coin
            if (streetcarStop.GetComponent <StreetcarStop>().HasRole(pedestrianScript.GetRole()))
            {
                pedestrianScript.SetRole(Role.Coin);
                pedestrian.GetComponentInChildren <SpriteRenderer> ().sprite = pedestrianSprites [Random.Range(0, pedestrianSprites.Length)];
            }

            pedestrian.transform.SetParent(streetcarStop.transform);
            Vector3 pedestrianPosition = streetcarStop.transform.position + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.5f, 0.5f), 0);
            pedestrian.transform.position = pedestrianPosition;
            streetcarStop.GetComponent <StreetcarStop>().UpdateMinimap();
        }

        else
        {
            Vector3 newDestination = new Vector3(pedestrian.transform.position.x, opposingSpawnerTransform.position.y, 0);
            pedestrianScript.SetDestination(newDestination);
            pedestrian.transform.SetParent(pedestrianContainer);
        }
    }