📄 seditor.cpp
字号:
/************************************************************************************************
* *
* Map Editor *
* Edition : DX1.0 *
* Editor module header. *
* sEditor.cpp *
* Author : LightWing *
* Red Ants . SoftWorld . BeiJing *
* (C)1998 7.15 *
* *
************************************************************************************************/
#include "ME_DX.h"
//#include <s_file.h>
//#include <crtdbg.h>
sEditor::sEditor()
{
LastChange = new sMEE;
bSaved = 1;
ClipChange = NULL;
layer = 1;
mapWidth = 100;
mapHeight = 100;
levels = 3;
ME_Changed = 0;
ChangeStep = 0;
weather = 0;
szbkpic = 0;
direct = 0;
scrX = 0;
scrY = 0;
for(int i = 0; i < 5; i ++)
{
sERL[i] = (sRME **)new sRME[200][200];
}
}
sEditor::~sEditor()
{
delete LastChange;
}
void sEditor::Quit()
{
if(!bSaved)
{
display("地图未存盘,存盘退出吗?", &sRcw[4]);
}
else PostQuitMessage(0);
}
void sEditor::NewMap()
{
if(!bSaved)
{
display("地图未存盘,确定放弃吗?", &sRcw[4]);
}
else CreateMap();
}
void sEditor::LoadMap()
{
}
void sEditor::SaveMap()
{
HFILE hFil;
OFSTRUCT ofs;
MapHeader mp;
// set data value.
mp.flags[0] = 'G'; mp.flags[1] = 'M';
mp.flags[2] = 'A'; mp.flags[4] = 'P';
mp.baseterrain = baseterrain;
mp.headsize = sizeof(MapHeader);
mp.width = width;
mp.height = height;
mp.levels = levels;
mp.szbkpic = szbkpic;
mp.direct = direct;
mp.weather = weather;
// open file for save.
hFil = OpenFile(MapFile, &ofs, OF_WRITE);
_llseek(hFil, 0, FILE_BEGIN);
_lwrite(hFile,(char*)&mp, sizeof(MapHeader));
for(int k = 0; k < levels; k++)
{
lpMap = sERL[k][LastChange->y * width];
for(int i = 0; i < height; i ++)
{
for(int j = 0; j < width; j++)
{
_lwrite(hFil,(char*)&lpmap([i * width + j]), sizeof(sRME));
}
}
}
// restore the edit state.
// CurWnd = PreWnd;
ButtonPressed = PreButton;
}
void sEditor::Help()
{
}
void sEditor::Copy()
{
}
void sEditor::Paste()
{
}
void sEditor::Delete()
{
}
void sEditor::Cut()
{
}
void sEditor::Select()
{
}
void sEditor::SelectME(int id1, int id2, int id3)
{
if(id1 == 0 || id1 == 1 || id1 == 3) layer = 1;
else layer = 2;
CurClass = id1;
CurPage = id2;
CurME.index = me[id1][(id2)*6 + id3-1].index;
CurME.height = me[id1][(id2)*6 + id3-1].height;
}
void sEditor::ButtonYes()
{
switch(ButtonPressed)
{
case 17:
ButtonPressed = PreButton;
//.....
break;
case 16: // quit.
SaveMap();
PostQuitMessage(0);
break;
case 15:
ButtonPressed = PreButton;
//.....
break;
case 14:
ButtonPressed = PreButton;
//.....
break;
case 13:
ButtonPressed = PreButton;
//.....
break;
case 12:
ButtonPressed = PreButton;
CreateMap();
break;
}
ButtonPressed = PreButton;
}
void sEditor::ButtonNo()
{
switch(ButtonPressed)
{
case 17:
ButtonPressed = PreButton;
//.....
break;
case 16:
ButtonPressed = PreButton;
PostQuitMessage(0);
break;
case 15:
ButtonPressed = PreButton;
//.....
break;
case 14:
ButtonPressed = PreButton;
//.....
break;
case 13:
ButtonPressed = PreButton;
//.....
break;
case 12:
ButtonPressed = PreButton;
//.....
break;
}
ButtonPressed = PreButton;
}
void sEditor::ButtonCancel()
{
switch(ButtonPressed)
{
case 16:
ButtonPressed = PreButton;
display(" ",&sRcw[4]);
break;
case 15:
//.....
break;
case 14:
//.....
break;
case 13:
//.....
break;
case 12:
//.....
break;
}
ButtonPressed = PreButton;
}
void sEditor::ChangeMap(int x, int y, sTME *me)
{
if(bSaved) bSaved = FALSE;
lpMap = sERL[l][LastChange->y * width];
// Save the state before change.
LastChange->l = layer;
LastChange->x = x;
LastChange->y = y;
LastChange->mec.index = lpMap[x].index;
LastChange->mec.height = lpMap[x].height;
// Change the screen data
lpMap[x].index = me->index;
lpMap[x].height = me->height;
}
void sEditor::UnChange()
{
lpMap = sERL[layer][LastChange->y * width];
lpMap[LastChange->x].index = LastChange->mec.index;
lpMap[LastChange->x].height = LastChange->mec.height;
ME_Changed = 0;
}
void sEditor::CreateMap()
{
int i,j,la;
// clear the old data.
for(la = 0; la < 5; la ++)
{
for( i = 0; i < 200; i ++ )
{
for( j = 0; j < 200; j ++)
{
sERL[la][i][j].index = 0;
sERL[la][i][j].height = 0;
}
}
}
// initialize the map with base terrain.
// the surface level.
for(i = 0; i < mapHeight; i ++)
{
for( j = 0; j < mapWidth; j ++)
{
sERL[0][i][j].index = BaseTerrain;
sERL[0][i][j].height = 1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -