public void Update(GameTime gameTime) { float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; foreach (KeyValuePair <string, IDrawn> drawable in drawList.ToList()) { switch (drawable.Value.DrawnType) { case DrawnType.Animation: Animation animation = (Animation)drawable.Value; animation.UpdateFrame(elapsed); if (animation.Frame > animation.FrameCount && animation.IsLoop) { animation.Reset(); } else if (animation.Frame > animation.FrameCount && !animation.IsLoop) { drawList.Remove(drawable.Key); continue; } drawList[drawable.Key] = animation; break; } } }
public bool UpdateDrawList(DrawParam param) { if (!drawList.ContainsKey(param.ObjectName)) { return(false); } if (drawCache.Cache.ContainsKey(param.ObjectName)) { ObjectCache cache = drawCache.Cache[param.ObjectName]; if (cache.Cache.ContainsKey(param.DrawableName)) { IDrawn drawableObject = cache.Cache[param.DrawableName]; drawableObject.X = param.Position.X; drawableObject.Y = param.Position.Y; switch (drawableObject.DrawnType) { case DrawnType.Animation: Animation animation = (Animation)drawableObject; animation.Reset(); drawList[param.ObjectName] = animation; return(true); default: drawList[param.ObjectName] = drawableObject; return(true); } } } else { drawCache.Cache.Add(param.ObjectName, new ObjectCache()); } ObjectCache objCache = drawCache.Cache[param.ObjectName]; switch (param.DrawType) { case DrawnType.Animation: if (!animationList.ContainsKey(param.DrawableName)) { return(false); } Animation animation = animationList[param.DrawableName].CloneAnimation(param.DrawableName); animation.Reset(); animation.X = param.Position.X; animation.Y = param.Position.Y; drawList.Add(param.ObjectName, animation); objCache.Cache.Add(animation.Name, animation); break; case DrawnType.Shape: if (!shapeList.ContainsKey(param.DrawableName)) { return(false); } IDrawnShape shape = shapeList[param.DrawableName]; switch (shape.Shape) { case ShapeType.Line: DrawnLine line = (DrawnLine)shape; DrawnLine drawLine = line.Clone(line.Name); drawLine.X = param.Position.X; drawLine.Y = param.Position.Y; drawList.Add(param.ObjectName, drawLine); objCache.Cache.Add(drawLine.Name, drawLine); return(true); case ShapeType.Rectangle: DrawnRectangle rectangle = (DrawnRectangle)shape; DrawnRectangle drawRectangle = rectangle.Clone(rectangle.Name); drawRectangle.X = param.Position.X; drawRectangle.Y = param.Position.Y; drawList.Add(param.ObjectName, drawRectangle); objCache.Cache.Add(drawRectangle.Name, drawRectangle); return(true); } break; case DrawnType.String: if (!stringList.ContainsKey(param.DrawableName)) { return(false); } DrawnString drawString = stringList[param.DrawableName].Clone(param.DrawableName); drawString.X = param.Position.X; drawString.Y = param.Position.Y; drawList.Add(param.ObjectName, drawString); objCache.Cache.Add(drawString.Name, drawString); return(true); } return(false); }