// madnessEditorView.h : interfaccia della classe CmadnessEditorView
//
#pragma once
#include "MadMap.h"
#include "CCamera.h"
#include "Selection.h"
#include "Marbleenemy.h"
class CmadnessEditorView : public CView
{
protected:
CmadnessEditorView();
DECLARE_DYNCREATE(CmadnessEditorView)
public:
//========================
//restituisce il documento
// associato alla vista
//========================
CmadnessEditorDoc* GetDocument() const;
//=================
//DC della finestra
//=================
CClientDC *m_pDC;
//=================
//Contesto OpenGL
//=================
HGLRC m_hrc;
//===========================
//valore di ritorno del primo
// Pick nella multiselezione
//===========================
int returnFirstPick;
//===========================
//valore di ritorno
// dell'ultimo Pick nella
// multiselezione
//===========================
int returnLastPick;
//=======inittexture=========
//true se le texture sono
//state inizializzate,
//false altrimenti
//===========================
bool inittexture;
//===========================
//opzione di disegno corrente
// della vista: WIREFRAME o
// SOLID o TEXTURED
//===========================
int optionDraw;
/**opzione di editing corrente della vista */
int optionEdit;
/**opzione di editing precendentemente selezionata della vista */
int oldoptionEdit;
/**ampiezza X della vista */
int ViewSizeX;
/**altezza Y della vista */
int ViewSizeY;
/**camera della vista OpenGL*/
CCamera camera;
/**Ultima posizione catturata del mouse*/
CPoint now;
/**penultima posizione catturata del mouse*/
CPoint old;
/**true se è in modalità di selezione*/
bool b_Selection;
/**true se è in modalità di Zoom Camera*/
bool b_CameraZoom;
/**Area Selezionata nella vista*/
Selection Sel;
/**coordinata X centrale nell'aria selezionata*/
float SelX;
/**coordinata Z centrale nell'aria selezionata*/
float SelZ;
/**distanza corrente dal punto di vista*/
double h;
/**angolo corrente intorno all'asse Y del punto di vista*/
double k;
/** angolo corrente intorno agli assi X/Z del punto di vista*/
double v;
/** limite distanza dal punto di vista */
double hl;
/** limite angolo intorno all'asse Y del punto di vista*/
double kl;
/** limite angolo intorno agli assi X/Z del punto di vista*/
double vl;
// Operazioni
public:
BOOL CmadnessEditorView::SetupPixelFormat( CDC * pDC );
void glInit();
inline BOOL SetGL()
{
if(!(m_pDC && m_hrc)) {
TRACE("Failed SetGL\n");
return false;
}
if(!wglMakeCurrent(m_pDC->GetSafeHdc(), m_hrc)){
AfxMessageBox("GlMakeCurrent Error");
return FALSE;
}
return TRUE;
}
// Sostituzioni
public:
virtual void OnDraw(CDC* pDC); // sottoposto a overriding per creare questa vista
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// Implementazione
public:
virtual ~CmadnessEditorView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
virtual afx_msg void OnDestroy();
virtual afx_msg BOOL OnEraseBkgnd(CDC* pDC);
virtual afx_msg void OnSize(UINT nType, int cx, int cy);
// Funzioni generate per la mappa dei messaggi
protected:
DECLARE_MESSAGE_MAP()
public:
//=============SetFirstPick===============
//setta il primo Pick della selezione
//=======================================
bool SetFirstPick(int x, int y);
//=============SetLastPick===============
//setta l'ultimo Pick della selezione
//=======================================
bool SetLastPick(int x, int y);
//=================CameraMove================
//muove la camera nella vista. <br>
//due tipi movimento indicato in option <br>
//x, y coordinate all'interno della View <br>
//option: ROTATE o ZOOM <br>
//============================================
int CameraMove(int x, int y, int option);
//================TargetCamera===========================
//cambia il punto di vista della camera. <br>
//inoltre corregge l'angolazione di vista nel caso in <br>
//cui il punto di vista nn sia visibile <br>
//mp: puntatore alla mappa. <br>
//target_x: coordinata x del nuovo punto di vista <br>
//target_y: coordinata z del nuovo punto di vista <br>
//========================================================
void TargetCamera(MadMap *mp, float target_x, float target_z);
/**metodi per l'interfaccia grafica MFC*/
virtual void OnInitialUpdate();
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnVistaWireframe();
afx_msg void OnVistaSolid();
afx_msg void OnFunzioniFranare();
afx_msg void OnFunzioniLivellare();
afx_msg void OnFunzioniInclinare();
afx_msg void OnFunzioniSpianare();
afx_msg void OnFunzioniAlzare();
afx_msg void OnFunzioniPiramide();
afx_msg void OnFunzioniNemici();
afx_msg void OnFunzioniAreagoal();
afx_msg void OnFunzioniStart();
afx_msg void OnEditCopy();
afx_msg void OnEditPaste();
afx_msg void OnEditMerge();
afx_msg void OnEditUndo();
afx_msg void OnEditCut();
afx_msg void OnUpdateFunzioniFranare(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniLivellare(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniInclinare(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniSpianare(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniAreagoal(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniStart(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditMerge(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditPaste(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditUndo(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniNemici(CCmdUI *pCmdUI);
afx_msg void OnUpdateVistaSolid(CCmdUI *pCmdUI);
afx_msg void OnUpdateVistaWireframe(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniPiramide(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditCut(CCmdUI *pCmdUI);
afx_msg void OnUpdateFunzioniAlzare(CCmdUI *pCmdUI);
};
#ifndef _DEBUG // versione di debug in madnessEditorView.cpp
inline CmadnessEditorDoc* CmadnessEditorView::GetDocument() const
{ return reinterpret_cast<CmadnessEditorDoc*>(m_pDocument); }
#endif