about summary refs log tree commit diff stats
path: root/data/maps/four_rooms/rooms/Intensify Room.txtpb
blob: 8c6924aca9febc093ac538875d9b87bf99add70f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
name: "Intensify Room"
panels {
  name: "SMALL"
  path: "Panels/Room 1 Intensify/entry_1"
  clue: "small"
  answer: "tiny"
  symbols: PYRAMID
}
panels {
  name: "LIKE"
  path: "Panels/Room 1 Intensify/entry_2"
  clue: "like"
  answer: "love"
  symbols: PYRAMID
}
panels {
  name: "LARGE"
  path: "Panels/Room 1 Intensify/entry_3"
  clue: "large"
  answer: "huge"
  symbols: PYRAMID
}
panels {
  name: "TERROR"
  path: "Panels/Room 1 Intensify/entry_4"
  clue: "terror"
  answer: "fear"
  symbols: PYRAMID
}
panels {
  name: "BETTER"
  path: "Panels/Room 1 Intensify/entry_5"
  clue: "better"
  answer: "best"
  symbols: PYRAMID
}
panels {
  name: "TURN"
  path: "Panels/Room 1 Intensify/entry_6"
  clue: "turn"
  answer: "spin"
  symbols: PYRAMID
}
panels {
  name: "INJURY"
  path: "Panels/Room 1 Intensify/entry_7"
  clue: "injury"
  answer: "death"
  symbols: PYRAMID
}
panels {
  name: "SWAY"
  path: "Panels/Room 1 Intensify/entry_8"
  clue: "sway"
  answer: "dance"
  symbols: PYRAMID
}
ports {
  name: "IMPRESSIVE"
  display_name: "Intensify Room Worldport"
  path: "Components/Warps/worldport"
  destination { x: 0 y: 0 z: 6.5 }
  rotation: 0
}
a> ^
53a2ec2 ^
53a2ec2 ^
4adfe42 ^

9bf6a50 ^
53a2ec2 ^

0a3c0c6 ^













fd2f756 ^
0a3c0c6 ^



















4adfe42 ^

cf3fc6c ^

0a3c0c6 ^




8e89e19 ^
70f1c62 ^
0a3c0c6 ^
09d67fb ^
0a3c0c6 ^





09d67fb ^
0a3c0c6 ^





53a2ec2 ^
0a3c0c6 ^
09d67fb ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

                       
                     
                      
                   
                           
                          

                                                   







                                                                               
 
                      
 
                                
         



                                               
 

                                    
                                                    












                                                             

                                                                  
                                                                 
 

                                                                  
               

     













                                                                       
        



















                                                                     

                                                             

                                                                             




                                                                  
                                                                  
                                                             
                                          
 





                                                                                
   





                                              
 
               
 
#include "area_popup.h"

#include "ap_state.h"
#include "game_data.h"
#include "global.h"
#include "tracker_config.h"
#include "tracker_state.h"

AreaPopup::AreaPopup(wxWindow* parent, int area_id)
    : wxScrolledCanvas(parent, wxID_ANY), area_id_(area_id) {
  unchecked_eye_ =
      wxBitmap(wxImage(GetAbsolutePath("assets/unchecked.png").c_str(),
                       wxBITMAP_TYPE_PNG)
                   .Scale(32, 32));
  checked_eye_ = wxBitmap(
      wxImage(GetAbsolutePath("assets/checked.png").c_str(), wxBITMAP_TYPE_PNG)
          .Scale(32, 32));

  SetScrollRate(5, 5);

  SetBackgroundColour(*wxBLACK);
  Hide();

  Bind(wxEVT_PAINT, &AreaPopup::OnPaint, this);

  UpdateIndicators();
}

void AreaPopup::UpdateIndicators() {
  const MapArea& map_area = GD_GetMapArea(area_id_);

  // Start calculating extents.
  wxMemoryDC mem_dc;
  mem_dc.SetFont(GetFont().Bold());
  wxSize header_extent = mem_dc.GetTextExtent(map_area.name);

  int acc_height = header_extent.GetHeight() + 20;
  int col_width = 0;

  mem_dc.SetFont(GetFont());

  std::vector<int> real_locations;

  for (int section_id = 0; section_id < map_area.locations.size();
       section_id++) {
    const Location& location = map_area.locations.at(section_id);

    if (!AP_IsLocationVisible(location.classification) &&
        !(location.hunt && GetTrackerConfig().show_hunt_panels)) {
      continue;
    }

    real_locations.push_back(section_id);

    wxSize item_extent = mem_dc.GetTextExtent(location.name);
    int item_height = std::max(32, item_extent.GetHeight()) + 10;
    acc_height += item_height;

    if (item_extent.GetWidth() > col_width) {
      col_width = item_extent.GetWidth();
    }
  }

  int item_width = col_width + 10 + 32;
  int full_width = std::max(header_extent.GetWidth(), item_width) + 20;

  Fit();
  SetVirtualSize(full_width, acc_height);

  rendered_ = wxBitmap(full_width, acc_height);
  mem_dc.SelectObject(rendered_);
  mem_dc.SetPen(*wxTRANSPARENT_PEN);
  mem_dc.SetBrush(*wxBLACK_BRUSH);
  mem_dc.DrawRectangle({0, 0}, {full_width, acc_height});

  mem_dc.SetFont(GetFont().Bold());
  mem_dc.SetTextForeground(*wxWHITE);
  mem_dc.DrawText(map_area.name,
                  {(full_width - header_extent.GetWidth()) / 2, 10});

  int cur_height = header_extent.GetHeight() + 20;

  mem_dc.SetFont(GetFont());

  for (int section_id : real_locations) {
    const Location& location = map_area.locations.at(section_id);

    bool checked =
        AP_HasCheckedGameLocation(location.ap_location_id) ||
        (location.hunt && AP_HasCheckedHuntPanel(location.ap_location_id)) ||
        (IsLocationWinCondition(location) && AP_HasReachedGoal());

    wxBitmap* eye_ptr = checked ? &checked_eye_ : &unchecked_eye_;

    mem_dc.DrawBitmap(*eye_ptr, {10, cur_height});

    bool reachable = IsLocationReachable(location.ap_location_id);
    const wxColour* text_color = reachable ? wxWHITE : wxRED;
    mem_dc.SetTextForeground(*text_color);

    wxSize item_extent = mem_dc.GetTextExtent(location.name);
    mem_dc.DrawText(
        location.name,
        {10 + 32 + 10, cur_height + (32 - mem_dc.GetFontMetrics().height) / 2});

    cur_height += 10 + 32;
  }
}

void AreaPopup::OnPaint(wxPaintEvent& event) {
  wxPaintDC dc(this);
  PrepareDC(dc);
  dc.DrawBitmap(rendered_, 0, 0);

  event.Skip();
}