// madnessEditorView.cpp : implementazione della classe CmadnessEditorView
//
#include "stdafx.h"
#include "madnessEditor.h"
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <il/il.h>
#include <il/ilu.h>
#include <il/ilut.h>
#include "madnessEditorDoc.h"
#include "madnessEditorView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CmadnessEditorView
IMPLEMENT_DYNCREATE(CmadnessEditorView, CView)
BEGIN_MESSAGE_MAP(CmadnessEditorView, CView)
ON_WM_DESTROY()
ON_WM_ERASEBKGND()
ON_WM_SIZE()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_VISTA_WIREFRAME, OnVistaWireframe)
ON_COMMAND(ID_VISTA_SOLID, OnVistaSolid)
ON_UPDATE_COMMAND_UI(ID_VISTA_SOLID, OnUpdateVistaSolid)
ON_UPDATE_COMMAND_UI(ID_VISTA_WIREFRAME, OnUpdateVistaWireframe)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDOWN()
ON_WM_KEYDOWN()
ON_WM_MOUSEWHEEL()
ON_WM_RBUTTONUP()
ON_COMMAND(ID_FUNZIONI_FRANARE, OnFunzioniFranare)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_FRANARE, OnUpdateFunzioniFranare)
ON_COMMAND(ID_FUNZIONI_LIVELLARE, OnFunzioniLivellare)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_LIVELLARE, OnUpdateFunzioniLivellare)
ON_COMMAND(ID_FUNZIONI_INCLINARE, OnFunzioniInclinare)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_INCLINARE, OnUpdateFunzioniInclinare)
ON_COMMAND(ID_FUNZIONI_SPIANARE, OnFunzioniSpianare)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_SPIANARE, OnUpdateFunzioniSpianare)
ON_COMMAND(ID_FUNZIONI_AREAGOAL, OnFunzioniAreagoal)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_AREAGOAL, OnUpdateFunzioniAreagoal)
ON_COMMAND(ID_FUNZIONI_START, OnFunzioniStart)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_START, OnUpdateFunzioniStart)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_EDIT_MERGE, OnEditMerge)
ON_UPDATE_COMMAND_UI(ID_EDIT_MERGE, OnUpdateEditMerge)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_COMMAND(ID_FUNZIONI_ALZARE, OnFunzioniAlzare)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_ALZARE, OnUpdateFunzioniAlzare)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_COMMAND(ID_FUNZIONI_PIRAMIDE, OnFunzioniPiramide)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_PIRAMIDE, OnUpdateFunzioniPiramide)
ON_COMMAND(ID_FUNZIONI_NEMICI, OnFunzioniNemici)
ON_UPDATE_COMMAND_UI(ID_FUNZIONI_NEMICI, OnUpdateFunzioniNemici)
END_MESSAGE_MAP()
// diagnostica di CmadnessEditorView
#ifdef _DEBUG
void CmadnessEditorView::AssertValid() const
{
CView::AssertValid();
}
void CmadnessEditorView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CmadnessEditorDoc* CmadnessEditorView::GetDocument() const // la versione non debug è inline.
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CmadnessEditorDoc)));
return (CmadnessEditorDoc*)m_pDocument;
}
#endif
// costruzione/eliminazione di CmadnessEditorView
CmadnessEditorView::CmadnessEditorView()
{
optionDraw=TEXTURED;
m_pDC=0;
m_hrc=0;
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
inittexture=false;
b_CameraZoom=false;
b_Selection=false;
Sel.first.X=25;
Sel.first.Z=25;
Sel.last.X=25;
Sel.last.Z=25;
SelX=25.5;
SelZ=25.5;
camera.PositionCamera(-20, 70, -20, DEFAULT_X/2, 0, DEFAULT_Z/2, 0, 1, 0);
h=60;
hl=60;
v=1;
vl=1;
k=-2.3;
kl=-2.3;
// posiziona la camera sul bordo della mappa rivolta al centro della stessa per ruotare la mappa attorno al suo centro
// posiziona la camera al centro della mappa per ruotare intorno all'asse y della camera
}
CmadnessEditorView::~CmadnessEditorView()
{
}
BOOL CmadnessEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
// An OpenGL window must be created with the following flags and must not
// include CS_PARENTDC for the class style. Refer to SetPixelFormat
// documentation in the "Comments" section for further information.
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CS_OWNDC;
if(cs.style&CS_PARENTDC)
{
AfxMessageBox("Win OpenGL Internal Error!");
return FALSE;
}
return CView::PreCreateWindow(cs);
}
// disegno di CmadnessEditorView
void CmadnessEditorView::OnDraw(CDC* pDC)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//if(!b_CameraZoom) TargetCamera(&(pDoc->Map), SelX,SelZ);
SetGL();
pDoc->Map.setColoredArea(Sel.first,Sel.last);
glInit();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//float light_0_pos=(10.0f,20.0f,30.0f,20.0f);
if (!inittexture) { pDoc->Map.InitTexture();
for (int i=0; i<MAXENEMY;i++)
pDoc->enemy[i].setTexture(pDoc->Map.Tex[pDoc->Map.TexEnemy]);
inittexture=true; glTexEnvi( GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// gluPerspective(55.0f,(GLfloat)800/(GLfloat)600, .5f, 150.0f);
gluPerspective(55.0f,(GLfloat)ViewSizeX/(GLfloat)ViewSizeY, .5f, 150.0f);
camera.Draw();
pDoc->Map.Draw(optionDraw);
//
int x,z;
//glPushMatrix()
for (int i=0; i<MAXENEMY;i++) {
x=pDoc->Map.Enemys[i].first.X;
z=pDoc->Map.Enemys[i].first.Z;
if( pDoc->Map.Enemys[i].first.X != -1) {
pDoc->enemy[i].init_posizione(x,pDoc->Map.Map[x][z].C,z);
glPushMatrix();
glLoadIdentity();
pDoc->enemy[i].Draw(optionDraw);
glPopMatrix();
}
}
//glPopMatrix();
glDisable(GL_TEXTURE_2D);
glColor3f(0.0,1.0,0.0);
glBegin(GL_LINES);
glVertex3f( 0,0,-100);
glVertex3f( 0,0,100);
glEnd();
glBegin(GL_LINES);
glVertex3f( -100,0,0);
glVertex3f(100,0,0 );
glEnd();
glBegin(GL_LINES);
glVertex3f(0,-100,0 );
glVertex3f(0,100,0 );
glEnd();
glBegin(GL_LINES);
glVertex3f(pDoc->Map.Start.first.X+0.5,
pDoc->Map.getY(pDoc->Map.Start.first.X+0.5,
pDoc->Map.Start.first.Z+0.5)-3,
pDoc->Map.Start.first.Z+0.5);
glVertex3f(pDoc->Map.Start.first.X+0.5,
pDoc->Map.getY(pDoc->Map.Start.first.X+0.5,
pDoc->Map.Start.first.Z+0.5)+3,
pDoc->Map.Start.first.Z+0.5);
glEnd();
SwapBuffers(m_pDC->GetSafeHdc());
glFlush();
}
void CmadnessEditorView::glInit()
{ glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
}
BOOL CmadnessEditorView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
if( ! CView::Create(lpszClassName, lpszWindowName, dwStyle,
rect, pParentWnd, nID, pContext)) return false;
m_pDC = new CClientDC(this);
ASSERT(m_pDC != NULL);
// Setta il pixel format
if (!SetupPixelFormat(m_pDC)) return FALSE;
// Crea e setta il contesto OPENGL
m_hrc = wglCreateContext(m_pDC->GetSafeHdc());
if(m_hrc==NULL){
AfxMessageBox("OpenGL contest fail");
return FALSE;
}
return TRUE;
}
void CmadnessEditorView::OnDestroy()
{
CView::OnDestroy();
SetGL(); // wglMakeCurrent(m_pDC->GetSafeHdc(),m_hrc);
glFinish();
wglMakeCurrent(NULL, NULL);
if (m_hrc) ::wglDeleteContext(m_hrc);
if (m_pDC) delete m_pDC;
}
BOOL CmadnessEditorView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
BOOL CmadnessEditorView::SetupPixelFormat( CDC * pDC )
{
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int pixelformat;
if ( (pixelformat = ChoosePixelFormat(pDC->GetSafeHdc(), &pfd)) == 0 )
{
AfxMessageBox("ChoosePixelFormat failed");
return FALSE;
}
if (SetPixelFormat(pDC->GetSafeHdc(), pixelformat, &pfd) == FALSE)
{
AfxMessageBox("SetPixelFormat failed");
return FALSE;
}
return TRUE;
}
void CmadnessEditorView::OnSize(UINT nType, int cx, int cy)
{
//TRACE("OnSize\n ");
if(SetGL()){
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
//float ratio=(float)cx/(float)cy;
//glOrtho(100,-100,100,-100,100,-100);
ViewSizeX=cx;
ViewSizeY=cy;
glViewport (0, 0, (GLsizei) cx, (GLsizei) cy);
glMatrixMode (GL_MODELVIEW); /* back to modelview matrix */
//trackball
//m_tb.Resize( cx,cy );
}
}
// gestori di messaggi di CmadnessEditorView
void CmadnessEditorView::OnMouseMove(UINT nFlags, CPoint point)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TRACE("nFlags %d",nFlags);
switch(nFlags)
{
case (MK_LBUTTON+MK_RBUTTON):
if (b_CameraZoom) {
CameraMove(point.x,point.y,2);
TargetCamera(&(pDoc->Map), SelX,SelZ);
}
if (b_Selection){
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,(now.y-point.y)*100/ViewSizeY);
now.y=point.y;
pDoc->UpdateAllViews(this);
}
break;
case (MK_LBUTTON):
if(!SetLastPick(point.x, point.y))returnLastPick=returnFirstPick;
else
if (optionEdit==5)
if (!SetFirstPick(point.x,point.y)) returnFirstPick=returnLastPick;
break;
case (MK_RBUTTON):
// if(!b_CameraZoom)
TargetCamera(&(pDoc->Map), camera.m_vView.x(),camera.m_vView.z());
CameraMove(point.x,point.y,1);
break;
}
OnPaint();
pDoc->UpdateAllViews(this);
CView::OnMouseMove(nFlags, point);
}
void CmadnessEditorView::OnVistaWireframe()
{
optionDraw=WIREFRAME;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnVistaSolid()
{
optionDraw=TEXTURED;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateVistaSolid(CCmdUI *pCmdUI)
{
if (optionDraw == TEXTURED )
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnUpdateVistaWireframe(CCmdUI *pCmdUI)
{
if (optionDraw == WIREFRAME)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnLButtonDown(UINT nFlags, CPoint point)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
now.x=point.x;
now.y=point.y;
old.x=point.x;
old.y=point.y;
// if (pDoc->Busy) return;
switch(nFlags)
{
case MK_RBUTTON+MK_LBUTTON:
b_CameraZoom=true;
break;
case MK_LBUTTON:
if (!SetFirstPick(point.x,point.y)) returnFirstPick=returnLastPick;
if (optionEdit==START ) {pDoc->Map.Start.set(Sel.first,Sel.first);
optionEdit=oldoptionEdit;
}
if (optionEdit==ENEMY) {
pDoc->Map.Enemys[pDoc->numEnemy].set(Sel.first,Sel.first);
pDoc->numEnemy++;
if (pDoc->numEnemy==MAXENEMY) pDoc->numEnemy=0;
optionEdit=oldoptionEdit;
}
OnPaint();
break;
}
//pDoc->UpdateAllViews(this);
CView::OnLButtonDown(nFlags, point);
}
void CmadnessEditorView::OnLButtonUp(UINT nFlags, CPoint point)
{
b_CameraZoom=false;
b_Selection=false;
SelX=((Sel.first.X)+(Sel.last.X))/2+0.5;
SelZ=((Sel.first.Z)+(Sel.last.Z))/2+0.5;
CView::OnLButtonUp(nFlags, point);
}
void CmadnessEditorView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CRect rc;
GetClientRect(&rc);
SetGL();
}
void CmadnessEditorView::OnRButtonDown(UINT nFlags, CPoint point)
{ CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: Add your message handler code here and/or call default
//TargetCamera(&(pDoc->Map), SelX,SelZ);
now.x=point.x;
now.y=point.y;
old.x=point.x;
old.y=point.y;
switch(nFlags)
{
case MK_RBUTTON+MK_LBUTTON:
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,0);
b_Selection=true;
break;
}
CView::OnRButtonDown(nFlags, point);
OnPaint();
}
void CmadnessEditorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->Busy) return;
// TODO: Add your message handler code here and/or call default
switch(nChar)
{
case VK_UP:
break; // Move our camera forward by a positive speed
case VK_DOWN: // If we hit the DOWN arrow key
// Move our camera backward by a negative speed
break;
/////// * /////////// * /////////// * NEW * /////// * /////////// * /////////// *
// We made 2 changes from the camera2 tutorial. Instead of gcamera.RotateView()
// we use our new RotateAroundPoint() function. We pass in the camera's view
// point. This will be the point that we rotate our camera position around.
case VK_LEFT: // If we hit the LEFT arrow key
break;
case VK_RIGHT:
break;
case 0x41:
camera.RotateView(0.1,0,1,0);
break;
case 0x53:
camera.RotateView(-0.1,0,1,0);
break;
case 0x57:
break;
case 0x5a:
break;
default:
break;
}
OnPaint();
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
BOOL CmadnessEditorView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// if (pDoc->Busy) return false;
//TargetCamera(&(pDoc->Map), SelX,SelZ);
//if (zDelta > 0)
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,zDelta/100);
/*
if (zDelta < 0)
pDoc->Map.Function(optionEdit,-1);
*/
pDoc->UpdateAllViews(this);
OnPaint();
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
void CmadnessEditorView::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
b_Selection=false;
now.x=point.x;
now.y=point.y;
old.x=point.x;
old.y=point.y;
CView::OnRButtonUp(nFlags, point);
}
void CmadnessEditorView::OnFunzioniFranare()
{
optionEdit=SLIDE;
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,0);
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniFranare(CCmdUI *pCmdUI)
{
if (optionEdit == SLIDE)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniLivellare()
{
optionEdit=LEVEL;
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,0);
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniLivellare(CCmdUI *pCmdUI)
{
if (optionEdit == LEVEL)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniInclinare()
{
optionEdit=INCLINE;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniInclinare(CCmdUI *pCmdUI)
{
if ((Sel.first.X-Sel.last.X)==(Sel.first.Z-Sel.last.Z)) pCmdUI->Enable(false);
else pCmdUI->Enable(true);
if (optionEdit == INCLINE)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniSpianare()
{
optionEdit=FLAT;
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),optionEdit,0);
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniSpianare(CCmdUI *pCmdUI)
{
if (optionEdit == FLAT)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniAreagoal()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
for (int j=pDoc->Map.Colored.first.X;j<=pDoc->Map.Colored.last.X;j++)
for (int i=pDoc->Map.Colored.first.Z;i<=pDoc->Map.Colored.last.Z;i++)
pDoc->Map.Map[j][i].goal=!pDoc->Map.Map[j][i].goal;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniAreagoal(CCmdUI *pCmdUI)
{
}
void CmadnessEditorView::OnFunzioniStart()
{
if (optionEdit==START )optionEdit=oldoptionEdit;
else {oldoptionEdit=optionEdit;
optionEdit=START ;}
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniStart(CCmdUI *pCmdUI)
{
if (optionEdit == START )
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
bool CmadnessEditorView::SetLastPick(int x, int y)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
returnLastPick=pDoc->Map.PickElement(x,y,optionDraw);
if ( returnLastPick>=0)
if (optionEdit!=5)
Sel.set(returnFirstPick,returnLastPick);
return (returnLastPick!=-1);
}
int CmadnessEditorView::CameraMove(int x1, int y1, int option)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
old.x=now.x;
old.y=now.y;
now.x=x1;
now.y=y1;
double a= (now.x-old.x);
double b=-(now.y-old.y);
switch (option)
{ case ROTATE:
vl=vl-b*5/ViewSizeY;
kl=kl+a*5/ViewSizeX;
if (vl<=0.1) vl=0.1;
if (vl>=(M_PI/2-0.1)) vl=M_PI/2-0.1;
if (h<=1) h=1;
break;
case ZOOM:
hl=hl+b*50/ViewSizeY;
kl=kl+a*5/ViewSizeX;
if (hl<=1) hl=1;
break;
default: break;
}
return 0;
}
bool CmadnessEditorView::SetFirstPick(int x, int y)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
returnFirstPick=pDoc->Map.PickElement(x,y,optionDraw);
if ( returnFirstPick>=0)
Sel.set(returnFirstPick,returnFirstPick);
return (returnFirstPick!=-1);
}
void CmadnessEditorView::OnEditCopy()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->Map.copy(&(theApp.AppMap),Sel.first,Sel.last);
}
void CmadnessEditorView::OnEditPaste()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->Map.copy(&(pDoc->UndoMap));
pDoc->Map.paste(&(theApp.AppMap),Sel.first,Sel.last);
Sel.applied=false;
Sel.last.X = pDoc->Map.Colored.last.X;
Sel.last.Z = pDoc->Map.Colored.last.Z;
OnPaint();
pDoc->UpdateAllViews(this);
}
void CmadnessEditorView::OnEditMerge()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->Map.copy(&(pDoc->UndoMap));
pDoc->Map.merge(&(theApp.AppMap),Sel.first,Sel.last);
Sel.applied=false;
Sel.last.X = pDoc->Map.Colored.last.X;
Sel.last.Z = pDoc->Map.Colored.last.Z;
OnPaint();
pDoc->UpdateAllViews(this);
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateEditMerge(CCmdUI *pCmdUI)
{
pCmdUI->Enable(theApp.AppMap.Meaningful);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnUpdateEditPaste(CCmdUI *pCmdUI)
{
pCmdUI->Enable(theApp.AppMap.Meaningful);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnEditUndo()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->UndoMap.copy(&(pDoc->Map));
Sel.applied=false;
OnPaint();
pDoc->UpdateAllViews(this);
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateEditUndo(CCmdUI *pCmdUI)
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pCmdUI->Enable(pDoc->UndoMap.Meaningful);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniAlzare()
{
optionEdit = UP;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniAlzare(CCmdUI *pCmdUI)
{
if (optionEdit == UP)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnEditCut()
{
CmadnessEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->Map.copy(&(theApp.AppMap),Sel.first,Sel.last);
Sel.function(&(pDoc->Map),&(pDoc->UndoMap),ZERO,pDoc->Map.getY(Sel.first.X,Sel.first.Z));
Sel.applied=false;
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateEditCut(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniPiramide()
{
optionEdit = PYRAMID;
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniPiramide(CCmdUI *pCmdUI)
{
if ((Sel.first.X-Sel.last.X)!=(Sel.first.Z-Sel.last.Z)) pCmdUI->Enable(false);
else pCmdUI->Enable(true);
if (optionEdit == PYRAMID)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::OnFunzioniNemici()
{ if (optionEdit==ENEMY )optionEdit=oldoptionEdit;
else {oldoptionEdit=optionEdit;
optionEdit=ENEMY ;}
OnPaint();
// TODO: Add your command handler code here
}
void CmadnessEditorView::OnUpdateFunzioniNemici(CCmdUI *pCmdUI)
{
if (optionEdit == ENEMY)
pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
// TODO: Add your command update UI handler code here
}
void CmadnessEditorView::TargetCamera(MadMap *mp, float target_x, float target_z)
{
if (!mp->intersect((camera.m_vPosition.x()+camera.m_vView.x()+sin(v)*h*sin(k))/2,
(camera.m_vPosition.y()+camera.m_vView.y()+cos(v)*h)/2,
(camera.m_vPosition.z()+camera.m_vView.z()+sin(v)*h*cos(k))/2,
target_x,mp->getY(target_x,target_z)+1,target_z))
{
v=v-0.1;
if (v<0.1) v=0.1;
}
if (mp->intersect((camera.m_vPosition.x()+camera.m_vView.x()+sin(vl)*h*sin(k))/2,
(camera.m_vPosition.y()+camera.m_vView.y()+cos(vl)*h)/2,
(camera.m_vPosition.z()+camera.m_vView.z()+sin(vl)*h*cos(k))/2,
target_x,mp->getY(target_x,target_z)+1, target_z))
v=vl;
h=hl;
if (h<1.5) h=1.5;
k=kl;
if (camera.m_vPosition.y()<mp->getY(camera.m_vPosition.x(),camera.m_vPosition.z())+1)
{if (h>=2.5) h=h-1;}
camera.PositionCamera((camera.m_vPosition.x()+camera.m_vView.x()+sin(v)*h*sin(k))/2,(camera.m_vPosition.y()+camera.m_vView.y()+cos(v)*h)/2,(camera.m_vPosition.z()+camera.m_vView.z()+sin(v)*h*cos(k))/2,
(camera.m_vView.x()+target_x)/2,mp->getY(target_x,target_z),(camera.m_vView.z()+target_z)/2,0, 1, 0);
}