/
trilirium
/
Pacman
Обзор
Документация
Войти
/
trilirium
/
Pacman
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ThirdCutscene.cpp
125 строк
3 KB
Trilirium
first commit
19 июн 2026, 11:07
19 июн 2026, 11:07
d44591e
Код
Авторство
О чём код?
// ThirdCutscene.cpp // ///////////////////////////////////////////////////////////////////////////// #include <cassert> #include "CommonCutscene.h" #include "ThirdCutscene.h" #include "Game.h" #include "RedGhost.h" #include "Pacman.h" #include "Video.h" using namespace Puckman; GameSubstate *ThirdCutsceneState::substates[6]; ///////////////////////////////////////////////////////////////////////////// // cutscene state ///////////////////////////////////////////////////////////////////////////// ThirdCutsceneState::ThirdCutsceneState() { substates[0x00] = new ThirdCutscene0Substate(); substates[0x01] = new ThirdCutscene1Substate(); substates[0x02] = 0; substates[0x03] = new ThirdCutscene3Substate(); substates[0x04] = new ThirdCutscene4Substate(); substates[0x05] = new ThirdCutscene5Substate(); } ThirdCutsceneState::~ThirdCutsceneState() { // delete cutscene substates for (int i = 0; i < 6; i++){ delete substates[i]; } } void ThirdCutsceneState::run() { assert((theGame->cutsceneState[2] >= 0) && (theGame->cutsceneState[2] < 6)); // delegate the action to the substate if (substates[theGame->cutsceneState[2]]){ substates[theGame->cutsceneState[2]]->run(); } } ///////////////////////////////////////////////////////////////////////////// // cutscene substate ///////////////////////////////////////////////////////////////////////////// void ThirdCutscene0Substate::run() { if (theGame->pacman->tilePosX == 0x25){ // set red ghost to go for pacman theGame->ghost[RED]->substate = 1; theGame->secondDiffFlag = true; // draws an invisible mini level Video::drawInvisibleMiniLevel(); // increment cutscene substate theGame->cutsceneState[2]++; } else { cutsceneMainLoop(false); } } void ThirdCutscene1Substate::run() { RedGhost *rg = (RedGhost *)theGame->ghost[RED]; if ((rg->posX == 0xfe) || (rg->posX == 0xff)){ rg->posX += 2; rg->hasToChangeOrientation = true; rg->checkOrientationChanges(); // schedules a cutscene substate change in a second theScheduler->addScheduledTask(new Task(9, Task::TEN_HUNDREDTHS, 10)); // increment cutscene substate theGame->cutsceneState[2]++; } else { cutsceneMainLoop(false); // hide pacman if it has reached the left side if (theGame->pacman->tilePosX == 0x3d){ theGame->pacman->color = 0; } } } void ThirdCutscene3Substate::run() { if (theGame->ghost[RED]->actualTilePosX == 0x2d){ // increment cutscene substate theGame->cutsceneState[2]++; } else { cutsceneMainLoop(false); } } void ThirdCutscene4Substate::run() { if (theGame->ghost[RED]->actualTilePosX == 0x1e){ // increment cutscene substate theGame->cutsceneState[2]++; } else { cutsceneMainLoop(false); } } void ThirdCutscene5Substate::run() { // reset cutscene state theGame->cutsceneState[2] = 0; // schedules a substate change in 0.5 seconds theScheduler->addScheduledTask(new Task(0, Task::TEN_HUNDREDTHS, 5)); // increments level substate theGame->states[PLAYING]->substate++; }