aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/director.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/director.cpp')
-rw-r--r--engines/pink/director.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/engines/pink/director.cpp b/engines/pink/director.cpp
index e34e0bc698..cdc60c8aa4 100644
--- a/engines/pink/director.cpp
+++ b/engines/pink/director.cpp
@@ -20,7 +20,44 @@
*
*/
+#include "director.h"
+#include <engines/pink/objects/actions/action_cel.h>
+#include "graphics/surface.h"
+#include "graphics/palette.h"
+
namespace Pink {
+Director::Director(OSystem *system)
+ : _system(system) {}
+
+void Director::draw() {
+ bool needUpdate = 0;
+ for (int i = 0; i < _sprites.size(); ++i) {
+ Video::FlicDecoder *decoder = _sprites[i]->getDecoder();
+ if (decoder->needsUpdate()) {
+ const Graphics::Surface *surface = decoder->decodeNextFrame();
+ _system->copyRectToScreen(surface->getPixels(), surface->pitch, 0, 0, surface->w, surface->h);
+ needUpdate = 1;
+ }
+ }
+ if (needUpdate)
+ _system->updateScreen();
+}
+
+void Director::addSprite(ActionCEL *sprite) {
+ _sprites.push_back(sprite); //TODO impl sorting
+}
+
+void Director::removeSprite(ActionCEL *sprite) {
+ for (int i = 0; i < _sprites.size(); ++i) {
+ if (sprite == _sprites[i]) {
+ _sprites.remove_at(i);
+ break;
+ }
+ }
+}
+void Director::setPallette(const byte *pallete) {
+ _system->getPaletteManager()->setPalette(pallete, 0, 256);
+}
} \ No newline at end of file