@@ -372,11 +372,18 @@ Pen Screen::readTile(int x, int y, bool map, int32_t * df::graphic_viewportst::*
372372 return doGetTile (x, y, map, texpos_field);
373373}
374374
375- static bool doSetTile_map_port (const Pen &pen, int x, int y, int32_t * df::graphic_map_portst::*texpos_field) {
376- auto &vp = gps->main_map_port ;
375+ bool Screen::paintMapPortTile (const Pen &pen, int x, int y, int32_t * df::graphic_map_portst::*texpos_field)
376+ {
377+ if (!gps || !pen.valid ()) return false ;
378+
379+ bool use_graphics = Screen::inGraphicsMode ();
380+ if (!use_graphics)
381+ return doSetTile_char (pen, x, y, use_graphics);
382+
377383 if (!texpos_field)
378384 texpos_field = &df::graphic_map_portst::screentexpos_interface;
379385
386+ auto &vp = gps->main_map_port ;
380387 if (x < 0 || x >= vp->dim_x || y < 0 || y >= vp->dim_y )
381388 return false ;
382389
@@ -393,96 +400,36 @@ static bool doSetTile_map_port(const Pen &pen, int x, int y, int32_t * df::graph
393400 return true ;
394401}
395402
396- static bool doSetTile_map_port_default (const Pen &pen, int x, int y, int32_t * df::graphic_map_portst::*texpos_field) {
397- bool use_graphics = Screen::inGraphicsMode ();
398-
399- if (use_graphics)
400- return doSetTile_map_port (pen, x, y, texpos_field);
403+ Pen Screen::readMapPortTile (int x, int y, int32_t * df::graphic_map_portst::*texpos_field)
404+ {
405+ CHECK_NULL_POINTER (texpos_field)
401406
402- return doSetTile_char (pen, x, y, use_graphics);
403- }
407+ if (!gps) return Pen (0 ,0 ,0 ,-1 );
404408
405- bool Screen::paintTileMapPort (const Pen &pen, int x, int y, int32_t * df::graphic_map_portst::*texpos_field)
406- {
407- if (!gps || !pen.valid ()) return false ;
409+ bool use_graphics = Screen::inGraphicsMode ();
408410
409- doSetTile_map_port_default (pen, x, y, texpos_field);
410- return true ;
411- }
411+ if (!use_graphics)
412+ return doGetTile_char (x, y, use_graphics);
412413
413- static Pen doGetTile_map_port (int x, int y, int32_t * df::graphic_map_portst::*texpos_field) {
414414 auto &vp = gps->main_map_port ;
415415
416416 if (x < 0 || x >= vp->dim_x || y < 0 || y >= vp->dim_y )
417417 return Pen (0 , 0 , 0 , -1 );
418418
419419 size_t max_index = vp->dim_x * vp->dim_y - 1 ;
420- size_t index = (x * vp->dim_y ) + y ;
420+ size_t index = (y * vp->dim_x ) + x ;
421421
422422 if (index < 0 || index > max_index)
423423 return Pen (0 , 0 , 0 , -1 );
424424
425- int tile = 0 ;
426- if (!texpos_field) {
427- if (tile == 0 )
428- tile = vp->screentexpos_base [index];
429- if (tile == 0 )
430- tile = vp->screentexpos_detail [index];
431- if (tile == 0 )
432- tile = vp->screentexpos_tunnel [index];
433- if (tile == 0 )
434- tile = vp->screentexpos_river [index];
435- if (tile == 0 )
436- tile = vp->screentexpos_road [index];
437- if (tile == 0 )
438- tile = vp->screentexpos_site [index];
439- if (tile == 0 )
440- tile = vp->screentexpos_army [index];
441- if (tile == 0 )
442- tile = vp->screentexpos_interface [index];
443- if (tile == 0 )
444- tile = vp->screentexpos_detail_to_n [index];
445- if (tile == 0 )
446- tile = vp->screentexpos_detail_to_s [index];
447- if (tile == 0 )
448- tile = vp->screentexpos_detail_to_w [index];
449- if (tile == 0 )
450- tile = vp->screentexpos_detail_to_e [index];
451- if (tile == 0 )
452- tile = vp->screentexpos_detail_to_nw [index];
453- if (tile == 0 )
454- tile = vp->screentexpos_detail_to_ne [index];
455- if (tile == 0 )
456- tile = vp->screentexpos_detail_to_sw [index];
457- if (tile == 0 )
458- tile = vp->screentexpos_detail_to_se [index];
459- if (tile == 0 )
460- tile = vp->screentexpos_site_to_s [index];
461- } else {
462- tile = (vp->*texpos_field)[index];
463- }
425+ auto tile = (vp->*texpos_field)[index];
464426
465427 char ch = 0 ;
466428 uint8_t fg = 0 ;
467429 uint8_t bg = 0 ;
468430 return Pen (ch, fg, bg, tile, false );
469431}
470432
471- static Pen doGetTile_map_port_default (int x, int y, int32_t * df::graphic_map_portst::*texpos_field = NULL ) {
472- bool use_graphics = Screen::inGraphicsMode ();
473-
474- if (use_graphics)
475- return doGetTile_map_port (x, y, texpos_field);
476- return doGetTile_char (x, y, use_graphics);
477- }
478-
479- Pen Screen::readTileMapPort (int x, int y, int32_t * df::graphic_map_portst::*texpos_field)
480- {
481- if (!gps) return Pen (0 ,0 ,0 ,-1 );
482-
483- return doGetTile_map_port_default (x, y, texpos_field);
484- }
485-
486433bool Screen::paintString (const Pen &pen, int x, int y, const std::string &text, bool map)
487434{
488435 auto dim = getWindowSize ();
0 commit comments