using System; using System.Collections; using System.Text; using System.Runtime.Serialization; namespace InsulinSim { [Serializable()] public class Person : ISerializable { private double bloodsugar_level; private double insulin_level; private int body_mass; private double insulin_decrement; int curr_action; ActionCollection action_collection; DataCollection insulin_data, bloodsugar_data; double life_time; Queue action_queue; public Person() { action_queue = new Queue(); action_collection = new ActionCollection(); insulin_data = new DataCollection("Insulin"); bloodsugar_data = new DataCollection("Blood Sugar"); life_time = 0; insulin_decrement = .5; bloodsugar_level = 150; body_mass = 200; curr_action = (int)Actions.NOTHING; action_queue.Enqueue(curr_action); } public int ActionProgress { get { Action temp = this.action_collection.getAction(curr_action); if (temp.Duration == 0) return 0; else { double progress; progress = temp.ElapsedTime / temp.Duration; progress *= 100; if (progress > 100) progress = 100; return Convert.ToInt32(progress); } } } public DataCollection InsulinData { get { return this.insulin_data; } } public DataCollection BloodSugarData { get { return this.bloodsugar_data; } } public double LifeTime { get { return this.life_time; } } public String NextActionDescription { get { try { int temp = (int)action_queue.Peek(); Action temp2 = action_collection.getAction(temp); return temp2.Description; } catch { return "No Action Next"; } } } public int Action { set { action_queue.Enqueue(value); } } public String ActionDescription { get { Action temp = action_collection.getAction(curr_action); return temp.Description; } } public void cancelCurrentAction() { Action temp = action_collection.getAction(curr_action); temp.resetElapsedTime(); if (action_queue.Count == 0) action_queue.Enqueue((int)Actions.NOTHING); curr_action = (int)action_queue.Dequeue(); } public void updatePerson(double time, double time_mod) { double temp_sugar = bloodsugar_level; double deltaTime = time * time_mod; life_time += (time * time_mod); Action temp = action_collection.getAction(curr_action); if (temp.ElapsedTime >= temp.Duration) cancelCurrentAction(); else temp.modifyElapsedTime((int)deltaTime); bloodsugar_level += temp.Modifier * (deltaTime / 1000); insulin_level -= insulin_decrement * (bloodsugar_level - temp_sugar); if (insulin_level < 0) insulin_level = 0; bloodsugar_data.insertData(life_time, bloodsugar_level); insulin_data.insertData(life_time, insulin_level); } public int BodyMass { set { this.body_mass = value; } get { return this.body_mass; } } public double BloodSugarLevel { get { return this.bloodsugar_level; } } public double InsulinLevel { get { return this.insulin_level; } } public Person(SerializationInfo info, StreamingContext ctxt) { insulin_decrement = .5; body_mass = (int)info.GetValue("BodyMass", typeof(int)); insulin_data = (DataCollection)info.GetValue("InsulinData", typeof(DataCollection)); bloodsugar_data = (DataCollection)info.GetValue("BloodSugarData", typeof(DataCollection)); curr_action = (int)info.GetValue("CurrentAction", typeof(int)); insulin_level = (double)info.GetValue("InsulinLevel", typeof(double)); bloodsugar_level = (double)info.GetValue("BloodSugarLevel", typeof(double)); action_collection = (ActionCollection)info.GetValue("ActionCollection", typeof(ActionCollection)); life_time = (double)info.GetValue("LifeTime", typeof(double)); action_queue = (Queue)info.GetValue("ActionQueue", typeof(Queue)); } public void GetObjectData(SerializationInfo info, StreamingContext ctxt) { info.AddValue("BodyMass", body_mass); info.AddValue("InsulinData", insulin_data); info.AddValue("BloodSugarData", bloodsugar_data); info.AddValue("CurrentAction", curr_action); info.AddValue("InsulinLevel", insulin_level); info.AddValue("BloodSugarLevel", bloodsugar_level); info.AddValue("ActionCollection", action_collection); info.AddValue("LifeTime", life_time); info.AddValue("ActionQueue", action_queue); } public ActionCollection ActionCollection { get { throw new System.NotImplementedException(); } set { } } public DataCollection DataCollection { get { throw new System.NotImplementedException(); } set { } } } }