generated from sigonasr2/CPlusPlusProjectTemplate
cutscene manager first pieces implementation
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
768b010016
commit
74e328c8f0
Binary file not shown.
@ -53,26 +53,28 @@ OBJECT224.000000;128.000000;2
|
|||||||
OBJECT160.000000;128.000000;2
|
OBJECT160.000000;128.000000;2
|
||||||
OBJECT192.000000;128.000000;2
|
OBJECT192.000000;128.000000;2
|
||||||
OBJECT288.000000;128.000000;2
|
OBJECT288.000000;128.000000;2
|
||||||
OBJECT212.000000;228.000000;0
|
OBJECT313.000000;131.000000;4
|
||||||
OBJECT192.000000;160.000000;2
|
OBJECT192.000000;160.000000;2
|
||||||
OBJECT160.000000;160.000000;2
|
OBJECT160.000000;160.000000;2
|
||||||
OBJECT192.000000;192.000000;2
|
|
||||||
OBJECT160.000000;192.000000;2
|
|
||||||
OBJECT192.000000;224.000000;2
|
|
||||||
OBJECT160.000000;224.000000;2
|
|
||||||
OBJECT313.000000;131.000000;4
|
|
||||||
OBJECT288.000000;160.000000;3
|
|
||||||
OBJECT224.000000;160.000000;3
|
|
||||||
OBJECT256.000000;160.000000;2
|
OBJECT256.000000;160.000000;2
|
||||||
|
OBJECT224.000000;160.000000;1
|
||||||
|
OBJECT288.000000;160.000000;1
|
||||||
OBJECT313.000000;136.000000;5
|
OBJECT313.000000;136.000000;5
|
||||||
OBJECT313.000000;141.000000;6
|
OBJECT313.000000;141.000000;6
|
||||||
OBJECT313.000000;151.000000;8
|
OBJECT313.000000;151.000000;8
|
||||||
|
OBJECT288.000000;160.000000;3
|
||||||
|
OBJECT224.000000;160.000000;3
|
||||||
|
OBJECT160.000000;192.000000;2
|
||||||
OBJECT256.000000;192.000000;2
|
OBJECT256.000000;192.000000;2
|
||||||
OBJECT288.000000;192.000000;2
|
OBJECT288.000000;192.000000;2
|
||||||
OBJECT224.000000;192.000000;2
|
OBJECT224.000000;192.000000;2
|
||||||
|
OBJECT192.000000;192.000000;1
|
||||||
|
OBJECT192.000000;224.000000;2
|
||||||
|
OBJECT160.000000;224.000000;2
|
||||||
OBJECT288.000000;224.000000;2
|
OBJECT288.000000;224.000000;2
|
||||||
OBJECT256.000000;224.000000;2
|
|
||||||
OBJECT224.000000;224.000000;2
|
OBJECT224.000000;224.000000;2
|
||||||
|
OBJECT256.000000;224.000000;1
|
||||||
|
OBJECT212.000000;228.000000;0
|
||||||
OBJECT288.000000;256.000000;2
|
OBJECT288.000000;256.000000;2
|
||||||
OBJECT256.000000;256.000000;2
|
OBJECT256.000000;256.000000;2
|
||||||
OBJECT224.000000;256.000000;2
|
OBJECT224.000000;256.000000;2
|
||||||
|
115
cutscene.h
Normal file
115
cutscene.h
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#include "pixelGameEngine.h"
|
||||||
|
#include <cstdarg>
|
||||||
|
|
||||||
|
#define CAMERA_MOVESPD 5
|
||||||
|
|
||||||
|
using namespace olc;
|
||||||
|
|
||||||
|
enum PriorityDirection{
|
||||||
|
HORZ_FIRST,
|
||||||
|
VERT_FIRST,
|
||||||
|
BOTH
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ActionType{
|
||||||
|
NONE,
|
||||||
|
PAN_CAMERA,
|
||||||
|
CREATE_OBJECTS,
|
||||||
|
CLEANUP
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneAction{
|
||||||
|
public:
|
||||||
|
virtual ActionType GetActionType()=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cleanup:public CutsceneAction{
|
||||||
|
public:
|
||||||
|
ActionType GetActionType() override{return ActionType::CLEANUP;}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Object;
|
||||||
|
|
||||||
|
class CreateObjects:public CutsceneAction{
|
||||||
|
private:
|
||||||
|
std::vector<Object*>objs;
|
||||||
|
public:
|
||||||
|
template <class T>
|
||||||
|
CreateObjects(std::initializer_list<T> objs) {
|
||||||
|
for( auto elem : objs )
|
||||||
|
{
|
||||||
|
this->objs.push_back(elem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ActionType GetActionType() override{return ActionType::CREATE_OBJECTS;}
|
||||||
|
std::vector<Object*> GetObjects();
|
||||||
|
};
|
||||||
|
|
||||||
|
class PanCamera:public CutsceneAction{
|
||||||
|
private:
|
||||||
|
vd2d targetPos;
|
||||||
|
PriorityDirection dir;
|
||||||
|
double cameraSpd;
|
||||||
|
public:
|
||||||
|
PanCamera(vd2d targetPos,PriorityDirection dir,double cameraSpd=CAMERA_MOVESPD) {
|
||||||
|
this->targetPos=targetPos;
|
||||||
|
this->dir=dir;
|
||||||
|
this->cameraSpd=cameraSpd;
|
||||||
|
}
|
||||||
|
ActionType GetActionType() override{return ActionType::PAN_CAMERA;}
|
||||||
|
vd2d GetCameraTargetPos() {
|
||||||
|
return targetPos;
|
||||||
|
}
|
||||||
|
PriorityDirection GetPriorityDirection() {
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
double GetCameraSpeed() {
|
||||||
|
return cameraSpd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
To use this class, specify multiple actions back-to-back, filling their appropriate arguments.
|
||||||
|
|
||||||
|
In responsive events, poll what CurrentAction() is, and if it's suitable, then use LockAction()
|
||||||
|
to lock the event and perform whatever actions are required. When the cutscene action is complete,
|
||||||
|
you can advance the action using AdvanceAction().
|
||||||
|
*/
|
||||||
|
class Cutscene{
|
||||||
|
private:
|
||||||
|
int actionMarker=0;
|
||||||
|
std::vector<CutsceneAction*> actions;
|
||||||
|
bool actionIsActive=false;
|
||||||
|
public:
|
||||||
|
template <class T>
|
||||||
|
Cutscene(std::initializer_list<T> actions) {
|
||||||
|
AddAction(actions);
|
||||||
|
};
|
||||||
|
template <class T>
|
||||||
|
void AddAction( std::initializer_list<T> actions )
|
||||||
|
{
|
||||||
|
for( auto elem : actions )
|
||||||
|
{
|
||||||
|
this->actions.push_back(elem);
|
||||||
|
}
|
||||||
|
this->actions.push_back(new Cleanup());
|
||||||
|
}
|
||||||
|
ActionType CurrentAction(){
|
||||||
|
if (!actionIsActive&&actionMarker<actions.size()) {
|
||||||
|
return actions[actionMarker]->GetActionType();
|
||||||
|
} else {
|
||||||
|
return ActionType::NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void LockAction() {
|
||||||
|
actionIsActive=true;
|
||||||
|
}
|
||||||
|
void AdvanceAction(){
|
||||||
|
actionIsActive=false;
|
||||||
|
actionMarker++;
|
||||||
|
}
|
||||||
|
void ResetCutscene(){
|
||||||
|
actionMarker=0;
|
||||||
|
actionIsActive=false;
|
||||||
|
}
|
||||||
|
};
|
10
ideas
10
ideas
@ -105,3 +105,13 @@ Power Item Move
|
|||||||
Attack Defend Run
|
Attack Defend Run
|
||||||
|
|
||||||
The Defend command will provide 80% damage reduction.
|
The Defend command will provide 80% damage reduction.
|
||||||
|
|
||||||
|
|
||||||
|
========================
|
||||||
|
|
||||||
|
Cutscenes
|
||||||
|
Create and Move Objects
|
||||||
|
Pan the Camera
|
||||||
|
Fade the game In/Out
|
||||||
|
Start Dialog
|
||||||
|
Set Game Flags
|
22
main.cpp
22
main.cpp
@ -9,10 +9,10 @@
|
|||||||
#include "states.h"
|
#include "states.h"
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include "cutscene.h"
|
||||||
|
|
||||||
#define WIDTH 256
|
#define WIDTH 256
|
||||||
#define HEIGHT 224
|
#define HEIGHT 224
|
||||||
#define CAMERA_MOVESPD 5
|
|
||||||
#define TILEMAP_SIZE_X 512
|
#define TILEMAP_SIZE_X 512
|
||||||
#define TILEMAP_SIZE_Y 512
|
#define TILEMAP_SIZE_Y 512
|
||||||
#define TILEMAP_EDITOR_DRAW_MULT 0.4375
|
#define TILEMAP_EDITOR_DRAW_MULT 0.4375
|
||||||
@ -78,6 +78,7 @@ class Object{
|
|||||||
int disableFlag;
|
int disableFlag;
|
||||||
int enableFlag;
|
int enableFlag;
|
||||||
int objArrElement; //Which element in the object array this object is located in. For sorting purposes.
|
int objArrElement; //Which element in the object array this object is located in. For sorting purposes.
|
||||||
|
bool temp=false; //If set to true, it's marked for deletion after cutscene handling.
|
||||||
//animationSpd is how long to wait before switching frames.
|
//animationSpd is how long to wait before switching frames.
|
||||||
Object(int id,std::string name,vd2d pos,Animation*spr,vd2d scale={1,1},Pixel color=WHITE,int animationSpd=1) {
|
Object(int id,std::string name,vd2d pos,Animation*spr,vd2d scale={1,1},Pixel color=WHITE,int animationSpd=1) {
|
||||||
this->spr=spr;
|
this->spr=spr;
|
||||||
@ -111,13 +112,13 @@ public:
|
|||||||
int MAP_HEIGHT=-1;
|
int MAP_HEIGHT=-1;
|
||||||
Map*CURRENT_MAP;
|
Map*CURRENT_MAP;
|
||||||
Map*MAP_ONETT;
|
Map*MAP_ONETT;
|
||||||
vd2d cameraPos = {0,0};
|
|
||||||
int GAME_STATE = GameState::EDITOR;
|
int GAME_STATE = GameState::EDITOR;
|
||||||
vi2d SELECTED_TILE={0,0};
|
vi2d SELECTED_TILE={0,0};
|
||||||
vi2d HIGHLIGHTED_TILE={0,0};
|
vi2d HIGHLIGHTED_TILE={0,0};
|
||||||
int EDITING_LAYER=layer::DYNAMIC;
|
int EDITING_LAYER=layer::DYNAMIC;
|
||||||
int SELECTED_OBJ_ID = PLAYER;
|
int SELECTED_OBJ_ID = PLAYER;
|
||||||
int OBJ_DISPLAY_OFFSET = 0;
|
int OBJ_DISPLAY_OFFSET = 0;
|
||||||
|
vd2d cameraPos = {0,0};
|
||||||
bool GAME_FLAGS[128]={};
|
bool GAME_FLAGS[128]={};
|
||||||
Object* PLAYER_OBJ;
|
Object* PLAYER_OBJ;
|
||||||
bool messageBoxVisible=false;
|
bool messageBoxVisible=false;
|
||||||
@ -130,6 +131,7 @@ public:
|
|||||||
int messageBoxFrameWaitTime=1;
|
int messageBoxFrameWaitTime=1;
|
||||||
bool messageBoxLoad=false; //Set to true when ready to load a message in.
|
bool messageBoxLoad=false; //Set to true when ready to load a message in.
|
||||||
std::map<int,vi2d> additionalChars;
|
std::map<int,vi2d> additionalChars;
|
||||||
|
Cutscene*TestCutscene;
|
||||||
|
|
||||||
|
|
||||||
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
|
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
|
||||||
@ -175,6 +177,13 @@ public:
|
|||||||
//OBJ_INFO["PLAYER"]=PLAYER_ANIMATION;
|
//OBJ_INFO["PLAYER"]=PLAYER_ANIMATION;
|
||||||
LoadMap(MAP_ONETT);
|
LoadMap(MAP_ONETT);
|
||||||
|
|
||||||
|
TestCutscene=new Cutscene({
|
||||||
|
(CutsceneAction*)new PanCamera({128,128},BOTH),
|
||||||
|
(CutsceneAction*)new PanCamera({128,128},BOTH),
|
||||||
|
(CutsceneAction*)new CreateObjects({
|
||||||
|
new Object(PLAYER,"player",{64,64},ANIMATIONS["player.png"],{1,1},MAGENTA)
|
||||||
|
}),});
|
||||||
|
|
||||||
/*DisplayMessageBox(R"(Hello World!
|
/*DisplayMessageBox(R"(Hello World!
|
||||||
This is a rather long message, but I hope it reaches you well
|
This is a rather long message, but I hope it reaches you well
|
||||||
in some form or capacity or another. Even though it
|
in some form or capacity or another. Even though it
|
||||||
@ -567,8 +576,6 @@ goes on a very long time, I hope you can understand this is only for testing pur
|
|||||||
DrawStringPropDecal({6,6},messageBoxText);
|
DrawStringPropDecal({6,6},messageBoxText);
|
||||||
}
|
}
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
DrawFancyStringDecal({8,8},L"Testing βtesting α\ntesting",RED);
|
|
||||||
DrawFancyStringDecal({36,64},L"TesΣting testing γ\ntestingΩ",RED,{2,2});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void DrawFancyStringDecal(const olc::vf2d& pos, const std::wstring& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }) {
|
void DrawFancyStringDecal(const olc::vf2d& pos, const std::wstring& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }) {
|
||||||
@ -1173,6 +1180,13 @@ goes on a very long time, I hope you can understand this is only for testing pur
|
|||||||
Draw({pos.x+size.x-1,pos.y},Pixel(77, 51, 125));
|
Draw({pos.x+size.x-1,pos.y},Pixel(77, 51, 125));
|
||||||
Draw({pos.x,pos.y+size.y-1},Pixel(77, 51, 125));
|
Draw({pos.x,pos.y+size.y-1},Pixel(77, 51, 125));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayCutscene(int scene) {
|
||||||
|
switch (scene) {
|
||||||
|
case cutscene::TEST_CUTSCENE:{
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,3 +153,9 @@ enum Reference{
|
|||||||
NPC18_8,
|
NPC18_8,
|
||||||
NPC19_8,
|
NPC19_8,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace cutscene{
|
||||||
|
enum{
|
||||||
|
TEST_CUTSCENE
|
||||||
|
};
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user