aboutsummaryrefslogtreecommitdiff
path: root/engines/hdb/ai-cinematic.cpp
diff options
context:
space:
mode:
authorNipun Garg2019-07-13 23:26:13 +0530
committerEugene Sandulenko2019-09-03 17:17:19 +0200
commite1fbaaea2b34e75918eaafad335bf50f39aa41c8 (patch)
treed8c5d500ffda0c461e652db6edd946f8ada696e7 /engines/hdb/ai-cinematic.cpp
parent79a4a37e8d838b2ff683785f7c9009da38bbcc33 (diff)
downloadscummvm-rg350-e1fbaaea2b34e75918eaafad335bf50f39aa41c8.tar.gz
scummvm-rg350-e1fbaaea2b34e75918eaafad335bf50f39aa41c8.tar.bz2
scummvm-rg350-e1fbaaea2b34e75918eaafad335bf50f39aa41c8.zip
HDB: Add cinematic functions for Pic
Diffstat (limited to 'engines/hdb/ai-cinematic.cpp')
-rw-r--r--engines/hdb/ai-cinematic.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/engines/hdb/ai-cinematic.cpp b/engines/hdb/ai-cinematic.cpp
index 24ecd291d1..5eafd47f05 100644
--- a/engines/hdb/ai-cinematic.cpp
+++ b/engines/hdb/ai-cinematic.cpp
@@ -65,6 +65,7 @@ static const char *cineTypeStr[] = {
void AI::processCines() {
AIEntity *e;
+ Picture *p;
bool complete, bailOut;
if (!_cineActive) {
@@ -311,6 +312,49 @@ void AI::processCines() {
complete = true;
}
break;
+ case C_DRAWPIC:
+
+ if ((p = cineFindInBlitList(_cine[i]->id)) == NULL) {
+ p = g_hdb->_gfx->loadPic(_cine[i]->string);
+ cineAddToFreeList(p);
+ cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, false);
+ }
+ _cine[i]->pic = p;
+ _cine[i]->pic->draw((int)_cine[i]->x, (int)_cine[i]->y);
+ complete = true;
+ break;
+ case C_DRAWMASKEDPIC:
+
+ if ((p = cineFindInBlitList(_cine[i]->id)) == NULL) {
+ p = g_hdb->_gfx->loadPic(_cine[i]->string);
+ cineAddToFreeList(p);
+ cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, true);
+ }
+ _cine[i]->pic = p;
+ _cine[i]->pic->drawMasked((int)_cine[i]->x, (int)_cine[i]->y);
+ complete = true;
+ break;
+
+ case C_MOVEPIC:
+ if (!_cine[i]->start) {
+ Picture *pic = cineFindInBlitList(_cine[i]->id);
+ if (!pic) {
+ pic = g_hdb->_gfx->loadPic(_cine[i]->string);
+ cineAddToFreeList(pic);
+ } else
+ cineRemoveFromBlitList(_cine[i]->id);
+ _cine[i]->pic = pic;
+ _cine[i]->start = 1;
+ }
+
+ cineRemoveFromBlitList(_cine[i]->id);
+ _cine[i]->x += _cine[i]->xv;
+ _cine[i]->y += _cine[i]->yv;
+ cineAddToBlitList(_cine[i]->id, _cine[i]->pic, (int)_cine[i]->x, (int)_cine[i]->y, false);
+ if (abs((int)(_cine[i]->x - _cine[i]->x2)) <= 1 && abs((int)(_cine[i]->y - _cine[i]->y2)) <= 1)
+ complete = true;
+ break;
+
case C_MOVEMASKEDPIC:
if (!_cine[i]->start) {
Picture *pic = cineFindInBlitList(_cine[i]->id);
@@ -330,6 +374,7 @@ void AI::processCines() {
if (abs((int)(_cine[i]->x - _cine[i]->x2)) <= 1 && abs((int)(_cine[i]->y - _cine[i]->y2)) <= 1)
complete = true;
break;
+
case C_USEENTITY:
for (Common::Array<AIEntity *>::iterator it = _ents->begin(); it != _ents->end(); it++) {
if ((*it)->entityName && Common::matchString((*it)->entityName, _cine[i]->string, true)) {
@@ -676,6 +721,57 @@ void AI::cineCenterTextOut(const char *text, int y, int timer) {
_cine.push_back(cmd);
}
+void AI::cineDrawPic(const char *id, const char *pic, int x, int y) {
+ if (!pic || !id) {
+ warning("cineDrawPic: Missing ID or PIC");
+ return;
+ }
+
+ CineCommand *cmd = new CineCommand;
+ cmd->x = x;
+ cmd->y = y;
+ cmd->string = pic;
+ cmd->id = id;
+ cmd->cmdType = C_DRAWPIC;
+ _cine.push_back(cmd);
+}
+
+void AI::cineDrawMaskedPic(const char *id, const char *pic, int x, int y) {
+ if (!pic || !id) {
+ warning("cineDrawMaskedPic: Missing ID or PIC");
+ return;
+ }
+
+ CineCommand *cmd = new CineCommand;
+ cmd->x = x;
+ cmd->y = y;
+ cmd->string = pic;
+ cmd->id = id;
+ cmd->cmdType = C_DRAWMASKEDPIC;
+ _cine.push_back(cmd);
+}
+
+void AI::cineMovePic(const char *id, const char *pic, int x1, int y1, int x2, int y2, int speed) {
+ if (!pic || !id) {
+ warning("cineMovePic: Missing ID or PIC");
+ return;
+ }
+
+ CineCommand *cmd = new CineCommand;
+ cmd->x = x1;
+ cmd->y = y1;
+ cmd->x2 = x2;
+ cmd->y2 = y2;
+ cmd->speed = speed;
+ cmd->xv = ((double)(x2-x1)) / (double)speed;
+ cmd->yv = ((double)(y2-y1)) / (double)speed;
+ cmd->start = 0;
+ cmd->string = pic;
+ cmd->id = id;
+ cmd->cmdType = C_MOVEPIC;
+ _cine.push_back(cmd);
+}
+
void AI::cineMoveMaskedPic(const char *id, const char *pic, int x1, int y1, int x2, int y2, int speed) {
if (!pic || !id) {
warning("cineMoveMaskedPic: Missing ID or PIC");