public bool AddAction(IGraphicAction action)
 {
     if (_actions.ContainsKey(action.Name)) return false;
     _actions.Add(action.Name, action);
     return true;
 }
 public bool? ExecuteAction(IGraphicAction action)
 {
     switch (action.GraphicActionType)
     {
         case GraphicActionType.Animation:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             IAnimationAction animationAction = (IAnimationAction) action;
             return ExecuteAnimationAction(animationAction);
         case GraphicActionType.Shape:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             IShapeAction shapeAction = (IShapeAction) action;
             return ExecuteShapeAction(shapeAction);
         case GraphicActionType.String:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             StringAction stringAction = (StringAction) action;
             return ExecuteStringAction(stringAction);
         case GraphicActionType.Position:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             IPositionAction positionAction = (IPositionAction) action;
             return ExecutePositionAction(positionAction);
         case GraphicActionType.Color:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             ColorAction colorAction = (ColorAction) action;
             return ExecuteColorAction(colorAction);
         case GraphicActionType.Add:
             if (GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             AddAction addAction = (AddAction) action;
             return ExecuteAddAction(addAction);
         case GraphicActionType.Remove:
             if (!GameGraphics.DoesDrawableExist(action.Drawable)) return false;
             RemoveAction removeAction = (RemoveAction) action;
             return ExecuteRemoveAction(removeAction);
         default:
             return null;
     }
 }