예제 #1
0
파일: Firetruck.cs 프로젝트: ana3A/aasma
    public void AssumeEmergency()
    {
        SendFiretruck(myERC.WorstDisasterEmergency());
        myERC.SendFiretruck(this);
        myEmergency.SendResources(0, 1);

        if (myEmergency.NeededFiretrucks() < 1 || myEmergency.GetEmergencyDisasterLife() > 250)
        {
            myERC.DisasterEmergencyControlled(myEmergency);
        }
    }
예제 #2
0
파일: ERCAgent.cs 프로젝트: ana3A/aasma
    public void AddEmergency(Emergency e)
    {
        if (e.GetEmergencyPeopleEnvolved() > 0)
        {
            MedicalEmergenciesWaiting.Add(e);
        }

        if (e.GetEmergencyDisasterLife() > 0)
        {
            DisasterEmergenciesWaiting.Add(e);
        }
    }
예제 #3
0
파일: ERCAgent.cs 프로젝트: ana3A/aasma
    private void SendResources(Emergency medEm, Emergency disEm)
    {
        if ((availableAmbulances > 0 || Multiple) && medEm != null)
        {
            int ambulancesNeeded = (int)Math.Ceiling((float)medEm.GetEmergencyPeopleEnvolved() / Ambulance.maxPeople);

            if (Multiple)
            {
                int ambulancesRemaining = Mathf.Max(ambulancesNeeded - availableAmbulances, 0);
                if (ambulancesRemaining > 0)
                {
                    CommunicationSystem.needMedHelp(medEm, ambulancesRemaining);
                }
            }


            ambulancesNeeded = Mathf.Min(ambulancesNeeded, availableAmbulances);


            for (int i = 0; i < ambulancesNeeded; i++)
            {
                Ambulance am = ambulances[0]; // CreateAmbulance();
                ambulances.RemoveAt(0);
                am.SendAmbulance(medEm);
                availableAmbulances--;
            }

            medEm.SendResources(ambulancesNeeded, 0);
            MedicalEmergenciesWaiting.Remove(medEm);
            if (!EmergenciesBeingTreated.Contains(medEm))
            {
                EmergenciesBeingTreated.Add(medEm);
            }
        }

        if ((availableFiretrucks > 0 || Multiple) && disEm != null)
        {
            int firetrucksNeeded = (int)Math.Ceiling((float)disEm.GetEmergencyDisasterLife() / Firetruck.waterDeposit);

            if (Multiple)
            {
                int firetrucksRemaining = Mathf.Max(firetrucksNeeded - availableFiretrucks, 0);
                if (firetrucksRemaining > 0)
                {
                    CommunicationSystem.needFireHelp(disEm, firetrucksRemaining);
                }
            }

            firetrucksNeeded = Mathf.Min(firetrucksNeeded, availableFiretrucks);

            for (int i = 0; i < firetrucksNeeded; i++)
            {
                Firetruck am = firetrucks[0]; // CreateFiretruck();
                firetrucks.RemoveAt(0);
                am.SendFiretruck(disEm);
                availableFiretrucks--;
            }

            disEm.SendResources(0, firetrucksNeeded);
            DisasterEmergenciesWaiting.Remove(disEm);
            if (!EmergenciesBeingTreated.Contains(disEm))
            {
                EmergenciesBeingTreated.Add(disEm);
            }
        }
    }
예제 #4
0
파일: Ambulance.cs 프로젝트: ana3A/aasma
    private void TreatEmergency()
    {
        if (Decentralized && myEmergency.NAmbulances == 1 && peopleToTransport == maxPeople && myEmergency.GetEmergencyPeopleEnvolved() > 0)
        {
            onEmergency              = false;
            goingToERC               = true;
            myEmergency.NAmbulances -= 1;
            if (!myERC.MedicalEmergenciesWaiting.Contains(myEmergency))
            {
                myERC.MedicalEmergenciesWaiting.Add(myEmergency);
            }
            if (myEmergency.NFiretrucks <= 0)
            {
                myERC.EmergenciesBeingTreated.Remove(myEmergency);
            }
            return;
        }

        if (myEmergency.GetEmergencyPeopleEnvolved() < 1)
        {
            onEmergency              = false;
            goingToERC               = true;
            myEmergency.NAmbulances -= 1;
            if (Decentralized && myEmergency.NAmbulances <= 0 && myEmergency.NFiretrucks <= 0 && myEmergency.GetEmergencyDisasterLife() <= 0)
            {
                myERC.MedicalEmergenciesWaiting.Remove(myEmergency);
                myERC.DisasterEmergenciesWaiting.Remove(myEmergency);
                myERC.EmergencyEnded(myEmergency);
            }

            //else if (Decentralized && myEmergency.NAmbulances <= 0 && myEmergency.NFiretrucks <= 0 && myEmergency.GetEmergencyDisasterLife() >= 250)
            //{
            //    myERC.EmergencyImpossible(myEmergency);
            //}

            else if (Decentralized && myEmergency.NAmbulances <= 0 && myEmergency.NFiretrucks <= 0)
            {
                myERC.EmergenciesBeingTreated.Remove(myEmergency);
            }
            return;
        }

        if (peopleToTransport == maxPeople)
        {
            onEmergency              = false;
            goingToERC               = true;
            myEmergency.NAmbulances -= 1;
            return;
        }

        if (waitTime >= myEmergency.WaitTime)
        {
            if (myEmergency.TreatEmergency(this))
            {
                peopleToTransport++;
            }
            waitTime = 0;
        }

        else
        {
            waitTime += Time.deltaTime;
        }
    }