rendered paste bodyusing 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
{
}
}
}
}