AreaHighlightTest branch created. Added test code for highlighting arbitrary areas via polygons within a map using optimization map rendering. Release Build 9561.
This commit is contained in:
parent
efcd3f0bf8
commit
27d0e16a94
@ -330,6 +330,11 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"value": "None"
|
"value": "None"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Create Optimization Map (Override)",
|
||||||
|
"type": "bool",
|
||||||
|
"value": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Dev Completion Time - Ranger (s)",
|
"name": "Dev Completion Time - Ranger (s)",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
|
@ -970,6 +970,23 @@ void AiL::RenderWorld(float fElapsedTime){
|
|||||||
PopulateRenderLists();
|
PopulateRenderLists();
|
||||||
|
|
||||||
auto RenderPlayer=[&](vf2d pos,vf2d scale){
|
auto RenderPlayer=[&](vf2d pos,vf2d scale){
|
||||||
|
if(GetCurrentMapData().provideOptimization){
|
||||||
|
|
||||||
|
std::vector<vf2d>points{
|
||||||
|
GetMousePos()-vf2d{50,50},
|
||||||
|
GetMousePos()+vf2d{100,-20},
|
||||||
|
GetMousePos()+vf2d{200,200},
|
||||||
|
GetMousePos()+vf2d{-50,150},
|
||||||
|
GetMousePos()+vf2d{-120,90},};
|
||||||
|
std::vector<vf2d>uvs;
|
||||||
|
|
||||||
|
std::transform(points.begin(),points.end(),std::back_inserter(uvs),[&](const vf2d&point){return view.ScreenToWorld(point)/GetCurrentMap().GetOptimizedMap()->Sprite()->Size();});
|
||||||
|
|
||||||
|
DrawPolygonDecal(GetCurrentMap().GetOptimizedMap()->Decal(),points,uvs);
|
||||||
|
SetDecalMode(DecalMode::WIREFRAME);
|
||||||
|
DrawPolygonDecal(nullptr,points,uvs,RED);
|
||||||
|
SetDecalMode(DecalMode::NORMAL);
|
||||||
|
}
|
||||||
if(player->IsInvisible())return;
|
if(player->IsInvisible())return;
|
||||||
vf2d playerScale=vf2d(player->GetSizeMult(),player->GetSizeMult());
|
vf2d playerScale=vf2d(player->GetSizeMult(),player->GetSizeMult());
|
||||||
int count=0;
|
int count=0;
|
||||||
@ -2217,7 +2234,7 @@ void AiL::InitializeLevel(std::string mapFile,MapName map){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(MAP_DATA[map].MapData.optimized){
|
if(MAP_DATA[map].MapData.optimized||MAP_DATA[map].MapData.provideOptimization){
|
||||||
LOG("Generating optimized map for Map "<<map);
|
LOG("Generating optimized map for Map "<<map);
|
||||||
MAP_DATA[map].optimizedTile=NEW Renderable();
|
MAP_DATA[map].optimizedTile=NEW Renderable();
|
||||||
MAP_DATA[map].optimizedTile->Create(MAP_DATA[map].MapData.width*MAP_DATA[map].MapData.tilewidth,MAP_DATA[map].MapData.height*MAP_DATA[map].MapData.tileheight);
|
MAP_DATA[map].optimizedTile->Create(MAP_DATA[map].MapData.width*MAP_DATA[map].MapData.tilewidth,MAP_DATA[map].MapData.height*MAP_DATA[map].MapData.tileheight);
|
||||||
@ -2245,8 +2262,10 @@ void AiL::InitializeLevel(std::string mapFile,MapName map){
|
|||||||
SetPixelMode(prevMode);
|
SetPixelMode(prevMode);
|
||||||
MAP_DATA[map].optimizedTile->Decal()->Update();
|
MAP_DATA[map].optimizedTile->Decal()->Update();
|
||||||
SetDrawTarget(nullptr);
|
SetDrawTarget(nullptr);
|
||||||
LOG(" Clearing Layer Data...");
|
if(!MAP_DATA[map].MapData.provideOptimization){
|
||||||
MAP_DATA[map].LayerData.clear();
|
MAP_DATA[map].LayerData.clear();
|
||||||
|
LOG(" Clearing Layer Data...");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2732,7 +2751,7 @@ bool AiL::IsOverlayLayer(LayerTag&layer){
|
|||||||
const geom2d::rect<float>AiL::GetTileCollision(MapName map,vf2d pos,bool upperLevel)const{
|
const geom2d::rect<float>AiL::GetTileCollision(MapName map,vf2d pos,bool upperLevel)const{
|
||||||
const MapTag&mapData=MAP_DATA.at(map).MapData;
|
const MapTag&mapData=MAP_DATA.at(map).MapData;
|
||||||
if(pos.x<0||pos.y<0||pos.x>=mapData.width*mapData.tilewidth||pos.y>=mapData.height*mapData.tilewidth)return NO_COLLISION;
|
if(pos.x<0||pos.y<0||pos.x>=mapData.width*mapData.tilewidth||pos.y>=mapData.height*mapData.tilewidth)return NO_COLLISION;
|
||||||
if(MAP_DATA.at(map).optimizedTile)return NO_COLLISION; //Overworld map has no collision.
|
if(GetCurrentMapData().optimized)return NO_COLLISION; //Overworld map has no collision.
|
||||||
|
|
||||||
bool hasTerrain=false;
|
bool hasTerrain=false;
|
||||||
for(const LayerTag&layer:MAP_DATA.at(map).LayerData){ //Figure out if any tile at this position is terrain. If so, we have a collision box to check.
|
for(const LayerTag&layer:MAP_DATA.at(map).LayerData){ //Figure out if any tile at this position is terrain. If so, we have a collision box to check.
|
||||||
|
@ -86,6 +86,7 @@ void State_GameRun::OnUserUpdate(AiL*game){
|
|||||||
game->UpdateCamera(game->GetElapsedTime());
|
game->UpdateCamera(game->GetElapsedTime());
|
||||||
}
|
}
|
||||||
void State_GameRun::Draw(AiL*game){
|
void State_GameRun::Draw(AiL*game){
|
||||||
|
game->SetWorldColor(DARK_BLUE);
|
||||||
game->RenderWorld(game->GetElapsedTime());
|
game->RenderWorld(game->GetElapsedTime());
|
||||||
game->RenderHud();
|
game->RenderHud();
|
||||||
Tutorial::Draw();
|
Tutorial::Draw();
|
||||||
|
@ -76,6 +76,7 @@ struct MapTag{
|
|||||||
int width=0,height=0;
|
int width=0,height=0;
|
||||||
int tilewidth=0,tileheight=0;
|
int tilewidth=0,tileheight=0;
|
||||||
bool optimized=false; //An optimized map will require us to flatten it out and use it as a single tile.
|
bool optimized=false; //An optimized map will require us to flatten it out and use it as a single tile.
|
||||||
|
bool provideOptimization=false; //An optimized map will require us to flatten it out and use it as a single tile.
|
||||||
vi2d playerSpawnLocation;
|
vi2d playerSpawnLocation;
|
||||||
vi2d MapSize; //The number of tiles in width and height of this map.
|
vi2d MapSize; //The number of tiles in width and height of this map.
|
||||||
vi2d TileSize; //How large in pixels the map's tiles are.
|
vi2d TileSize; //How large in pixels the map's tiles are.
|
||||||
@ -150,6 +151,7 @@ public:
|
|||||||
const std::string_view GetMapDisplayName()const;
|
const std::string_view GetMapDisplayName()const;
|
||||||
const bool HasMoreSpawns()const; //Returns whether or not there are more spawns for the spawn controller.
|
const bool HasMoreSpawns()const; //Returns whether or not there are more spawns for the spawn controller.
|
||||||
const int Spawn_pop(); //Grabs the next spawn controller ID and removes it from the stack.
|
const int Spawn_pop(); //Grabs the next spawn controller ID and removes it from the stack.
|
||||||
|
const Renderable const*GetOptimizedMap()const;
|
||||||
std::string FormatLayerData(std::ostream& os, std::vector<LayerTag>tiles);
|
std::string FormatLayerData(std::ostream& os, std::vector<LayerTag>tiles);
|
||||||
std::string FormatSpawnerData(std::ostream& os, std::map<int,SpawnerTag>tiles);
|
std::string FormatSpawnerData(std::ostream& os, std::map<int,SpawnerTag>tiles);
|
||||||
friend std::ostream& operator << (std::ostream& os, Map& rhs);
|
friend std::ostream& operator << (std::ostream& os, Map& rhs);
|
||||||
@ -326,6 +328,9 @@ class TMXParser{
|
|||||||
spawnControllerIDs.value().pop();
|
spawnControllerIDs.value().pop();
|
||||||
return nextSpawnId;
|
return nextSpawnId;
|
||||||
}
|
}
|
||||||
|
const Renderable const*Map::GetOptimizedMap()const{
|
||||||
|
return optimizedTile;
|
||||||
|
}
|
||||||
NPCData::NPCData(){}
|
NPCData::NPCData(){}
|
||||||
NPCData::NPCData(XMLTag npcTag){
|
NPCData::NPCData(XMLTag npcTag){
|
||||||
const std::array<std::string,7>tags={"Function","NPC Name","Roaming Range","Unlock Condition","Spritesheet","x","y"};
|
const std::array<std::string,7>tags={"Function","NPC Name","Roaming Range","Unlock Condition","Spritesheet","x","y"};
|
||||||
@ -487,6 +492,9 @@ class TMXParser{
|
|||||||
if (newTag.tag=="property"&&newTag.data["name"]=="Optimize"&&newTag.data["value"]=="true") {
|
if (newTag.tag=="property"&&newTag.data["name"]=="Optimize"&&newTag.data["value"]=="true") {
|
||||||
parsedMapInfo.MapData.optimized=true;
|
parsedMapInfo.MapData.optimized=true;
|
||||||
}else
|
}else
|
||||||
|
if (newTag.tag=="property"&&newTag.data["name"]=="Create Optimization Map (Override)"&&newTag.data["value"]=="true") {
|
||||||
|
parsedMapInfo.MapData.provideOptimization=true;
|
||||||
|
}else
|
||||||
if (newTag.tag=="property"&&newTag.data["name"]=="Boss Title Display") {
|
if (newTag.tag=="property"&&newTag.data["name"]=="Boss Title Display") {
|
||||||
parsedMapInfo.SpawnerData[prevSpawner].bossNameDisplay=newTag.data["value"];
|
parsedMapInfo.SpawnerData[prevSpawner].bossNameDisplay=newTag.data["value"];
|
||||||
}else
|
}else
|
||||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 3
|
#define VERSION_PATCH 3
|
||||||
#define VERSION_BUILD 9554
|
#define VERSION_BUILD 9561
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -148,7 +148,7 @@ Levels
|
|||||||
}
|
}
|
||||||
BOSS_2_B
|
BOSS_2_B
|
||||||
{
|
{
|
||||||
Map File = Boss_2_B.tmx
|
Map File = Boss_2.tmx
|
||||||
# Specify item, min quantity, and max quantity of items. Optionally specify a % drop chance per item.
|
# Specify item, min quantity, and max quantity of items. Optionally specify a % drop chance per item.
|
||||||
# Loot[0] = Berries, 1, 5, 100%
|
# Loot[0] = Berries, 1, 5, 100%
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user