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, }); }
public void SetInfectionStatus(InfectionStatus newStatus) { InfectionStatus previousStatus = infectionStatus; infectionStatus = newStatus; UpdateColor(); UpdateInfectionRadiusVisibility(); }
public async Task UpdateStatus(ApplicationUser user, InfectionStatus stat, DateTime?timeOfStat) { user.InfectionStatus = stat; if (timeOfStat != null) { user.TimeOfLastCondition = timeOfStat; } await _userManager.UpdateAsync(user); }
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; } }
void OnTriggerExit() { if (infectionCoroutine != null) { Debug.Log("Stop infection coroutine"); StopCoroutine(infectionCoroutine); infectionStatus = null; infectionCoroutine = null; } }
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"); }
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; } }
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); } }
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); }
// *************************** // // ***** 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); }
// 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, }); }
public void Init(InfectionStatus _status) { status = _status; }
public Point(int x, int y, InfectionStatus infectionStatus) { this.X = x; this.Y = y; this.InfectionStatus = infectionStatus; }