generated from sigonasr2/CPlusPlusProjectTemplate
Dynamic Map transitions now completed
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
cc5ab9ff7a
commit
345217571a
Binary file not shown.
@ -33,6 +33,7 @@ class SeasonI:public PixelGameEngine{
|
||||
void SetupEncounters(); 됐어
|
||||
void SetupBattleProperties(); 됐어
|
||||
void SetupCutscenes();
|
||||
void SetupMapList();
|
||||
void SetGameFlag(Flag flag,bool val);
|
||||
void LoadMap(Map*map);
|
||||
void SaveMap(Map*map);
|
||||
@ -127,6 +128,7 @@ class SeasonI:public PixelGameEngine{
|
||||
void DrawInventory();
|
||||
void ChoiceMade(int choice);
|
||||
void StartCutscene(Cutscene*cutscene);
|
||||
void DrawTriggers();
|
||||
};
|
||||
extern SeasonI*GAME;
|
||||
#endif
|
@ -75,13 +75,13 @@ OBJECT160.000000;224.000000;8
|
||||
OBJECT288.000000;224.000000;8
|
||||
OBJECT224.000000;224.000000;8
|
||||
OBJECT256.000000;224.000000;7
|
||||
OBJECT328.000000;215.000000;0
|
||||
OBJECT288.000000;256.000000;8
|
||||
OBJECT256.000000;256.000000;8
|
||||
OBJECT224.000000;256.000000;8
|
||||
OBJECT192.000000;256.000000;8
|
||||
OBJECT160.000000;256.000000;8
|
||||
OBJECT512.000000;288.000000;158
|
||||
OBJECT429.000000;276.000000;0
|
||||
OBJECT256.000000;288.000000;90
|
||||
OBJECT128.000000;288.000000;90
|
||||
OBJECT192.000000;320.000000;90
|
||||
@ -91,8 +91,10 @@ OBJECT96.000000;416.000000;159
|
||||
ENCOUNTER64.000000;512.000000;90;2
|
||||
ENCOUNTER192.000000;352.000000;100;1
|
||||
ENCOUNTER480.000000;160.000000;100;3
|
||||
TRIGGER32;288;1;32;32
|
||||
TRIGGER96;352;1;32;32
|
||||
TRIGGER32;384;1;32;32
|
||||
TRIGGER32;288;1;32;32
|
||||
TRIGGER416;256;2;32;32
|
||||
TRIGGER128;224;1;32;32
|
||||
TRIGGER96;224;1;32;32
|
||||
TRIGGER64;224;1;32;32
|
||||
TRIGGER64;256;1;32;32
|
||||
TRIGGER96;256;1;32;32
|
||||
TRIGGER128;256;1;32;32
|
||||
TRIGGER416;256;2;32;32;1;160.000000;256.000000
|
@ -69,4 +69,4 @@ TRIGGER96;352;1;32;32
|
||||
TRIGGER96;384;1;32;32
|
||||
TRIGGER64;384;1;32;32
|
||||
TRIGGER32;384;1;32;32
|
||||
TRIGGER416;256;3;32;32
|
||||
TRIGGER416;256;2;32;32;0;256.000000;96.000000
|
88
main.cpp
88
main.cpp
@ -54,7 +54,7 @@ const float TARGET_RATE = 1/60.0;
|
||||
int MAP_WIDTH=-1;
|
||||
int MAP_HEIGHT=-1;
|
||||
Map*CURRENT_MAP=nullptr;
|
||||
extern std::map<MapName::Map,Map*> MAPS;
|
||||
std::map<MapName::Map,Map*> MAPS;
|
||||
int GAME_STATE = GameState::EDITOR;
|
||||
vi2d SELECTED_TILE={0,0};
|
||||
vi2d HIGHLIGHTED_TILE={0,0};
|
||||
@ -238,6 +238,7 @@ bool SeasonI::OnUserCreate(){
|
||||
SetupEncounters();
|
||||
SetupBattleProperties();
|
||||
SetupCutscenes();
|
||||
SetupMapList();
|
||||
SetGameFlag(Flag::TEST_FLAG1,false);
|
||||
SetGameFlag(Flag::TEST_FLAG2,false);
|
||||
SetGameFlag(Flag::TEST_FLAG3,false);
|
||||
@ -862,27 +863,37 @@ void SeasonI::LoadMap(Map*map) {
|
||||
lastMarker=marker;
|
||||
int size_x,size_y;
|
||||
split4>>size_x;
|
||||
marker=data.find_first_of(';',marker+1);
|
||||
std::stringstream split5(data.substr(lastMarker+1,marker-lastMarker-1));
|
||||
lastMarker=marker;
|
||||
split5>>size_y;
|
||||
Map*mapTrigger=nullptr;
|
||||
vd2d triggerCoords;
|
||||
if (data.find_first_of(';',marker+1)!=std::string::npos) {
|
||||
if (marker!=std::string::npos) {
|
||||
//This means there's extra data we should grab. Should be map, and two positional coordinates.
|
||||
marker=data.find_first_of(';',marker+1);
|
||||
std::stringstream split6(data.substr(lastMarker+1,marker-lastMarker-1));
|
||||
lastMarker=marker;
|
||||
int mapVal;
|
||||
int mapVal=0;
|
||||
split6>>mapVal;
|
||||
if (MAPS.count((MapName::Map)mapVal)) {
|
||||
mapTrigger=MAPS[(MapName::Map)mapVal];
|
||||
marker=data.find_first_of(';',marker+1);
|
||||
std::stringstream split7(data.substr(lastMarker+1,marker-lastMarker-1));
|
||||
lastMarker=marker;
|
||||
split7>>triggerCoords.x;
|
||||
marker=data.find_first_of(';',marker+1);
|
||||
std::stringstream split8(data.substr(lastMarker+1,marker-lastMarker-1));
|
||||
lastMarker=marker;
|
||||
split8>>triggerCoords.y;
|
||||
printf(" Found extra data.\n");
|
||||
}
|
||||
printf(" Found extra data. Map:%s\n",mapTrigger->mapname.c_str());
|
||||
map->triggers.push_back(new Trigger({(int)x,(int)y},{size_x,size_y},(TriggerName::Trigger)id,triggerCoords,mapTrigger));
|
||||
} else {
|
||||
printf(" Failed to load extra data.\n");
|
||||
}
|
||||
} else {
|
||||
map->triggers.push_back(new Trigger({(int)x,(int)y},{size_x,size_y},(TriggerName::Trigger)id));
|
||||
}
|
||||
printf("Trigger %d Loaded.\n",id);
|
||||
}
|
||||
} else {
|
||||
@ -1009,7 +1020,10 @@ void SeasonI::SaveMap(Map*map) {
|
||||
|
||||
for (int i=0;i<map->triggers.size();i++) {
|
||||
f.put('\n');
|
||||
const std::string trigger="TRIGGER"+std::to_string(map->triggers[i]->GetPosX())+";"+std::to_string(map->triggers[i]->GetPosY())+";"+std::to_string(map->triggers[i]->GetID())+";"+std::to_string(map->triggers[i]->GetSizeX())+";"+std::to_string(map->triggers[i]->GetSizeY())+";"+std::to_string(map->triggers[i]->GetMapPtr()->myID)+";"+std::to_string(map->triggers[i]->GetAdditionalCoordData().x)+";"+std::to_string(map->triggers[i]->GetAdditionalCoordData().y);
|
||||
std::string trigger="TRIGGER"+std::to_string(map->triggers[i]->GetPosX())+";"+std::to_string(map->triggers[i]->GetPosY())+";"+std::to_string(map->triggers[i]->GetID())+";"+std::to_string(map->triggers[i]->GetSizeX())+";"+std::to_string(map->triggers[i]->GetSizeY());
|
||||
if (map->triggers[i]->GetMapPtr()!=nullptr) {
|
||||
trigger+=";"+std::to_string(map->triggers[i]->GetMapPtr()->myID)+";"+std::to_string(map->triggers[i]->GetAdditionalCoordData().x)+";"+std::to_string(map->triggers[i]->GetAdditionalCoordData().y);
|
||||
}
|
||||
for (int j=0;j<trigger.length();j++) {
|
||||
f.put(trigger[j]);
|
||||
}
|
||||
@ -1294,6 +1308,13 @@ void SeasonI::updateGame(){
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case GameState::MAP_POSITION_SELECT:{
|
||||
int selectedTileX=(GetMouseX()+cameraPos.x)/32;
|
||||
int selectedTileY=(GetMouseY()+cameraPos.y)/32;
|
||||
if (selectedTileX<MAP_WIDTH&&selectedTileY<MAP_HEIGHT&&selectedTileX>=0&&selectedTileY>=0) {
|
||||
HIGHLIGHTED_TILE={selectedTileX,selectedTileY};
|
||||
}
|
||||
}break;
|
||||
case GameState::EDITOR:{
|
||||
if (IsTextEntryEnabled()) {
|
||||
return;
|
||||
@ -1384,8 +1405,17 @@ void SeasonI::updateGame(){
|
||||
if (GetMouse(1).bHeld) {
|
||||
switch (EDITING_LAYER) {
|
||||
case layer::COLLISION:{
|
||||
if (EDITING_LAYER==layer::COLLISION&&SELECTED_TRIGGER!=TriggerName::NONE) {
|
||||
for (int i=0;i<CURRENT_MAP->triggers.size();i++) {
|
||||
if (CURRENT_MAP->triggers[i]->GetPos()==HIGHLIGHTED_TILE*32) {
|
||||
delete CURRENT_MAP->triggers[i];
|
||||
CURRENT_MAP->triggers.erase(CURRENT_MAP->triggers.begin()+i--);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
TILE*tile=MAP5[HIGHLIGHTED_TILE.y][HIGHLIGHTED_TILE.x];
|
||||
tile->tileX=tile->tileY=15;
|
||||
}
|
||||
}break;
|
||||
case layer::HIGH:{
|
||||
TILE*tile=MAP[HIGHLIGHTED_TILE.y][HIGHLIGHTED_TILE.x];
|
||||
@ -2258,11 +2288,15 @@ void SeasonI::keyUpdates() {
|
||||
}
|
||||
}break;
|
||||
case GameState::MAP_POSITION_SELECT:{
|
||||
if (GetMouse(0).bReleased) {
|
||||
LAST_PLACED_TRIGGER->SetExtraCoords(HIGHLIGHTED_TILE*32);
|
||||
CURRENT_MAP=LAST_PLACED_TRIGGER->GetMapPtr();
|
||||
LoadMap(ORIGINATING_MAP);
|
||||
CURRENT_MAP=ORIGINATING_MAP;
|
||||
LoadMap(CURRENT_MAP);
|
||||
CURRENT_MAP->triggers.push_back(LAST_PLACED_TRIGGER);
|
||||
LAST_PLACED_TRIGGER=nullptr;
|
||||
GAME_STATE=GameState::EDITOR;
|
||||
SELECTING_A_MAP_FOR_TRIGGER=false;
|
||||
}
|
||||
}break;
|
||||
case GameState::EDITOR:{
|
||||
if (IsTextEntryEnabled()) {
|
||||
@ -2352,7 +2386,7 @@ void SeasonI::keyUpdates() {
|
||||
if (SELECTING_A_MAP_FOR_TRIGGER) {
|
||||
SELECTING_A_MAP_FOR_TRIGGER=false;
|
||||
LAST_PLACED_TRIGGER->SetMap(CURRENT_MAP);
|
||||
printf("Trigger Map Location set to %s",CURRENT_MAP->mapname.c_str());
|
||||
printf("Trigger Map Location set to %s\n",CURRENT_MAP->mapname.c_str());
|
||||
GAME_STATE=GameState::MAP_POSITION_SELECT;
|
||||
} else {
|
||||
GAME_STATE=GameState::EDITOR;
|
||||
@ -2830,16 +2864,7 @@ void SeasonI::drawGame(){
|
||||
DrawRectDecal((HIGHLIGHTED_TILE)*32-cameraPos,{32,32},YELLOW);
|
||||
if (EDITING_LAYER==layer::COLLISION&&SELECTED_TRIGGER!=TriggerName::NONE) {
|
||||
DrawStringPropDecal({2,2},Wrap("Editing Triggers - Selected "+TRIGGERS[SELECTED_TRIGGER],WIDTH-4,true,{1,1}));
|
||||
for (auto&trigger:CURRENT_MAP->triggers) {
|
||||
FillRectDecal(trigger->GetPos()-cameraPos,trigger->GetSize(),Pixel(255,0,0,64));
|
||||
DrawRectDecal(trigger->GetPos()-cameraPos,trigger->GetSize(),YELLOW);
|
||||
vi2d textOffset={2,2};
|
||||
std::string triggerText=TRIGGERS[(TriggerName::Trigger)trigger->GetID()];
|
||||
if ((TriggerName::Trigger)trigger->GetID()==TriggerName::GOTO_MAP) {
|
||||
triggerText="GOTO "+trigger->GetMapPtr()->mapname+"\n"+std::to_string(trigger->GetAdditionalCoordData().x)+"\n"+std::to_string(trigger->GetAdditionalCoordData().y);
|
||||
}
|
||||
DrawStringDecal(trigger->GetPos()-cameraPos+textOffset,triggerText,WHITE,{28.f/GetTextSize(triggerText).x,1.f});
|
||||
}
|
||||
DrawTriggers();
|
||||
} else
|
||||
if (EDITING_LAYER==layer::ENCOUNTER) {
|
||||
if (IsTextEntryEnabled()) {
|
||||
@ -3808,6 +3833,7 @@ void SeasonI::HandleCutscenes() {
|
||||
case ActionType::LOAD_MAP:{
|
||||
class LoadMap*action=(class LoadMap*)CurrentCutscene->GetAction();
|
||||
Map*map=action->GetTargetMap();
|
||||
CURRENT_MAP=map;
|
||||
LoadMap(map);
|
||||
CurrentCutscene->AdvanceAction();
|
||||
}break;
|
||||
@ -3817,6 +3843,9 @@ void SeasonI::HandleCutscenes() {
|
||||
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||
PARTY_MEMBER_OBJ[i]->SetPos(pos);
|
||||
}
|
||||
const vi2d cameraOffset={WIDTH/2,HEIGHT/2};
|
||||
cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()-cameraOffset;
|
||||
CurrentCutscene->AdvanceAction();
|
||||
}break;
|
||||
}
|
||||
|
||||
@ -5127,6 +5156,27 @@ void SeasonI::SetupCutscenes(){
|
||||
};
|
||||
}
|
||||
|
||||
void SeasonI::DrawTriggers(){
|
||||
for (auto&trigger:CURRENT_MAP->triggers) {
|
||||
FillRectDecal(trigger->GetPos()-cameraPos,trigger->GetSize(),Pixel(255,0,0,64));
|
||||
DrawRectDecal(trigger->GetPos()-cameraPos,trigger->GetSize(),YELLOW);
|
||||
vi2d textOffset={2,2};
|
||||
std::string triggerText=TRIGGERS[(TriggerName::Trigger)trigger->GetID()];
|
||||
if ((TriggerName::Trigger)trigger->GetID()==TriggerName::GOTO_MAP) {
|
||||
triggerText="GOTO "+trigger->GetMapPtr()->mapname+"\n"+std::to_string(trigger->GetAdditionalCoordData().x)+"\n"+std::to_string(trigger->GetAdditionalCoordData().y);
|
||||
}
|
||||
DrawStringDecal(trigger->GetPos()-cameraPos+textOffset,triggerText,WHITE,{28.f/GetTextSize(triggerText).x,1.f});
|
||||
}
|
||||
}
|
||||
|
||||
void SeasonI::SetupMapList(){
|
||||
int MAP_ENUM_COUNT=0;
|
||||
MAPS={
|
||||
{(MapName::Map)MAP_ENUM_COUNT++,new Map("map0","map0_2","map0_3","map0_4","map0_5",SPRITES["terrainmap.png"],"Onett",(MapName::Map)(MAP_ENUM_COUNT-1))},
|
||||
{(MapName::Map)MAP_ENUM_COUNT++,new Map("newmap","newmap_2","newmap_3","newmap_4","newmap_5",SPRITES["terrainmap.png"],"Twoson",(MapName::Map)(MAP_ENUM_COUNT-1))},
|
||||
};
|
||||
}
|
||||
|
||||
#ifndef TEST_SUITE
|
||||
int main()
|
||||
{
|
||||
|
12
map.cpp
12
map.cpp
@ -1,12 +0,0 @@
|
||||
#include "pixelGameEngine.h"
|
||||
#include "map.h"
|
||||
|
||||
using namespace olc;
|
||||
|
||||
extern std::map<std::string,Decal*> SPRITES;
|
||||
|
||||
int MAP_ENUM_COUNT=0;
|
||||
std::map<MapName::Map,Map*> MAPS={
|
||||
{(MapName::Map)MAP_ENUM_COUNT++,new Map("map0","map0_2","map0_3","map0_4","map0_5",SPRITES["terrainmap.png"],"Onett",(MapName::Map)(MAP_ENUM_COUNT-1))},
|
||||
{(MapName::Map)MAP_ENUM_COUNT++,new Map("newmap","newmap_2","newmap_3","newmap_4","newmap_5",SPRITES["terrainmap.png"],"Twoson",(MapName::Map)(MAP_ENUM_COUNT-1))},
|
||||
};
|
@ -205,9 +205,6 @@ bool SeasonI::OnUserCreate(){
|
||||
ITEMLIST[ItemName::FREEZE_PACKET]->description=="Lets out some blistering cold weather.");
|
||||
Test("Freeze Packet drop chance is set properly",
|
||||
ITEMLIST[ItemName::FREEZE_PACKET]->dropChance==256);
|
||||
for (int i=0;i<10000;i++) {
|
||||
LoadMap(MAPS[MapName::ONETT]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -46,9 +46,10 @@ class Trigger{
|
||||
MapTransitionCutscene*scene=(MapTransitionCutscene*)CUTSCENES[CutsceneName::TRANSFER_MAP_CUTSCENE];
|
||||
std::vector<CutsceneAction*>actions=scene->GetActions();
|
||||
LoadMap*mapLoadAction=(LoadMap*)actions[1];
|
||||
mapLoadAction->SetTargetMap(CURRENT_MAP);
|
||||
mapLoadAction->SetTargetMap(mapChoice);
|
||||
MovePlayerObjects*playerMoveAction=(MovePlayerObjects*)actions[2];
|
||||
playerMoveAction->SetTargetPos(HIGHLIGHTED_TILE);
|
||||
playerMoveAction->SetTargetPos(extraCoords);
|
||||
GAME->StartCutscene(scene);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user