mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-19 09:34:18 +02:00
Size Map editor screen ported to imgui.
This commit is contained in:
+240
-434
@@ -712,6 +712,44 @@ int MapEditClass::Pick_Scenario(char const * caption, int & scen_nump, ScenarioP
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int map_x1; // map coords x1, pixel coords
|
||||||
|
static int map_x2; // map coords x2, pixel coords
|
||||||
|
static int map_y1; // map coords y1, pixel coords
|
||||||
|
static int map_y2; // map coords y2, pixel coords
|
||||||
|
bool sizemap_cancel = false; // true = user cancels
|
||||||
|
bool sizemap_process = true;
|
||||||
|
void Imgui_SizeMap(void) {
|
||||||
|
extern int mousex, mousey;
|
||||||
|
bool toolActive = false;
|
||||||
|
|
||||||
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
|
style.FramePadding = ImVec2(0, 0);
|
||||||
|
ImGui::SetNextWindowSize(ImVec2(500, 100));
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(0, 0));
|
||||||
|
ImGui::Begin("Size Map", &toolActive, ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
|
ImGui::Columns(4, "outer", true);
|
||||||
|
ImGui::Text("X");
|
||||||
|
ImGui::InputInt("", &map_x1);
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::Text("Y");
|
||||||
|
ImGui::InputInt("", &map_y1);
|
||||||
|
if (ImGui::Button("Ok")) {
|
||||||
|
sizemap_cancel = false;
|
||||||
|
sizemap_process = false;
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::Text("X2");
|
||||||
|
ImGui::InputInt("", &map_x2);
|
||||||
|
if (ImGui::Button("Cancel")) {
|
||||||
|
sizemap_cancel = true;
|
||||||
|
sizemap_process = false;
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::Text("Y2");
|
||||||
|
ImGui::InputInt("", &map_y2);
|
||||||
|
ImGui::Columns(1);
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* MapEditClass::Size_Map -- lets user set size & location of map *
|
* MapEditClass::Size_Map -- lets user set size & location of map *
|
||||||
@@ -759,6 +797,10 @@ int MapEditClass::Pick_Scenario(char const * caption, int & scen_nump, ScenarioP
|
|||||||
*=========================================================================*/
|
*=========================================================================*/
|
||||||
int MapEditClass::Size_Map(int x, int y, int w, int h)
|
int MapEditClass::Size_Map(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
|
Imgui_Dialog_Function = Imgui_SizeMap;
|
||||||
|
sizemap_cancel = false; // true = user cancels
|
||||||
|
sizemap_process = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Dialog & button dimensions
|
** Dialog & button dimensions
|
||||||
*/
|
*/
|
||||||
@@ -811,13 +853,8 @@ int MapEditClass::Size_Map(int x, int y, int w, int h)
|
|||||||
** Dialog variables:
|
** Dialog variables:
|
||||||
*/
|
*/
|
||||||
RedrawType display; // requested redraw level
|
RedrawType display; // requested redraw level
|
||||||
bool cancel = false; // true = user cancels
|
|
||||||
KeyNumType input; // user input
|
KeyNumType input; // user input
|
||||||
int grabbed = 0; // 1=TLeft,2=TRight,3=BRight,4=BLeft
|
int grabbed = 0; // 1=TLeft,2=TRight,3=BRight,4=BLeft
|
||||||
int map_x1; // map coords x1, pixel coords
|
|
||||||
int map_x2; // map coords x2, pixel coords
|
|
||||||
int map_y1; // map coords y1, pixel coords
|
|
||||||
int map_y2; // map coords y2, pixel coords
|
|
||||||
int delta1, delta2; // mouse-click proximity
|
int delta1, delta2; // mouse-click proximity
|
||||||
int mx,my; // last-saved mouse coords
|
int mx,my; // last-saved mouse coords
|
||||||
// char txt[40];
|
// char txt[40];
|
||||||
@@ -870,8 +907,8 @@ int MapEditClass::Size_Map(int x, int y, int w, int h)
|
|||||||
** Main processing loop
|
** Main processing loop
|
||||||
*/
|
*/
|
||||||
display = REDRAW_ALL;
|
display = REDRAW_ALL;
|
||||||
bool process = true;
|
|
||||||
while (process) {
|
while (sizemap_process) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Invoke game callback
|
** Invoke game callback
|
||||||
@@ -881,441 +918,210 @@ int MapEditClass::Size_Map(int x, int y, int w, int h)
|
|||||||
/*
|
/*
|
||||||
** Refresh display if needed
|
** Refresh display if needed
|
||||||
*/
|
*/
|
||||||
if (display) {
|
// if (display) {
|
||||||
Hide_Mouse();
|
// Hide_Mouse();
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
** Redraw the background, map border, key, and coord labels
|
// ** Redraw the background, map border, key, and coord labels
|
||||||
*/
|
// */
|
||||||
if (display >= REDRAW_BACKGROUND) {
|
// if (display >= REDRAW_BACKGROUND) {
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
** Background
|
// ** Background
|
||||||
*/
|
// */
|
||||||
Dialog_Box(D_DIALOG_X, D_DIALOG_Y, D_DIALOG_W, D_DIALOG_H);
|
// Dialog_Box(D_DIALOG_X, D_DIALOG_Y, D_DIALOG_W, D_DIALOG_H);
|
||||||
Draw_Caption(TXT_SIZE_MAP, D_DIALOG_X, D_DIALOG_Y, D_DIALOG_W);
|
// Draw_Caption(TXT_SIZE_MAP, D_DIALOG_X, D_DIALOG_Y, D_DIALOG_W);
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
** Draw the map border
|
// ** Draw the map border
|
||||||
*/
|
// */
|
||||||
if (LogicPage->Lock()) {
|
// if (LogicPage->Lock()) {
|
||||||
LogicPage->Draw_Rect(D_BORD_X1, D_BORD_Y1, D_BORD_X2, D_BORD_Y2, scheme->Shadow);
|
// LogicPage->Draw_Rect(D_BORD_X1, D_BORD_Y1, D_BORD_X2, D_BORD_Y2, scheme->Shadow);
|
||||||
// for (index = D_BORD_X1; index < D_BORD_X2;
|
//// for (index = D_BORD_X1; index < D_BORD_X2;
|
||||||
// index += (320/ICON_PIXEL_W)) {
|
//// index += (320/ICON_PIXEL_W)) {
|
||||||
// LogicPage->Put_Pixel(index, D_BORD_Y1-1, scheme->Shadow);
|
//// LogicPage->Put_Pixel(index, D_BORD_Y1-1, scheme->Shadow);
|
||||||
// LogicPage->Put_Pixel(index, D_BORD_Y2+1, scheme->Shadow);
|
//// LogicPage->Put_Pixel(index, D_BORD_Y2+1, scheme->Shadow);
|
||||||
|
//// }
|
||||||
|
//// for (index = D_BORD_Y1; index < D_BORD_Y2-8;
|
||||||
|
//// index += (200/ICON_PIXEL_H)) {
|
||||||
|
//// LogicPage->Put_Pixel(D_BORD_X1-1, index, scheme->Shadow);
|
||||||
|
//// LogicPage->Put_Pixel(D_BORD_X2+1, index, scheme->Shadow);
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw the map "key"
|
||||||
|
// */
|
||||||
|
// txt_x = D_BORD_X2 + 15;
|
||||||
|
// txt_y = D_BORD_Y1;
|
||||||
|
// Plain_Text_Print("Clear Terrain", txt_x, txt_y, GroundColor[LAND_CLEAR], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Water", txt_x, txt_y, GroundColor[LAND_WATER], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Tiberium", txt_x, txt_y, GroundColor[LAND_TIBERIUM], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Rock", txt_x, txt_y, GroundColor[LAND_ROCK], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Wall", txt_x, txt_y, GroundColor[LAND_WALL], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Beach", txt_x, txt_y, GroundColor[LAND_BEACH], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Rough", txt_x, txt_y, GroundColor[LAND_ROUGH], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("River", txt_x, txt_y, GroundColor[LAND_RIVER], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
//// txt_y += 8;
|
||||||
|
//// Plain_Text_Print("GDI Unit", txt_x, txt_y, YELLOW, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
//// txt_y += 8;
|
||||||
|
//// Plain_Text_Print("Nod Unit", txt_x, txt_y, RED, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
//// txt_y += 8;
|
||||||
|
//// Plain_Text_Print("Neutral Unit", txt_x, txt_y, PURPLE, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Terrain Object", txt_x, txt_y, DKGREEN, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
// txt_y += 8;
|
||||||
|
// Plain_Text_Print("Starting Cell", txt_x, txt_y, WHITE, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw the coordinate labels
|
||||||
|
// */
|
||||||
|
// txt_x = D_DIALOG_X + D_DIALOG_W / 8;
|
||||||
|
// txt_y = D_DIALOG_Y + D_DIALOG_H - D_OK_H - 43;
|
||||||
|
// Fancy_Text_Print(" X", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print(" Y", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print(" Width", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print(" Height", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
||||||
|
//
|
||||||
|
// LogicPage->Unlock();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Redraw the buttons
|
||||||
|
// */
|
||||||
|
// commands->Flag_List_To_Redraw();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Redraw the map symbology & location
|
||||||
|
// */
|
||||||
|
// if (display >= REDRAW_MAP) {
|
||||||
|
//
|
||||||
|
// if (LogicPage->Lock()) {
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Erase the map interior
|
||||||
|
// */
|
||||||
|
// LogicPage->Fill_Rect(D_BORD_X1 + 1, D_BORD_Y1 + 1, D_BORD_X2 - 1, D_BORD_Y2 - 1, BLACK);
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw Land map symbols (use color according to Ground[] array).
|
||||||
|
// */
|
||||||
|
// for (cell=0; cell < MAP_CELL_TOTAL; cell++) {
|
||||||
|
// occupier = (*this)[cell].Cell_Occupier();
|
||||||
|
// if (occupier == NULL) {
|
||||||
|
// color = GroundColor[(*this)[cell].Land_Type()];
|
||||||
|
// LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(cell) + 1, D_BORD_Y1 + Cell_Y(cell) + 1, color);
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// for (index = D_BORD_Y1; index < D_BORD_Y2-8;
|
//
|
||||||
// index += (200/ICON_PIXEL_H)) {
|
// /*
|
||||||
// LogicPage->Put_Pixel(D_BORD_X1-1, index, scheme->Shadow);
|
// ** Draw the actual map location
|
||||||
// LogicPage->Put_Pixel(D_BORD_X2+1, index, scheme->Shadow);
|
// */
|
||||||
|
// LogicPage->Draw_Rect(map_x1, map_y1, map_x2, map_y2, WHITE);
|
||||||
|
// switch (grabbed) {
|
||||||
|
// case 1:
|
||||||
|
// LogicPage->Draw_Line(map_x1, map_y1, map_x1 + 5, map_y1, BLUE);
|
||||||
|
// LogicPage->Draw_Line(map_x1, map_y1, map_x1, map_y1 + 5, BLUE);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case 2:
|
||||||
|
// LogicPage->Draw_Line(map_x2, map_y1, map_x2 - 5, map_y1, BLUE);
|
||||||
|
// LogicPage->Draw_Line(map_x2, map_y1, map_x2, map_y1 + 5, BLUE);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case 3:
|
||||||
|
// LogicPage->Draw_Line(map_x2, map_y2, map_x2 - 5, map_y2, BLUE);
|
||||||
|
// LogicPage->Draw_Line(map_x2, map_y2, map_x2, map_y2 - 5, BLUE);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case 4:
|
||||||
|
// LogicPage->Draw_Line(map_x1, map_y2, map_x1 + 5, map_y2, BLUE);
|
||||||
|
// LogicPage->Draw_Line(map_x1, map_y2, map_x1, map_y2 - 5, BLUE);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case 5:
|
||||||
|
// LogicPage->Draw_Rect(map_x1, map_y1, map_x2, map_y2, BLUE);
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
// }
|
// }
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw Unit map symbols (Use the radar map color according to
|
||||||
|
// ** that specified in the house type class object.
|
||||||
|
// ** DKGREEN = terrain object
|
||||||
|
// */
|
||||||
|
// for (cell=0; cell < MAP_CELL_TOTAL; cell++) {
|
||||||
|
// occupier = (*this)[cell].Cell_Occupier();
|
||||||
|
// if (occupier) {
|
||||||
|
// color = DKGREEN;
|
||||||
|
// if (occupier && occupier->Owner() != HOUSE_NONE) {
|
||||||
|
// color = ColorRemaps[HouseClass::As_Pointer(occupier->Owner())->RemapColor].Color;
|
||||||
|
// }
|
||||||
|
// LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(cell) + 1, D_BORD_Y1 + Cell_Y(cell) + 1, color);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw Home location
|
||||||
|
// */
|
||||||
|
// LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(Scen.Waypoint[WAYPT_HOME]) + 1, D_BORD_Y1 + Cell_Y(Scen.Waypoint[WAYPT_HOME]) + 1, WHITE);
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Erase old coordinates
|
||||||
|
// */
|
||||||
|
//// LogicPage->Fill_Rect( D_DIALOG_X + 7,
|
||||||
|
//// D_DIALOG_Y + D_DIALOG_H - D_OK_H - 22,
|
||||||
|
//// D_DIALOG_X + D_DIALOG_W - 7,
|
||||||
|
//// D_DIALOG_Y + D_DIALOG_H - D_OK_H - 22 + 10, BLACK);
|
||||||
|
//
|
||||||
|
// /*
|
||||||
|
// ** Draw the coordinates
|
||||||
|
// */
|
||||||
|
// txt_x = D_DIALOG_X + D_DIALOG_W / 8;
|
||||||
|
// txt_y = D_DIALOG_Y + D_DIALOG_H - D_OK_H - 32;
|
||||||
|
// Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_x1 - D_BORD_X1 - 1);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_y1 - D_BORD_Y1 - 1);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_x2 - map_x1 + 1);
|
||||||
|
//
|
||||||
|
// txt_x += (D_DIALOG_W - 20) / 4;
|
||||||
|
// Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_y2 - map_y1 + 1);
|
||||||
|
//
|
||||||
|
// LogicPage->Unlock();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Show_Mouse();
|
||||||
|
KeyNumType _key;
|
||||||
|
int _types;
|
||||||
|
WWSDL_ProcessEvents(_key, _types);
|
||||||
|
|
||||||
/*
|
// display = REDRAW_NONE;
|
||||||
** Draw the map "key"
|
|
||||||
*/
|
|
||||||
txt_x = D_BORD_X2 + 15;
|
|
||||||
txt_y = D_BORD_Y1;
|
|
||||||
Plain_Text_Print("Clear Terrain", txt_x, txt_y, GroundColor[LAND_CLEAR], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Water", txt_x, txt_y, GroundColor[LAND_WATER], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Tiberium", txt_x, txt_y, GroundColor[LAND_TIBERIUM], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Rock", txt_x, txt_y, GroundColor[LAND_ROCK], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Wall", txt_x, txt_y, GroundColor[LAND_WALL], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Beach", txt_x, txt_y, GroundColor[LAND_BEACH], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Rough", txt_x, txt_y, GroundColor[LAND_ROUGH], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("River", txt_x, txt_y, GroundColor[LAND_RIVER], TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
// txt_y += 8;
|
|
||||||
// Plain_Text_Print("GDI Unit", txt_x, txt_y, YELLOW, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
// txt_y += 8;
|
|
||||||
// Plain_Text_Print("Nod Unit", txt_x, txt_y, RED, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
// txt_y += 8;
|
|
||||||
// Plain_Text_Print("Neutral Unit", txt_x, txt_y, PURPLE, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Terrain Object", txt_x, txt_y, DKGREEN, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
txt_y += 8;
|
|
||||||
Plain_Text_Print("Starting Cell", txt_x, txt_y, WHITE, TBLACK, TPF_DROPSHADOW | TPF_EFNT);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw the coordinate labels
|
|
||||||
*/
|
|
||||||
txt_x = D_DIALOG_X + D_DIALOG_W / 8;
|
|
||||||
txt_y = D_DIALOG_Y + D_DIALOG_H - D_OK_H - 43;
|
|
||||||
Fancy_Text_Print(" X", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print(" Y", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print(" Width", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print(" Height", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), TBLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW);
|
|
||||||
|
|
||||||
LogicPage->Unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Redraw the buttons
|
|
||||||
*/
|
|
||||||
commands->Flag_List_To_Redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Redraw the map symbology & location
|
|
||||||
*/
|
|
||||||
if (display >= REDRAW_MAP) {
|
|
||||||
|
|
||||||
if (LogicPage->Lock()) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Erase the map interior
|
|
||||||
*/
|
|
||||||
LogicPage->Fill_Rect(D_BORD_X1 + 1, D_BORD_Y1 + 1, D_BORD_X2 - 1, D_BORD_Y2 - 1, BLACK);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw Land map symbols (use color according to Ground[] array).
|
|
||||||
*/
|
|
||||||
for (cell=0; cell < MAP_CELL_TOTAL; cell++) {
|
|
||||||
occupier = (*this)[cell].Cell_Occupier();
|
|
||||||
if (occupier == NULL) {
|
|
||||||
color = GroundColor[(*this)[cell].Land_Type()];
|
|
||||||
LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(cell) + 1, D_BORD_Y1 + Cell_Y(cell) + 1, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw the actual map location
|
|
||||||
*/
|
|
||||||
LogicPage->Draw_Rect(map_x1, map_y1, map_x2, map_y2, WHITE);
|
|
||||||
switch (grabbed) {
|
|
||||||
case 1:
|
|
||||||
LogicPage->Draw_Line(map_x1, map_y1, map_x1 + 5, map_y1, BLUE);
|
|
||||||
LogicPage->Draw_Line(map_x1, map_y1, map_x1, map_y1 + 5, BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
LogicPage->Draw_Line(map_x2, map_y1, map_x2 - 5, map_y1, BLUE);
|
|
||||||
LogicPage->Draw_Line(map_x2, map_y1, map_x2, map_y1 + 5, BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
LogicPage->Draw_Line(map_x2, map_y2, map_x2 - 5, map_y2, BLUE);
|
|
||||||
LogicPage->Draw_Line(map_x2, map_y2, map_x2, map_y2 - 5, BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
LogicPage->Draw_Line(map_x1, map_y2, map_x1 + 5, map_y2, BLUE);
|
|
||||||
LogicPage->Draw_Line(map_x1, map_y2, map_x1, map_y2 - 5, BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
LogicPage->Draw_Rect(map_x1, map_y1, map_x2, map_y2, BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw Unit map symbols (Use the radar map color according to
|
|
||||||
** that specified in the house type class object.
|
|
||||||
** DKGREEN = terrain object
|
|
||||||
*/
|
|
||||||
for (cell=0; cell < MAP_CELL_TOTAL; cell++) {
|
|
||||||
occupier = (*this)[cell].Cell_Occupier();
|
|
||||||
if (occupier) {
|
|
||||||
color = DKGREEN;
|
|
||||||
if (occupier && occupier->Owner() != HOUSE_NONE) {
|
|
||||||
color = ColorRemaps[HouseClass::As_Pointer(occupier->Owner())->RemapColor].Color;
|
|
||||||
}
|
|
||||||
LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(cell) + 1, D_BORD_Y1 + Cell_Y(cell) + 1, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw Home location
|
|
||||||
*/
|
|
||||||
LogicPage->Put_Pixel(D_BORD_X1 + Cell_X(Scen.Waypoint[WAYPT_HOME]) + 1, D_BORD_Y1 + Cell_Y(Scen.Waypoint[WAYPT_HOME]) + 1, WHITE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Erase old coordinates
|
|
||||||
*/
|
|
||||||
// LogicPage->Fill_Rect( D_DIALOG_X + 7,
|
|
||||||
// D_DIALOG_Y + D_DIALOG_H - D_OK_H - 22,
|
|
||||||
// D_DIALOG_X + D_DIALOG_W - 7,
|
|
||||||
// D_DIALOG_Y + D_DIALOG_H - D_OK_H - 22 + 10, BLACK);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Draw the coordinates
|
|
||||||
*/
|
|
||||||
txt_x = D_DIALOG_X + D_DIALOG_W / 8;
|
|
||||||
txt_y = D_DIALOG_Y + D_DIALOG_H - D_OK_H - 32;
|
|
||||||
Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_x1 - D_BORD_X1 - 1);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_y1 - D_BORD_Y1 - 1);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_x2 - map_x1 + 1);
|
|
||||||
|
|
||||||
txt_x += (D_DIALOG_W - 20) / 4;
|
|
||||||
Fancy_Text_Print("%5d", txt_x, txt_y, GadgetClass::Get_Color_Scheme(), BLACK, TPF_CENTER | TPF_EFNT | TPF_NOSHADOW, map_y2 - map_y1 + 1);
|
|
||||||
|
|
||||||
LogicPage->Unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Show_Mouse();
|
|
||||||
display = REDRAW_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Process user input
|
** Process user input
|
||||||
*/
|
*/
|
||||||
input = commands->Input();
|
input = commands->Input();
|
||||||
|
|
||||||
/*
|
|
||||||
** Normal button processing: This is done when the mouse button is NOT
|
|
||||||
** being held down ('grabbed' is 0).
|
|
||||||
*/
|
|
||||||
if (grabbed == 0) {
|
|
||||||
switch (input) {
|
|
||||||
case (KN_RETURN):
|
|
||||||
case (BUTTON_OK | KN_BUTTON):
|
|
||||||
cancel = false;
|
|
||||||
process = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case (KN_ESC):
|
|
||||||
case (BUTTON_CANCEL | KN_BUTTON):
|
|
||||||
cancel = true;
|
|
||||||
process = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KN_LMOUSE:
|
|
||||||
/*
|
|
||||||
** Grab top left
|
|
||||||
*/
|
|
||||||
delta1 = abs(Keyboard->MouseQX - map_x1);
|
|
||||||
delta2 = abs(Keyboard->MouseQY - map_y1);
|
|
||||||
if (delta1 < 3 && delta2 < 3) {
|
|
||||||
grabbed = 1;
|
|
||||||
mx = Keyboard->MouseQX;
|
|
||||||
my = Keyboard->MouseQY;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Grab top right
|
|
||||||
*/
|
|
||||||
delta1 = abs(Keyboard->MouseQX - map_x2);
|
|
||||||
delta2 = abs(Keyboard->MouseQY - map_y1);
|
|
||||||
if (delta1 < 3 && delta2 < 3) {
|
|
||||||
grabbed = 2;
|
|
||||||
mx = Keyboard->MouseQX;
|
|
||||||
my = Keyboard->MouseQY;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Grab bottom right
|
|
||||||
*/
|
|
||||||
delta1 = abs(Keyboard->MouseQX - map_x2);
|
|
||||||
delta2 = abs(Keyboard->MouseQY - map_y2);
|
|
||||||
if (delta1 < 3 && delta2 < 3) {
|
|
||||||
grabbed = 3;
|
|
||||||
mx = Keyboard->MouseQX;
|
|
||||||
my = Keyboard->MouseQY;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Grab bottom left
|
|
||||||
*/
|
|
||||||
delta1 = abs(Keyboard->MouseQX - map_x1);
|
|
||||||
delta2 = abs(Keyboard->MouseQY - map_y2);
|
|
||||||
if (delta1 < 3 && delta2 < 3) {
|
|
||||||
grabbed = 4;
|
|
||||||
mx = Keyboard->MouseQX;
|
|
||||||
my = Keyboard->MouseQY;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Grab the whole map
|
|
||||||
*/
|
|
||||||
delta1 = abs(Keyboard->MouseQX - ((map_x1 + map_x2) / 2));
|
|
||||||
delta2 = abs(Keyboard->MouseQY - ((map_y1 + map_y2) / 2));
|
|
||||||
if (delta1 < (map_x2 - map_x1) / 4 &&
|
|
||||||
delta2 < (map_y2 - map_y1) / 4) {
|
|
||||||
grabbed = 5;
|
|
||||||
mx = Keyboard->MouseQX;
|
|
||||||
my = Keyboard->MouseQY;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Mouse motion processing: This is done while the left mouse button IS
|
|
||||||
** being held down.
|
|
||||||
** - First, check for the button release; if detected, un-grab
|
|
||||||
** - Then, handle mouse motion. WWLIB doesn't pass through a KN_MOUSE_MOVE
|
|
||||||
** value while the button is being held down, so this case must be
|
|
||||||
** trapped as a default.
|
|
||||||
*/
|
|
||||||
switch (input) {
|
|
||||||
case ((int)KN_LMOUSE | (int)KN_RLSE_BIT):
|
|
||||||
grabbed = 0;
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
delta1 = Get_Mouse_X() - mx;
|
|
||||||
delta2 = Get_Mouse_Y() - my;
|
|
||||||
if (delta1==0 && delta2==0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Move top left
|
|
||||||
*/
|
|
||||||
if (grabbed==1) {
|
|
||||||
map_x1 += delta1;
|
|
||||||
if (map_x1 > map_x2 - 2) {
|
|
||||||
map_x1 = map_x2 - 2;
|
|
||||||
} else {
|
|
||||||
if (map_x1 < D_BORD_X1 + 2) {
|
|
||||||
map_x1 = D_BORD_X1 + 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
map_y1 += delta2;
|
|
||||||
if (map_y1 > map_y2 - 2) {
|
|
||||||
map_y1 = map_y2 - 2;
|
|
||||||
} else {
|
|
||||||
if (map_y1 < D_BORD_Y1 + 2) {
|
|
||||||
map_y1 = D_BORD_Y1 + 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
mx = Get_Mouse_X();
|
|
||||||
my = Get_Mouse_Y();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Move top right
|
|
||||||
*/
|
|
||||||
if (grabbed==2) {
|
|
||||||
map_x2 += delta1;
|
|
||||||
if (map_x2 < map_x1 + 2) {
|
|
||||||
map_x2 = map_x1 + 2;
|
|
||||||
} else {
|
|
||||||
if (map_x2 > D_BORD_X2 - 2) {
|
|
||||||
map_x2 = D_BORD_X2 - 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
map_y1 += delta2;
|
|
||||||
if (map_y1 > map_y2 - 2) {
|
|
||||||
map_y1 = map_y2 - 2;
|
|
||||||
} else {
|
|
||||||
if (map_y1 < D_BORD_Y1 + 2) {
|
|
||||||
map_y1 = D_BORD_Y1 + 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
mx = Get_Mouse_X();
|
|
||||||
my = Get_Mouse_Y();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Move bottom right
|
|
||||||
*/
|
|
||||||
if (grabbed==3) {
|
|
||||||
map_x2 += delta1;
|
|
||||||
if (map_x2 < map_x1 + 2) {
|
|
||||||
map_x2 = map_x1 + 2;
|
|
||||||
} else {
|
|
||||||
if (map_x2 > D_BORD_X2 - 2) {
|
|
||||||
map_x2 = D_BORD_X2 - 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
map_y2 += delta2;
|
|
||||||
if (map_y2 < map_y1 + 2) {
|
|
||||||
map_y2 = map_y1 + 2;
|
|
||||||
} else {
|
|
||||||
if (map_y2 > D_BORD_Y2 - 2) {
|
|
||||||
map_y2 = D_BORD_Y2 - 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
mx = Get_Mouse_X();
|
|
||||||
my = Get_Mouse_Y();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Move bottom left
|
|
||||||
*/
|
|
||||||
if (grabbed==4) {
|
|
||||||
map_x1 += delta1;
|
|
||||||
if (map_x1 > map_x2 - 2) {
|
|
||||||
map_x1 = map_x2 - 2;
|
|
||||||
} else {
|
|
||||||
if (map_x1 < D_BORD_X1 + 2) {
|
|
||||||
map_x1 = D_BORD_X1 + 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
map_y2 += delta2;
|
|
||||||
if (map_y2 < map_y1 + 2) {
|
|
||||||
map_y2 = map_y1 + 2;
|
|
||||||
} else {
|
|
||||||
if (map_y2 > D_BORD_Y2 - 2) {
|
|
||||||
map_y2 = D_BORD_Y2 - 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
mx = Get_Mouse_X();
|
|
||||||
my = Get_Mouse_Y();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Move whole map
|
|
||||||
*/
|
|
||||||
if (grabbed==5) {
|
|
||||||
if (map_x1 + delta1 > D_BORD_X1 + 1 && map_x2 + delta1 < D_BORD_X2 - 1) {
|
|
||||||
map_x1 += delta1;
|
|
||||||
map_x2 += delta1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (map_y1 + delta2 > D_BORD_Y1 + 1 && map_y2 + delta2 < D_BORD_Y2 - 1) {
|
|
||||||
map_y1 += delta2;
|
|
||||||
map_y2 += delta2;
|
|
||||||
}
|
|
||||||
display = REDRAW_MAP;
|
|
||||||
mx = Get_Mouse_X();
|
|
||||||
my = Get_Mouse_Y();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1328,7 +1134,7 @@ int MapEditClass::Size_Map(int x, int y, int w, int h)
|
|||||||
/*
|
/*
|
||||||
** If cancel, just return
|
** If cancel, just return
|
||||||
*/
|
*/
|
||||||
if (cancel) {
|
if (sizemap_cancel) {
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user