@ -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.