00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 using System;
00018 using System.Collections.Generic;
00019 using System.Text;
00020
00021 namespace DXGfxLib
00022 {
00027 public class TimeLine
00028 {
00032 public List<Event> events = null;
00033
00037 private double startTime = 0;
00038
00042 private double lastEvaluation = 0;
00043
00048 int lastEventFiredIndex = 0;
00049
00053 private SceneObject parent = null;
00054
00058 private Scene scene = null;
00059
00063 public TimeLine()
00064 {
00065 events = new List<Event>();
00066 }
00067
00071 public void Clear()
00072 {
00073 events.Clear();
00074 }
00075
00080 public void SetParent(SceneObject parent)
00081 {
00082 this.parent = parent;
00083 }
00084
00089 public void SetScene(Scene scene)
00090 {
00091 this.scene = scene;
00092 }
00093
00098 public virtual void Evaluate(double appTime, float elapsedTime)
00099 {
00100 if (startTime == 0)
00101 {
00102 startTime = appTime;
00103 events.Sort();
00104 }
00105
00106 for (int i = lastEventFiredIndex; i < events.Count; i++)
00107 {
00108 if (events[i].timeOffset < (appTime - startTime))
00109 {
00110 if (parent != null)
00111 {
00112 parent.AddEvent(events[i]);
00113 }
00114 else if (scene != null)
00115 {
00116 scene.AddEvent(events[i]);
00117 }
00118 else
00119 {
00120 throw new Exception("No parent and no scene this is wrong !! Event can not be fired!");
00121 }
00122 }
00123 else
00124 {
00125 break;
00126 }
00127 }
00128
00129 lastEvaluation = appTime;
00130 }
00131
00135 public void Reset()
00136 {
00137 foreach (Event evt in events)
00138 {
00139 evt.Reset();
00140 }
00141 startTime = 0;
00142 lastEvaluation = 0;
00143 lastEventFiredIndex = 0;
00144 }
00145 }
00146 }