Exemplo n.º 1
0
        static InfectionModel InitializeInfection(VInitialSettings s)
        {
            var statuses = new InfectionStatus[s.Size.Width, s.Size.Height];

            var probs = new Dictionary <InfectionStatus, double>
            {
                { InfectionStatus.Susceptible, s.PopulationRatio.SusceptibleRatio },
                { InfectionStatus.Infectious, s.PopulationRatio.InfectiousRatio },
                { InfectionStatus.Recovered, s.PopulationRatio.RecoveredRatio },
            };

            for (var i = 0; i < s.Size.Width; i++)
            {
                for (var j = 0; j < s.Size.Height; j++)
                {
                    statuses[i, j] = probs.GetRandomElement();
                }
            }

            return(new InfectionModel
            {
                InitialSettings = s,
                Turn = 0,
                Statuses = statuses,
            });
        }
Exemplo n.º 2
0
    public void SetInfectionStatus(InfectionStatus newStatus)
    {
        InfectionStatus previousStatus = infectionStatus;

        infectionStatus = newStatus;
        UpdateColor();
        UpdateInfectionRadiusVisibility();
    }
Exemplo n.º 3
0
 public async Task UpdateStatus(ApplicationUser user, InfectionStatus stat, DateTime?timeOfStat)
 {
     user.InfectionStatus = stat;
     if (timeOfStat != null)
     {
         user.TimeOfLastCondition = timeOfStat;
     }
     await _userManager.UpdateAsync(user);
 }
Exemplo n.º 4
0
    private void Update()
    {
        DisplayInfectionStatus();

        // Infected
        if (status != InfectionStatus.NotInfected)
        {
            if (infectionTimer > InfectionCd)
            {
                infectionTimer = 0;

                nearbyPeople = SimLib.FindNearbyPeople(gameObject, SimLib.ConvertToInGameLength(sim.socialDistanceLength));

                // Attempt to infect the noninfected
                foreach (GameObject p in nearbyPeople)
                {
                    if (p.GetComponent <Covid>().status == InfectionStatus.NotInfected)
                    {
                        float perc = Random.Range(0f, 1f);

                        // Mask modifier
                        float maskMod = 1f;
                        if (p.GetComponent <Person>().isUsingMask)
                        {
                            maskMod = 1 - sim.maskInfectionReductionRate;
                        }

                        if (perc <= sim.infectionRate * maskMod)
                        {
                            Infect(p);
                        }
                    }
                }
            }

            // Recover if asymptomatic
            if (status == InfectionStatus.Asymptomatic)
            {
                if (asymptomaticRecoveryTimer > sim.asymptomaticRecoveryTime * sim.secondsInDay)
                {
                    status = InfectionStatus.NotInfected;
                    sim.numRecovered++;
                    Debug.Log("Recovered");
                }
                asymptomaticRecoveryTimer += Time.deltaTime;
            }

            infectionTimer += Time.deltaTime;
        }
        // Not infected
        else
        {
            infectionTimer            = 0;
            asymptomaticRecoveryTimer = 0;
        }
    }
Exemplo n.º 5
0
 void OnTriggerExit()
 {
     if (infectionCoroutine != null)
     {
         Debug.Log("Stop infection coroutine");
         StopCoroutine(infectionCoroutine);
         infectionStatus    = null;
         infectionCoroutine = null;
     }
 }
Exemplo n.º 6
0
 public override void StartTouching(VRTK_InteractTouch currentTouchingObject = null)
 {
     audioSource.Play();
     infectionStatus = currentTouchingObject.GetComponent <InfectionStatus> ();
     if (infectionStatus)
     {
         infectionCoroutine = StartCoroutine(InfectionTouchRoutine());
     }
     base.StartTouching(currentTouchingObject);
     Debug.Log("i'm being infected");
 }
Exemplo n.º 7
0
 public override void StopTouching(VRTK_InteractTouch previousTouchingObject = null)
 {
     base.StopTouching(previousTouchingObject);
     Debug.Log("i'm not touching anything infected");
     if (infectionCoroutine != null)
     {
         Debug.Log("Stop infection coroutine");
         StopCoroutine(infectionCoroutine);
         infectionStatus    = null;
         infectionCoroutine = null;
     }
 }
Exemplo n.º 8
0
 void OnTriggerEnter(Collider other)
 {
     infectionStatus = other.gameObject.GetComponentInChildren <InfectionStatus> ();
     if (infectionStatus)
     {
         Debug.Log("i'm being infected");
         infectionCoroutine = StartCoroutine(InfectionTouchRoutine());
     }
     else
     {
         Debug.Log("no infection status on touching object " + other.gameObject.name);
     }
 }
Exemplo n.º 9
0
    public Dictionary <InfectionStatus, float> GetPopulationStatusRates()
    {
        Dictionary <InfectionStatus, float> statusRates = new Dictionary <InfectionStatus, float>();

        foreach (Person person in people)
        {
            InfectionStatus status = person.GetInfectionStatus();
            if (!statusRates.ContainsKey(status))
            {
                statusRates.Add(status, 0);
            }
            statusRates[status] += 1.0f / people.Count;
        }
        return(statusRates);
    }
Exemplo n.º 10
0
    // *************************** //
    // ***** Unity functions ***** //
    // *************************** //

    void Awake()
    {
        // Initialize component helper variables
        sr   = GetComponent <SpriteRenderer>();
        cc2D = GetComponent <CircleCollider2D>();

        // Initialize start values
        infectionStatus  = InfectionStatus.Healthy;
        direction        = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)).normalized;
        infectionRadius  = cc2D.radius;
        perlinCoordinate = Random.Range(0, 1000);
        // For efficiency, a person can infect up to 5 other nearby people at a time
        nearbyPeople = new Collider2D[5];

        // Create the renderer object for the infection radius visualization
        infectionRadiusRenderer = Instantiate(infectionRadiusPrefab, transform.position, Quaternion.identity, transform);
    }
Exemplo n.º 11
0
        // S' = θR - βSI
        // I' = βSI - γI
        // R' = γI - θR
        static InfectionModel NextInfection(InfectionModel model, VRealtimeSettings rs)
        {
            var β = rs.InfectionRate;
            var γ = rs.RecoveryRate;
            var θ = rs.DeimmunizationRate;

            var size     = model.InitialSettings.Size;
            var statuses = new InfectionStatus[size.Width, size.Height];

            for (var i = 0; i < size.Width; i++)
            {
                for (var j = 0; j < size.Height; j++)
                {
                    switch (model.Statuses[i, j])
                    {
                    case InfectionStatus.Susceptible:
                        var count_I = DataModelHelper.GetNeighborPoints(size, new Point(i, j), rs.IsMapLooping)
                                      .Select(p => model.Statuses[p.X, p.Y])
                                      .Count(x => x == InfectionStatus.Infectious);
                        statuses[i, j] = count_I == 0 ? InfectionStatus.Susceptible : RandomHelper.GetRandomElement(1 - Math.Pow(1 - β, count_I), InfectionStatus.Infectious, InfectionStatus.Susceptible);
                        break;

                    case InfectionStatus.Infectious:
                        statuses[i, j] = RandomHelper.GetRandomElement(γ, InfectionStatus.Recovered, InfectionStatus.Infectious);
                        break;

                    case InfectionStatus.Recovered:
                        statuses[i, j] = RandomHelper.GetRandomElement(θ, InfectionStatus.Susceptible, InfectionStatus.Recovered);
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                }
            }

            return(new InfectionModel
            {
                InitialSettings = model.InitialSettings,
                Turn = model.Turn + 1,
                Statuses = statuses,
            });
        }
Exemplo n.º 12
0
 public void Init(InfectionStatus _status)
 {
     status = _status;
 }
Exemplo n.º 13
0
 public Point(int x, int y, InfectionStatus infectionStatus)
 {
     this.X = x;
     this.Y = y;
     this.InfectionStatus = infectionStatus;
 }