示例#1
0
 public void addEvent(EventScript es)
 {
     EMH.insert(es);
 }
示例#2
0
 public void addEventVictim(EventScript es)
 {
     EMHVictim.insert(es);
 }
示例#3
0
    // Update is called once per frame
    void Update()
    {
        if (simulationManager.initialSeekAlgorithmDone)
        {
            timer += Time.deltaTime;
            if (timer > simulationStep)
            {
                timer = 0;
                currentStep++;
                if (currentStep == simulationManager.stepToFinish && printedToFile == false)
                {
                    printedToFile = true;
                    EMHAmbulance.writeToFileAmbulance(gameObject.name);
                }
                //if(headingToHospital == true)
                //{
                if (hospital.transform.position == transform.position && headingToHospital == true)
                {
                    if (addedArriveHospitalEvent == false)
                    {
                        EventScript es = new EventScript(currentStep, " ArriveHospital ", gameObject.name, " arrived ", hospital.name);
                        simulationManager.addEvent(es);
                        EventScriptAmbulance eva = new EventScriptAmbulance(currentStep, gameObject.name, " Arriving ", hospital.name);
                        EMHAmbulance.insert(eva);
                        addedArriveHospitalEvent = true;
                    }
                    //If the hospital locations are not full
                    if (!hospitalScript.allLocationsFull)
                    {
                        if (unloadingVictims == false)
                        {
                            unloadingVictims = true;
                            //Take up a spot by incrementing the counter
                            hospitalScript.numberOfSpotsTaken += 1;
                        }
                    }
                    //else
                    //Debug.Log("HOSPITAL FULL");

                    //}
                    if (unloadingVictims == true)
                    {
                        if (victim2 != null)
                        {
                            unloadStepcounter--;
                            if (unloadStepcounter == 0)
                            {
                                victim1.GetComponent <VictimScript>().isSaved = true;
                                victim1.transform.parent = hospital.transform;
                                EventScript es = new EventScript(currentStep, " UnloadedVictim ", gameObject.name, " unloaded ", victim1.name);
                                simulationManager.addEvent(es);
                                victim1 = null;
                            }
                            if (unloadStepcounter == -1)
                            {
                                victim2.GetComponent <VictimScript>().isSaved = true;
                                victim2.transform.parent = hospital.transform;
                                unloadingVictims         = false;
                                EventScript es = new EventScript(currentStep, " UnloadedVictim ", gameObject.name, " unloaded ", victim2.name);
                                simulationManager.addEvent(es);
                                victim2 = null;
                                //decrement the counter;
                                hospitalScript.numberOfSpotsTaken -= 1;
                                addedArriveHospitalEvent           = false;
                                headingToHospital = false;
                                seekOnce          = false;
                                unloadStepcounter = UNLOAD_VICTIM_STEP;
                            }
                        }
                        else if (victim1 != null)
                        {
                            unloadStepcounter--;
                            if (unloadStepcounter == 0)
                            {
                                victim1.GetComponent <VictimScript>().isSaved = true;
                                victim1.transform.parent = hospital.transform;
                                unloadingVictims         = false;
                                EventScript es = new EventScript(currentStep, " UnloadedVictim ", gameObject.name, " unloaded ", victim1.name);
                                simulationManager.addEvent(es);
                                victim1 = null;
                                //decrement the counter;
                                hospitalScript.numberOfSpotsTaken -= 1;
                                addedArriveHospitalEvent           = false;
                                headingToHospital = false;
                                seekOnce          = false;
                                unloadStepcounter = UNLOAD_VICTIM_STEP;
                            }
                        }
                    }
                }

                else if (victim1 != null || victim2 != null)
                {
                    if (victim1.GetComponent <VictimScript>().isPickedUp == false)
                    {
                        headingToVictim   = true;
                        headingToHospital = false;
                        //If the ambulance is on top of the victim, pick up the victim
                        if (victim1.transform.position == transform.position)
                        {
                            loadStepCounter--;
                            if (loadStepCounter == 0)
                            {
                                victim1.GetComponent <VictimScript>().isPickedUp  = true;
                                victim1.GetComponent <VictimScript>().timeRescued = currentStep;
                                victim1.transform.parent = gameObject.transform;
                                loadStepCounter          = LOAD_VICTIM_STEP;
                                EventScript es = new EventScript(currentStep - LOAD_VICTIM_STEP, " RescuedVictim ", gameObject.name, " rescued ", victim1.name);
                                simulationManager.addEvent(es);
                                //Make an event and add it to the heap
                                es = new EventScript(currentStep, " LoadVictim ", gameObject.name, " loaded ", victim1.name);
                                simulationManager.addEvent(es);
                            }
                        }

                        else if (victim1.transform.position.x > transform.position.x)
                        {
                            transform.position = new Vector3(transform.position.x + 1, transform.position.y, 0);
                        }
                        else if (victim1.transform.position.x < transform.position.x)
                        {
                            transform.position = new Vector3(transform.position.x - 1, transform.position.y, 0);
                        }
                        else if (victim1.transform.position.y > transform.position.y)
                        {
                            transform.position = new Vector3(transform.position.x, transform.position.y + 1, 0);
                        }
                        else if (victim1.transform.position.y < transform.position.y)
                        {
                            transform.position = new Vector3(transform.position.x, transform.position.y - 1, 0);
                        }
                    }
                    else if (victim2 != null)
                    {
                        if (victim2.GetComponent <VictimScript>().isPickedUp == false)
                        {
                            headingToVictim   = true;
                            headingToHospital = false;
                            if (victim2.transform.position == transform.position)
                            {
                                loadStepCounter--;
                                if (loadStepCounter == 0)
                                {
                                    victim2.GetComponent <VictimScript>().isPickedUp  = true;
                                    victim2.GetComponent <VictimScript>().timeRescued = currentStep;
                                    victim2.transform.parent = gameObject.transform;
                                    loadStepCounter          = LOAD_VICTIM_STEP;
                                    EventScript es = new EventScript(currentStep - LOAD_VICTIM_STEP, " RescuedVictim ", gameObject.name, " rescued ", victim2.name);
                                    simulationManager.addEvent(es);
                                    es = new EventScript(currentStep, " LoadVictim ", gameObject.name, " loaded ", victim2.name);
                                    simulationManager.addEvent(es);
                                }
                            }
                            else if (victim2.transform.position.x > transform.position.x)
                            {
                                transform.position = new Vector3(transform.position.x + 1, transform.position.y, 0);
                            }
                            else if (victim2.transform.position.x < transform.position.x)
                            {
                                transform.position = new Vector3(transform.position.x - 1, transform.position.y, 0);
                            }
                            else if (victim2.transform.position.y > transform.position.y)
                            {
                                transform.position = new Vector3(transform.position.x, transform.position.y + 1, 0);
                            }
                            else if (victim2.transform.position.y < transform.position.y)
                            {
                                transform.position = new Vector3(transform.position.x, transform.position.y - 1, 0);
                            }
                        }
                        else
                        {
                            headingToHospital = true;
                            headingToVictim   = false;
                            if (hospital.transform.position.x > transform.position.x)
                            {
                                transform.position = new Vector3(transform.position.x + 1, transform.position.y, 0);
                            }
                            else if (hospital.transform.position.x < transform.position.x)
                            {
                                transform.position = new Vector3(transform.position.x - 1, transform.position.y, 0);
                            }
                            else if (hospital.transform.position.y > transform.position.y)
                            {
                                transform.position = new Vector3(transform.position.x, transform.position.y + 1, 0);
                            }
                            else if (hospital.transform.position.y < transform.position.y)
                            {
                                transform.position = new Vector3(transform.position.x, transform.position.y - 1, 0);
                            }
                        }
                    }
                    //else if both victims are picked up, drive back to the hospital
                    else
                    {
                        headingToHospital = true;
                        headingToVictim   = false;
                        if (hospital.transform.position.x > transform.position.x)
                        {
                            transform.position = new Vector3(transform.position.x + 1, transform.position.y, 0);
                        }
                        else if (hospital.transform.position.x < transform.position.x)
                        {
                            transform.position = new Vector3(transform.position.x - 1, transform.position.y, 0);
                        }
                        else if (hospital.transform.position.y > transform.position.y)
                        {
                            transform.position = new Vector3(transform.position.x, transform.position.y + 1, 0);
                        }
                        else if (hospital.transform.position.y < transform.position.y)
                        {
                            transform.position = new Vector3(transform.position.x, transform.position.y - 1, 0);
                        }
                    }
                }
                //else seek for more victims
                else
                {
                    if (seekOnce == false)
                    {
                        seekOnce = true;
                        seekVictim();
                    }
                }
            }
        }
    }