コード例 #1
0
    void CreateEmergency()
    {
        float type_probability = Random.Range(0f, 1f);

        Emergency.E_Severity Eserv;
        int    people_involved = -1;
        E_Type Etype;

        if (type_probability <= 0.6f)
        {
            float x = (float)Random.Range((int)1, (int)21) / 20;        //max(21) is exclusive
            x = Mathf.Pow(-x + 1, 3);                                   //chance distribution. less people is more probable

            people_involved = (int)Mathf.Max(x * 20, 1);

            Etype = E_Type.Medical;
        }
        else if (type_probability <= 0.8f)
        {
            Etype = E_Type.Disaster;
        }
        else
        {
            float x = (float)Random.Range((int)1, (int)21) / 20;        //max(21) is exclusive
            x = Mathf.Pow(-x + 1, 3);                                   //chance distribution. less people is more probable

            people_involved = (int)Mathf.Max(x * 20, 1);

            Etype = E_Type.Both;
        }

        float creation_probability = Random.Range(0.0f, 1.0f);

        if (creation_probability <= 0.6f)
        {
            Eserv = Emergency.E_Severity.Light;
        }
        else if (creation_probability <= 0.9f)
        {
            Eserv = Emergency.E_Severity.Medium;
        }
        else
        {
            Eserv = Emergency.E_Severity.Severe;
        }

        Vector3 pos = new Vector3(Random.Range(-range, range), 1f, Random.Range(-range, range)) + transform.position;

        while (this.MyEmergencies.ContainsKey(pos) || TooCloseToCentral(pos))
        {
            pos = new Vector3(Random.Range(-range, range), 1f, Random.Range(-range, range)) + transform.position;
        }


        if (Etype == E_Type.Medical)
        {
            GameObject       em = Instantiate(MedicalEmergencyObject, pos, Quaternion.Euler(new Vector3(0f, 0f, 0f)));
            MedicalEmergency e  = em.GetComponent <MedicalEmergency>();
            e.InitEmergency(Eserv, people_involved, this);
            MyERC.EmergencyCall(e);
            //Notify Area that emergency exists
            MyEmergencies.Add(em.gameObject.transform.position, em);
        }

        else if (Etype == E_Type.Disaster)
        {
            GameObject        em = Instantiate(DisasterEmergencyObject, pos, Quaternion.Euler(new Vector3(0f, 0f, 0f)));
            DisasterEmergency e  = em.GetComponent <DisasterEmergency>();
            e.InitEmergency(Eserv, people_involved, this);
            MyERC.EmergencyCall(e);
            //Notify Area that emergency exists
            MyEmergencies.Add(em.gameObject.transform.position, em);
        }

        else if (Etype == E_Type.Both)
        {
            GameObject    em = Instantiate(BothEmergencyObject, pos, Quaternion.Euler(new Vector3(0f, 0f, 0f)));
            BothEmergency e  = em.GetComponent <BothEmergency>();
            e.InitEmergency(Eserv, people_involved, this);
            MyERC.EmergencyCall(e);
            //Notify Area that emergency exists
            MyEmergencies.Add(em.gameObject.transform.position, em);
        }


        //Notify ERC that an emergency occured -> simulating the "calls"
    }