diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 7464480..5361fab 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/main.cpp b/main.cpp index 0dce2a5..57e3250 100644 --- a/main.cpp +++ b/main.cpp @@ -15,6 +15,7 @@ #include "battleproperty.h" #include "map.h" #include "SeasonI.h" +#include "trigger.h" //#include "test/test.h" @@ -190,6 +191,8 @@ std::vector> MAP2={}; std::vector> MAP3={}; std::vector> MAP4={}; std::vector> MAP5={}; //Collision Layer +std::vector TRIGGERS={}; +std::map Trigger::TRIGGERLIST={}; std::map SPRITES; std::map ANIMATIONS={}; std::map OBJ_INFO={}; @@ -229,7 +232,6 @@ bool SeasonI::OnUserCreate(){ SetupObjectInfo(); SetupEncounters(); SetupBattleProperties(); - SetGameFlag(Flag::TEST_FLAG1,false); SetGameFlag(Flag::TEST_FLAG2,false); SetGameFlag(Flag::TEST_FLAG3,false); @@ -791,6 +793,7 @@ void SeasonI::LoadMap(Map*map) { delete OBJECTS[i]; } OBJECTS.clear(); + TRIGGERS.clear(); for (int i=0;i<4;i++) { PARTY_MEMBER_OBJ[i]=nullptr; PARTY_MEMBER_ID[i]=0; @@ -801,10 +804,13 @@ void SeasonI::LoadMap(Map*map) { if (MAP_WIDTH==-1) { MAP_WIDTH=data.length()/2; } - if (data.find("OBJECT")!=std::string::npos||data.find("ENCOUNTER")!=std::string::npos) { + if (data.find("OBJECT")!=std::string::npos||data.find("ENCOUNTER")!=std::string::npos + ||data.find("TRIGGER")!=std::string::npos) { int marker=data.find_first_of(';'); int lastMarker=marker; - std::stringstream split1((data.find("OBJECT")!=std::string::npos)?data.substr(6,marker-6):data.substr(9,marker-9)); + std::stringstream split1((data.find("OBJECT")!=std::string::npos)?data.substr(6,marker-6): + (data.find("ENCOUNTER")!=std::string::npos)?data.substr(9,marker-9): + (data.find("TRIGGER")!=std::string::npos)?data.substr(7,marker-7):""); marker=data.find_first_of(';',marker+1); std::stringstream split2(data.substr(lastMarker+1,marker-lastMarker-1)); lastMarker=marker; @@ -846,6 +852,19 @@ void SeasonI::LoadMap(Map*map) { LoadEncounter(map,{x,y},pct,id,rand()%100>size_x; + std::stringstream split5(data.substr(lastMarker+1,marker-lastMarker-1)); + lastMarker=marker; + split5>>size_y; + TRIGGERS.push_back(new Trigger({(int)x,(int)y},{size_x,size_y},id)); + map->triggers.push_back(Trigger::TRIGGERLIST[(TriggerName::Trigger)id]); + printf("Trigger %d Loaded.\n",id); } } else { std::vector tiles; @@ -968,6 +987,14 @@ void SeasonI::SaveMap(Map*map) { } } + for (int i=0;itriggers.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()); + for (int j=0;j0?" ":"")+word):GetTextSize(newStr+(newStr.size()>0?" ":"")+word))*scale; + vi2d newSize = vd2d(proportional?GetTextSizeProp(newStr+(newStr.size()>0?" ":"")+word):GetTextSize(newStr+(newStr.size()>0?" ":"")+word))*scale; if (newSize.x>width) { newStr+="\n"+word; } else { diff --git a/map.h b/map.h index b01e085..d245e59 100644 --- a/map.h +++ b/map.h @@ -2,6 +2,7 @@ #define MAP_H #include "pixelGameEngine.h" #include "encounters.h" +#include "trigger.h" using namespace olc; @@ -14,6 +15,7 @@ class Map{ std::string l5filename; Decal*tileset; std::vector encounters; + std::vector triggers; Map(std::string fname,std::string layer2_fname,std::string layer3_fname,std::string layer4_fname,std::string layer5_fname,Decal*tileset) { this->filename=fname; this->l2filename=layer2_fname; diff --git a/trigger.h b/trigger.h new file mode 100644 index 0000000..4bf1e71 --- /dev/null +++ b/trigger.h @@ -0,0 +1,42 @@ +#include "pixelGameEngine.h" + +using namespace olc; + +namespace TriggerName{ + enum Trigger{ + START_CUTSCENE_1 + }; +} + +class Trigger{ + vi2d pos; + vi2d size; + int id; + public: + Trigger(vi2d pos,vi2d size,int id) + :pos(pos),size(size),id(id){} + bool IsInside(vd2d point) { + return point>pos&&point