📄 45mapmakerview.cpp
字号:
theApp->display->Blt(ix,iy,draw);
}
if((((j+mapBeginy)*mapWidth)+i+mapBeginx)==this->editarry&&this->editFront)
{
draw =theApp->GetCSurface("Tile",theApp->CurrentEditId);
if(draw)
{
theApp->display->AlphaBlt(ix,iy,draw,100,RGB(255,0,255));
}
}
}
iy+=tileHeight;
}
ix=ixbegin+tileWidth/2; //每次画完一列之后x坐标要向右移动
ixbegin+=tileWidth/2; //然后作一下纪录
iy=hbegin+h1; //iy要回到原来位置并且变动
hbegin+=h1;
h1 = -h1;
}
}
void CMy45MapMakerView::DrawObject()
{
}
BOOL CMy45MapMakerView::OnEraseBkgnd(CDC* pDC)//不刷背景
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return true;
}
void CMy45MapMakerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: 在此添加专用代码和/或调用基类
CMy45MapMakerDoc* pDoc = GetDocument();
//CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp();
//HRESULT hr = theApp->display->ChangeBackBufferSize(pDoc->m_myMap.width*pDoc->m_myMap.blockw,pDoc->m_myMap.height*pDoc->m_myMap.blockh);
mapWidth = pDoc->m_myMap.width;
mapHeight = pDoc->m_myMap.height;
this->tileHeight = pDoc->m_myMap.blockh;
this->tileWidth = pDoc->m_myMap.blockw;
//if(hr)
//MessageBox("Can't change DDraw BackBufferSzie!!","Error");
CView::OnUpdate(pSender,lHint,pHint);
}
void CMy45MapMakerView::OnMouseMove(UINT nFlags, CPoint point)
{
//在此添加消息处理程序代码和/或调用默认值
//Sleep(1);
if(mouse==0)
{
AfxGetApp()->m_pMainWnd->PostMessage(WM_MAP_POS,point.x+mapBeginx*tileWidth/2,point.y+mapBeginy*tileHeight);
CMy45MapMakerDoc* pDoc = GetDocument();
CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp();
CRect rt;
GetClientRect(&rt);
if(point.x>rt.right||point.y>rt.bottom)
return;
int arryx,arryy; //定义数组的起始位置~
arryx = this->mapBeginx+(point.x)/(tileWidth/2);
arryy = this->mapBeginy+(point.y+tileHeight/2)/(tileHeight);
if(arryx>=mapWidth||arryy>=mapHeight)
return;
int w,h;
if(!this->editMode)//如果是画刷模式,,,,,
{
w = point.x%(tileWidth/2);
if(arryx%2==0)
w = (tileWidth/2)-w;
int temp = ((point.y+(tileHeight/2))/tileHeight);
temp = temp*tileHeight;
h = temp-point.y;
float w1 = w;
float h1 = h;
if(arryx%2==1)
{
if(w1==0)
{
if(h1<0)
arryy--;
}
else
{
float result = (h1/w1);
if(result>(0.5))
arryy--;
if(result<0.5&&result>-0.5)
arryx++;
}
}
else
{
if(w1 == 0)
{
if(h1>0)
{ arryy--;
arryx++;
}
}
else
{
float result = h1/w1;
if(result>0.5)
{
arryx++;
arryy--;
}
if(result<-0.5)
{
arryx++;
}
}
}
editx = arryx;
edity = arryy;
AfxGetApp()->m_pMainWnd->PostMessage(WM_MAP_ARRAY,arryx,arryy);
editarry = ((arryy*this->mapWidth)+arryx);
if(brushed)
{
if(this->editFront) //刷地表
*(pDoc->m_myMap.arr1+this->editarry) = theApp->CurrentEditId;
// else if(this->editSecond)
// *(pDoc->m_myMap.arr2+this->editarry) = theApp->CurrentEditId;
}
this->Invalidate();
}
else
{
}
}
mouse++;
if(mouse==6)
mouse = 0;
//CView::OnMouseMove(nFlags, point);
}
void CMy45MapMakerView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(editarry>(mapHeight*mapWidth)||editarry<0)
return;
CMy45MapMakerDoc* pDoc = GetDocument();
CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp();
if(!this->editMode)
{
if(this->editFront)
{
if(*(pDoc->m_myMap.arr1+this->editarry)<0)
*(pDoc->m_myMap.arr1+this->editarry) = -theApp->CurrentEditId;
else
*(pDoc->m_myMap.arr1+this->editarry) = theApp->CurrentEditId;
}
else if(this->editSecond)
{
//编辑第二层的时候,需要修改第一层某些东西咯
//先得到第二层描述结构
WallConfig* temp;
theApp->m_myWall.find(theApp->CurrentEditId,temp);
//然后检查是否有东西和它冲突,如果有冲突,就不画它
std::vector<CPoint>::iterator is = temp->project.begin();
if(*(pDoc->m_myMap.arr1+editarry)<0)
return;
//there is a arry Problem in here
if(editx%2==0)
{
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-(temp->centery))*this->mapWidth+((*is).x-temp->centerx);
int p = (*is).x;
int q = temp->centerx;
if(q%2 == 1)
{
if((abs(p-q))%2==1)
s-=mapWidth;
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
if(*(pDoc->m_myMap.arr1+s)<0)//如果冲突,直接返回
return;
}
is = temp->project.begin();
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-temp->centery)*this->mapWidth+((*is).x-temp->centerx);
int p = (*is).x;
int q = temp->centerx;
if(q%2==1)
{
if((abs((p-q)))%2==1)
s-=mapWidth;
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
*(pDoc->m_myMap.arr1+s) = -(*(pDoc->m_myMap.arr1+s));
}
}
else
{
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-(temp->centery))*this->mapWidth+((*is).x-temp->centerx);
if(temp->centerx%2==0)
{
if(abs((*is).x - temp->centerx)%2==1)
{
s+=mapWidth;
}
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
if(*(pDoc->m_myMap.arr1+s)<0)//如果冲突,直接返回
return;
}
is = temp->project.begin();
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-temp->centery)*this->mapWidth+((*is).x-temp->centerx);
int p = (*is).x;
int q = temp->centerx;
if(temp->centerx%2==0)
{
if(abs((*is).x - temp->centerx)%2==1)
{
s+=mapWidth;
}
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
*(pDoc->m_myMap.arr1+s) = -(*(pDoc->m_myMap.arr1+s));
}
}
//修改当前值
*(pDoc->m_myMap.arr1+editarry) = -*(pDoc->m_myMap.arr1+editarry);
*(pDoc->m_myMap.arr2+this->editarry) = theApp->CurrentEditId;
}
brushed = false;
this->Invalidate();
}
CView::OnLButtonUp(nFlags, point);
}
void CMy45MapMakerView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(!this->editMode)
brushed = true;
CView::OnLButtonDown(nFlags, point);
}
BOOL CMy45MapMakerView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
if(CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext))
{
return InitDirectDraw(this->m_hWnd);
}
else
return false;
}
void CMy45MapMakerView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
//CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp(); //app
//if(theApp->display)
//theApp->display->UpdateBounds();
// TODO: 在此处添加消息处理程序代码
}
void CMy45MapMakerView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nSBCode){
case SB_LINEUP:
--mapBeginx;
break;
case SB_LINEDOWN:
++mapBeginx;
break;
case SB_PAGEUP:
mapBeginx-=10;
break;
case SB_PAGEDOWN:
mapBeginx+=10;
break;
case SB_THUMBPOSITION:
mapBeginx=nPos;
break;
}
if(mapBeginx<0)
mapBeginx=0;
if(mapBeginx>mapWidth)
mapBeginx = mapWidth;
CView::OnHScroll(nSBCode, mapBeginx, pScrollBar);
this->Invalidate();
}
void CMy45MapMakerView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nSBCode){
case SB_LINEUP:
--mapBeginy;
break;
case SB_LINEDOWN:
++mapBeginy;
break;
case SB_PAGEUP:
mapBeginy-=10;
break;
case SB_PAGEDOWN:
mapBeginy+=10;
break;
case SB_THUMBPOSITION:
mapBeginy=nPos;
break;
}
if(mapBeginy<0)
mapBeginy=0;
if(mapBeginy>mapHeight)
mapBeginy = mapHeight;
CView::OnVScroll(nSBCode, mapBeginy, pScrollBar);
this->Invalidate();
}
void CMy45MapMakerView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(editarry>(mapHeight*mapWidth)||editarry<0)
return;
CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp();
CMy45MapMakerDoc* pDoc = GetDocument();
//CMy45MapMakerApp* theApp = (CMy45MapMakerApp*)AfxGetApp();
if(!editMode)
{
if(this->editFront)
{
*(pDoc->m_myMap.arr1+this->editarry) = 0;
}
else if(this->editSecond)
{
if(*(pDoc->m_myMap.arr2+this->editarry))
{
WallConfig* temp;
theApp->m_myWall.find(*(pDoc->m_myMap.arr2+this->editarry),temp);
//然后检查是否有东西和它冲突,如果有冲突,就不画它
std::vector<CPoint>::iterator is = temp->project.begin();
//there is a arry Problem in here
if(editx%2==0)
{
// is = temp->project.begin();
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-temp->centery)*this->mapWidth+((*is).x-temp->centerx);
int p = (*is).x;
int q = temp->centerx;
if(q%2==1)
{
if((abs((p-q)))%2==1)
s-=mapWidth;
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
if(*(pDoc->m_myMap.arr1+s)<0)
*(pDoc->m_myMap.arr1+s) = -(*(pDoc->m_myMap.arr1+s));
}
}
else
{
//is = temp->project.begin();
for(;is!=temp->project.end();is++)
{
int s = this->editarry+((*is).y-temp->centery)*this->mapWidth+((*is).x-temp->centerx);
int p = (*is).x;
int q = temp->centerx;
if(temp->centerx%2==0)
{
if(abs((*is).x - temp->centerx)%2==1)
{
s+=mapWidth;
}
}
if(s<0||s>(mapWidth*mapHeight-1))
continue;
if(*(pDoc->m_myMap.arr1+s)<0)
*(pDoc->m_myMap.arr1+s) = -(*(pDoc->m_myMap.arr1+s));
}
}
//修改当前值
if(*(pDoc->m_myMap.arr1+editarry)<0)
*(pDoc->m_myMap.arr1+editarry) = -*(pDoc->m_myMap.arr1+editarry);
*(pDoc->m_myMap.arr2+this->editarry) =0;
}
}
}
this->Invalidate();
CView::OnRButtonDown(nFlags, point);
}
void CMy45MapMakerView::OnViewfront()
{
// TODO: 在此添加命令处理程序代码
viewFront =!viewFront;
}
void CMy45MapMakerView::OnUpdateViewfront(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(viewFront);
}
void CMy45MapMakerView::OnViewsecond()
{
// TODO: 在此添加命令处理程序代码
viewSecond = !viewSecond;
}
void CMy45MapMakerView::OnUpdateViewsecond(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(viewSecond);
}
void CMy45MapMakerView::OnViewblock()
{
// TODO: 在此添加命令处理程序代码
viewBlock = !viewBlock;
}
void CMy45MapMakerView::OnUpdateViewblock(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(viewBlock);
}
void CMy45MapMakerView::OnViewnet()
{
// TODO: 在此添加命令处理程序代码
viewNet = !viewNet;
}
void CMy45MapMakerView::OnUpdateViewnet(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(viewNet);
}
void CMy45MapMakerView::OnEditfront()
{
// TODO: 在此添加命令处理程序代码
this->editFront = true;
this->editSecond = false;
this->editBlock = false;
}
void CMy45MapMakerView::OnEditsecond()
{
// TODO: 在此添加命令处理程序代码
this->editSecond = true;
this->editFront = false;
this->editBlock = false;
}
void CMy45MapMakerView::OnEditblock()
{
// TODO: 在此添加命令处理程序代码
this->editBlock = true;
this->editFront = false;
this->editSecond = false;
}
void CMy45MapMakerView::OnUpdateEditfront(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(editFront);
}
void CMy45MapMakerView::OnUpdateEditsecond(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(editSecond);
}
void CMy45MapMakerView::OnUpdateEditblock(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(editBlock);
}
void CMy45MapMakerView::OnSelectmode()
{
// TODO: 在此添加命令处理程序代码
this->editMode = true;
}
void CMy45MapMakerView::OnBrushmode()
{
// TODO: 在此添加命令处理程序代码
this->editMode = false;
}
void CMy45MapMakerView::OnUpdateSelectmode(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(editMode);
}
void CMy45MapMakerView::OnUpdateBrushmode(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(!editMode);
}
void CMy45MapMakerView::OnViewsecondtarg()
{
// TODO: 在此添加命令处理程序代码
//this->ViewEditSecond = !ViewEditSecond;
ViewEditSecond = !ViewEditSecond;
}
void CMy45MapMakerView::OnUpdateViewsecondtarg(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(ViewEditSecond);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -