Skip to content

Commit

Permalink
Begin fixing Overlay Mode
Browse files Browse the repository at this point in the history
  • Loading branch information
realSquidCoder committed Jan 24, 2025
1 parent abe2e0b commit 17c867b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 30 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins/stonesense/configs/

SET(PROJECT_SRCS
TrackingModes.cpp
#Overlay.cpp
Overlay.cpp
Tile.cpp
TileCondition.cpp
TileTree.cpp
Expand Down Expand Up @@ -64,7 +64,7 @@ SET(PROJECT_HDRS
MapLoading.h
MaterialMatcher.h
OcclusionTest.h
#Overlay.h
Overlay.h
SegmentProcessing.h
SpriteColors.h
SpriteMaps.h
Expand Down
32 changes: 17 additions & 15 deletions Overlay.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include "GameState.h"
#include "StonesenseState.h"
#include "Overlay.h"
#include "TrackingModes.h"
#include "Hooks.h"
Expand Down Expand Up @@ -180,14 +182,14 @@ void Overlay::Flip()
{
al_unlock_bitmap(front);

if(al_get_bitmap_width(front) != ssState.ScreenW
|| al_get_bitmap_height(front) != ssState.ScreenH){
if(al_get_bitmap_width(front) != stonesenseState.ssState.ScreenW
|| al_get_bitmap_height(front) != stonesenseState.ssState.ScreenH){
al_destroy_bitmap(front);
int32_t flags = al_get_new_bitmap_flags();
if(al_get_current_display() != NULL){
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP | ALLEGRO_ALPHA_TEST);
}
front = al_create_bitmap(ssState.ScreenW, ssState.ScreenH);
front = al_create_bitmap(stonesenseState.ssState.ScreenW, stonesenseState.ssState.ScreenH);
al_set_new_bitmap_flags(flags);
}

Expand All @@ -201,22 +203,22 @@ void Overlay::Flip()
front_updated = true;
al_unlock_mutex(front_mutex);

if(al_get_bitmap_width(back) != ssState.ScreenW
|| al_get_bitmap_height(back) != ssState.ScreenH){
if(al_get_bitmap_width(back) != stonesenseState.ssState.ScreenW
|| al_get_bitmap_height(back) != stonesenseState.ssState.ScreenH){
al_destroy_bitmap(back);
int32_t flags = al_get_new_bitmap_flags();
if(al_get_current_display() != NULL){
al_set_new_bitmap_flags(al_get_bitmap_flags(al_get_backbuffer(al_get_current_display())));
}
back = al_create_bitmap(ssState.ScreenW, ssState.ScreenH);
back = al_create_bitmap(stonesenseState.ssState.ScreenW, stonesenseState.ssState.ScreenH);
al_set_new_bitmap_flags(flags);
}

al_set_target_bitmap(back);

//do the ending timer stuff
clock_t donetime = clock();
ssTimers.overlay_time = (donetime - starttime)*0.1 + ssTimers.overlay_time*0.9;
stonesenseState.stoneSenseTimers.overlay_time.update(donetime - starttime);
}

bool Overlay::GoodViewscreen()
Expand Down Expand Up @@ -258,26 +260,26 @@ void Overlay::render()
}

//get the SDL surface information so we can do a blit
DFHack::DFSDL_Surface * dfsurf = (DFHack::DFSDL_Surface *) DFHack::DFSDL::DFSDL_GetVideoSurface();
DFHack::DFSDL_Surface * sssurf = (DFHack::DFSDL_Surface *) DFHack::DFSDL::DFSDL_CreateRGBSurfaceFrom( ((char*) front_data->data) + dataoffset,
DFHack::DFTileSurface * dfsurf = (DFHack::DFTileSurface*) DFHack::DFSDL::DFSDL_GetVideoSurface();
DFHack::DFTileSurface * sssurf = (DFHack::DFTileSurface*) DFHack::DFSDL::DFSDL_CreateRGBSurfaceFrom( ((char*) front_data->data) + dataoffset,
al_get_bitmap_width(front), al_get_bitmap_height(front), 8*front_data->pixel_size, neg*front_data->pitch, 0, 0, 0, 0);

DFSDL_Rect src;
SDL_Rect src;
src.x = 0;
src.y = 0;
src.w = ssState.ScreenW;
src.h = ssState.ScreenH;
src.w = stonesenseState.ssState.ScreenW;
src.h = stonesenseState.ssState.ScreenH;

DFSDL_Rect pos;
SDL_Rect pos;
pos.x = offsetx;
pos.y = offsety;
pos.w = 0;
pos.h = 0;

//do the blit
DFHack::DFSDL::DFSDL_UpperBlit(sssurf, &src, dfsurf, &pos);
DFHack::DFSDL::DFSDL_UpperBlit(sssurf->surface, &src, dfsurf->surface, &pos);

DFHack::DFSDL::DFSDL_FreeSurface(sssurf);
DFHack::DFSDL::DFSDL_FreeSurface(sssurf->surface);
}
front_updated = false;
} else {
Expand Down
26 changes: 13 additions & 13 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "commonTypes.h"

#include "Config.h"
//#include "Overlay.h"
#include "Overlay.h"
#include "Tile.h"
#include "GUI.h"
//#include "SpriteMaps.h"
Expand Down Expand Up @@ -226,7 +226,7 @@ static void main_loop(ALLEGRO_DISPLAY * display, ALLEGRO_EVENT_QUEUE *queue, ALL
al_rest(0);

/*FIXME: Find a new replacement for the overlay mode.
if (ssConfig.overlay_mode)
if (stonesenseState.ssConfig.overlay_mode)
{
bool goodoverlay = ovrlay->GoodViewscreen();
if (!goodoverlay) {
Expand Down Expand Up @@ -280,7 +280,7 @@ static void main_loop(ALLEGRO_DISPLAY * display, ALLEGRO_EVENT_QUEUE *queue, ALL
}
}

if (!ssConfig.overlay_mode) {
if (!stonesenseState.ssConfig.overlay_mode) {
doMouse();
doRepeatActions();
}
Expand All @@ -302,7 +302,7 @@ static void main_loop(ALLEGRO_DISPLAY * display, ALLEGRO_EVENT_QUEUE *queue, ALL
if(in_time) {
switch (event.type) {
case ALLEGRO_EVENT_DISPLAY_RESIZE:
if (ssConfig.overlay_mode) {
if (stonesenseState.ssConfig.overlay_mode) {
break;
}
stonesenseState.timeToReloadSegment = true;
Expand All @@ -317,7 +317,7 @@ static void main_loop(ALLEGRO_DISPLAY * display, ALLEGRO_EVENT_QUEUE *queue, ALL
/* ALLEGRO_EVENT_KEY_DOWN - a keyboard key was pressed.
*/
case ALLEGRO_EVENT_KEY_CHAR:
if (ssConfig.overlay_mode) {
if (stonesenseState.ssConfig.overlay_mode) {
break;
}
if(event.keyboard.display != display) {
Expand Down Expand Up @@ -390,9 +390,9 @@ static void* stonesense_thread(ALLEGRO_THREAD* main_thread, void* parms)

auto& ssConfig = stonesenseState.ssConfig;
al_set_new_display_flags(
(ssConfig.config.Fullscreen && !ssConfig.overlay_mode ? ALLEGRO_FULLSCREEN : ALLEGRO_WINDOWED)
|(ssConfig.overlay_mode ? 0 : ALLEGRO_RESIZABLE)
|(ssConfig.overlay_mode ? ALLEGRO_MINIMIZED : 0)
(ssConfig.config.Fullscreen && !stonesenseState.ssConfig.overlay_mode ? ALLEGRO_FULLSCREEN : ALLEGRO_WINDOWED)
|(stonesenseState.ssConfig.overlay_mode ? 0 : ALLEGRO_RESIZABLE)
|(stonesenseState.ssConfig.overlay_mode ? ALLEGRO_MINIMIZED : 0)
|(ssConfig.config.opengl ? ALLEGRO_OPENGL : 0)
|(ssConfig.config.directX ? ALLEGRO_DIRECT3D_INTERNAL : 0));

Expand Down Expand Up @@ -421,12 +421,12 @@ static void* stonesense_thread(ALLEGRO_THREAD* main_thread, void* parms)
SetTitle("Stonesense");
drawcredits();

/*FIXME: Find a new replacement for the overlay mode.
if(ssConfig.overlay_mode){
overlay = std::make_unique<Overlay>(df::global::enabler->renderer);
//FIXME: Find a new replacement for the overlay mode.
if(stonesenseState.ssConfig.overlay_mode){
auto overlay = std::make_unique<Overlay>(df::global::enabler->renderer);
df::global::enabler->renderer = overlay.get();
}
*/


std::filesystem::path p = std::filesystem::path{} / "stonesense" / "stonesense.png";
IMGIcon = load_bitmap_withWarning(p);
Expand Down Expand Up @@ -564,7 +564,7 @@ DFhackCExport command_result stonesense_command(color_ostream &out, std::vector<
stonesenseState.ssConfig.overlay_mode = false;
if(params.size() > 0 ) {
if(params[0] == "overlay"){
//ssConfig.overlay_mode = true;
stonesenseState.ssConfig.overlay_mode = true;
} else {
DumpInfo(out, params);
return CR_OK;
Expand Down

0 comments on commit 17c867b

Please sign in to comment.