Beispiel #1
0
void CEasyGenView::OnCameraFloor()
{
	CEasyGenDoc *pDoc = GetDocument();
	S_POSINFO   inf;

	if (g_Grid.GetInfo(m_Eye.x, m_Eye.y, &inf))
	{
		m_Eye.z = inf.z + 50;
		InvalidateRect(NULL, FALSE);
	}
}
Beispiel #2
0
void CEasyGenView::OnRButtonDblClk(UINT nFlags, CPoint point)
{
	CEasyGenDoc *pDoc = GetDocument();
	S_POSINFO   inf;
	CNmVec3     p;

	BOOL kCTRL  = nFlags & MK_CONTROL;
	BOOL kSHIFT = nFlags & MK_SHIFT;

	BOOL GotPoint = GetXYZ(point, p);

	switch (pDoc->GetActiveTab())
	{
	case (TAB_GRID):
		break;
	case (TAB_MODIFIER):

		// Modifier get height
		if (kCTRL && GotPoint)
		{
			if (g_Grid.GetInfo(p.x, p.y, &inf))
			{
				g_Mod.HeightSet(inf.z);
				InvalidateRect(NULL, FALSE);
				pDoc->m_bInvalidateGridPreview = TRUE;
			}
		}

		break;
	case (TAB_ALPHAMAP):
		break;
	case (TAB_MODELS):
		break;
	}

	CView::OnRButtonDblClk(nFlags, point);
}
Beispiel #3
0
void CEasyGenView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	CEasyGenDoc *pDoc = GetDocument();
	CNmVec3     ray;
	CNmVec3     p;

	BOOL kCTRL  = nFlags & MK_CONTROL;
	BOOL kSHIFT = nFlags & MK_SHIFT;

	BOOL GotPoint = GetXYZ(point, p);
	BOOL GotRay   = GetRay(point, ray);

	switch (pDoc->GetActiveTab())
	{
	case (TAB_GRID):

		// player place
		if (!kCTRL && kSHIFT && GotPoint && g_Grid.PtInGrid(p.x, p.y))
		{
			pDoc->m_vPlayer.x = p.x;
			pDoc->m_vPlayer.y = p.y;

			S_POSINFO inf;
			if (g_Grid.GetInfo(pDoc->m_vPlayer.x, pDoc->m_vPlayer.y, &inf))
			{
				pDoc->m_vPlayer.z = inf.z;
			}

			m_vGenericPos.Set(p.x, p.y, pDoc->m_vPlayer.z);
			UpdateStatusBar();
			InvalidateRect(NULL, FALSE);
		}

		break;
	case (TAB_MODIFIER):

		// modifier place
		if (kCTRL && !kSHIFT && GotPoint && g_Grid.PtInGrid(p.x, p.y))
		{
			pDoc->m_modX = p.x;
			pDoc->m_modY = p.y;

			g_Mod.PositionSet(p.x, p.y);

			UpdateStatusBar();
			InvalidateRect(NULL, FALSE);
			pDoc->m_bInvalidateGridPreview = TRUE;
		}

		break;
	case (TAB_ALPHAMAP):
		break;
	case (TAB_MODELS):

		// MD3 - Insert model
		if (kCTRL && !kSHIFT && GotRay)
		{
			CNmVec3  pos;
			float    dist;
			S_MD3PTR *md3ptr;

			if (g_Grid.GetDistanceTrisRay(m_Eye, ray, pos, dist))
			{
				md3ptr = g_Md3Man.m_Placed.Append(); // g_Md3Man.m_Placed.Append( pDoc->GetMd3SelectedTabModels() );

				if (md3ptr)
				{
					md3ptr->pMd3     = pDoc->GetMd3SelectedTabModels();
					md3ptr->m_egvPos = pos;
					InvalidateRect(NULL, FALSE);
				}
			}
		}
		break;
	}

	// CAMERA - camera place [EVERY TAB]
	if (!kSHIFT && !kCTRL && GotPoint && g_Grid.PtInGrid(p.x, p.y))
	{
		m_Eye.x = p.x;
		m_Eye.y = p.y;

		InvalidateRect(NULL, FALSE);
	}

	CView::OnLButtonDblClk(nFlags, point);
}
Beispiel #4
0
void CEasyGenView::OnMouseMove(UINT nFlags, CPoint point)
{
	CView::OnMouseMove(nFlags, point);

	CEasyGenDoc *pDoc = GetDocument();

	BOOL      Refresh   = FALSE;
	BOOL      UpdStatus = FALSE;
	CNmVec3   p;
	S_POSINFO inf;
	int       tab;

	int mod = pDoc->GetModifier();

	BOOL kCTRL  = nFlags & MK_CONTROL;
	BOOL kSHIFT = nFlags & MK_SHIFT;
	BOOL m_LBD  = nFlags & MK_LBUTTON;
	BOOL m_RBD  = nFlags & MK_RBUTTON;

	CPoint Ldelta = point - m_LDP;
	CPoint Rdelta = point - m_RDP;

	if (!m_LBD)
	{
		m_VertexGot = -1;
	}

	switch (tab = pDoc->GetActiveTab())
	{
	case (TAB_GRID):
		break;
	case (TAB_MODIFIER):

		//	move Modifier	CTRL + Left
		if (m_LBD && kCTRL && !kSHIFT)
		{
			float f  = (float)u_deg2rad(-m_yRot + 90);
			float dx = -(float)(Ldelta.x) * pDoc->m_modXYstep;
			float dy = (float)(Ldelta.y) * pDoc->m_modXYstep;
			pDoc->m_modY += float(sin(f) * dx + cos(f) * dy);
			pDoc->m_modX += float(cos(f) * dx - sin(f) * dy);
			g_Mod.MoveDelta(float(cos(f) * dx - sin(f) * dy), float(sin(f) * dx + cos(f) * dy));

			UpdStatus                      = TRUE;
			pDoc->m_bInvalidateGridPreview = TRUE;
			Refresh                        = TRUE;
		}

		//	inc Strength	CTRL + Right
		if (m_RBD && kCTRL && !kSHIFT && (mod != MOD_NONE))
		{
			pDoc->m_modStrength -= (float)(Rdelta.y) * 4.f;

			g_Mod.HeightDelta(-(float)(Rdelta.y) * 4.f);

			UpdStatus                      = TRUE;
			pDoc->m_bInvalidateGridPreview = TRUE;
			Refresh                        = TRUE;
		}

		// inc Radius		SHIFT + Right
		if (m_RBD && !kCTRL && kSHIFT && (mod != MOD_NONE))
		{
			pDoc->m_modRadius -= (float)(Rdelta.y) * 4.f;
			g_Mod.RadiusDelta(-(float)(Rdelta.y) * 4.f);

			if (pDoc->m_modRadius < 0)
			{
				pDoc->m_modRadius = 0;
			}

			UpdStatus                      = TRUE;
			pDoc->m_bInvalidateGridPreview = TRUE;
			Refresh                        = TRUE;
		}

		// Vertex dragging
		if (m_LBD && kCTRL && kSHIFT && (m_VertexGot != -1) && (mod == MOD_NONE))
		{
			float *z = g_Grid.GetPtr(m_VertexGot);

			*z = floor(*z - g_Prefs.m_fVertexDragStep * (float)Ldelta.y);

			if (*z < ASSUME_ZERO)
			{
				*z = 0;
			}

			m_vGenericPos.Set(g_Grid.GetX(m_VertexGot), g_Grid.GetY(m_VertexGot), *z);

			UpdStatus                      = TRUE;
			pDoc->m_bInvalidateGridPreview = TRUE;
			Refresh                        = TRUE;
		}

		break;
	case (TAB_ALPHAMAP):

		int curindex;

		curindex = g_AlphamapMan.GetCurSel();

		// Alphamap paint
		if (m_LBD && kCTRL && kSHIFT && curindex != -1)
		{
			if (GetXYZ(point, p))
			{
				if (g_Grid.GetInfo(p.x, p.y, &inf))
				{
					m_VertexGot = g_Grid.GetK(inf.i, inf.j);
//					g_Grid.SetAlphaIndex(m_VertexGot, curindex );
					g_Grid.PaintAlphaIndex(inf.i, inf.j, pDoc->m_dwPaintRadius, curindex);
					Refresh = TRUE;
				}
			}
		}

		break;
	case (TAB_MODELS):
		break;
	}

	//	rotate X/Y
	if (m_LBD && !m_RBD && !kCTRL && !kSHIFT)
	{
		m_yRot += (float)(Ldelta.x) / 2.0f; // left / right

		m_xRot += (float)(Ldelta.y) / 2.0f; // up / dn
		if (m_xRot > 85)
		{
			m_xRot = 85;
		}
		if (m_xRot < -85)
		{
			m_xRot = -85;
		}

		Refresh = TRUE;
	}

	//	pan
	if (m_RBD && !m_LBD && !kCTRL && !kSHIFT)
	{
		float f  = (float)u_deg2rad(-m_yRot + 90);
		float dx = -(float)(Ldelta.x) * 16;
		float dy = (float)(Ldelta.y) * 16;
		m_Eye.y += float(sin(f) * dx + cos(f) * dy);
		m_Eye.x += float(cos(f) * dx - sin(f) * dy);

		Refresh = TRUE;
	}

	//	up/dn
	if (m_RBD && m_LBD && !kCTRL && !kSHIFT)
	{
		m_Eye.z -= (float)(Rdelta.y) * 32;

		Refresh = TRUE;
	}

	if (Refresh)
	{
		InvalidateRect(NULL, FALSE);
	}

	if (UpdStatus)
	{
		UpdateStatusBar();
	}

	m_LDP = point;
	m_RDP = point;
}
Beispiel #5
0
void CEasyGenView::OnLButtonDown(UINT nFlags, CPoint point)
{
	CEasyGenDoc *pDoc = GetDocument();
	S_POSINFO   inf;
	CTris       *t;
	CNmVec3     p;
	int         tab;

	m_LDP = point;

	BOOL kCTRL  = nFlags & MK_CONTROL;
	BOOL kSHIFT = nFlags & MK_SHIFT;

	BOOL Refresh = FALSE;

	int mod = pDoc->GetModifier();

	switch (tab = pDoc->GetActiveTab())
	{
	case (TAB_GRID):
		break;
	case (TAB_MODIFIER):

		// Get a vertex to drag(CTRL+SHIFT+LeftBut)
		if (kCTRL && kSHIFT)
		{
			if (GetXYZ(point, p))
			{
				if (g_Grid.GetInfo(p.x, p.y, &inf))
				{
					m_VertexGot = g_Grid.GetK(inf.i, inf.j);
				}
			}
		}

		// Exclude triangle from export | to prevent erroneus exclusion
		if (!kCTRL && kSHIFT && g_Grid.OptionExcludedTrisGet())
		{
			if (GetXYZ(point, p))
			{
				t = g_Grid.GetTris(g_Grid.GetTris(p.x, p.y));

				if (t)
				{
					t->SetExcluded(!t->GetExcluded());
					pDoc->m_bInvalidateGridColor = TRUE;
					Refresh                      = TRUE;
				}
			}
		}

		break;
	case (TAB_ALPHAMAP):
		int curindex;

		curindex = g_AlphamapMan.GetCurSel();

		// paint the alphamap (CTRL+SHIFT+LeftBut)
		if (kCTRL && kSHIFT && curindex != -1)
		{
			if (GetXYZ(point, p))
			{
				if (g_Grid.GetInfo(p.x, p.y, &inf))
				{
					m_VertexGot = g_Grid.GetK(inf.i, inf.j);
//					g_Grid.SetAlphaIndex(m_VertexGot, curindex );
					g_Grid.PaintAlphaIndex(inf.i, inf.j, pDoc->m_dwPaintRadius, curindex);
					Refresh = TRUE;
				}
			}
		}

		int indexgot;

		// copy alphamap index (SHIFT+LeftBut)
		if (!kCTRL && kSHIFT)
		{
			if (GetXYZ(point, p))
			{
				if (g_Grid.GetInfo(p.x, p.y, &inf))
				{
					m_VertexGot = g_Grid.GetK(inf.i, inf.j);
					indexgot    = g_Grid.GetAlphaIndex(m_VertexGot);
					if (indexgot != g_AlphamapMan.GetCurSel())
					{
						g_AlphamapMan.SetCurSel(indexgot);
						pDoc->UpdateFormView(TAB_ALPHAMAP);
					}
				}
			}
		}

		break;
	case (TAB_MODELS):

		// MD3 - Selecting
		if (!kCTRL && kSHIFT)
		{
			CNmVec3  ray, dummy;
			float    md3_dist, hitterra_dist;
			bool     hitterra;
			S_MD3PTR *oldh = m_Md3Highlight;
			S_MD3PTR *hit_md3;

			if (GetRay(point, ray))
			{
				if (g_Md3Man.GetByRay(m_Eye, ray, hit_md3, md3_dist))
				{
					// check if is covered by terrain!!!
					hitterra = g_Grid.GetDistanceTrisRay(m_Eye, ray, dummy, hitterra_dist);

					if (!hitterra)
					{
						m_Md3Highlight = hit_md3;
					}
					else if (hitterra_dist > md3_dist)
					{
						m_Md3Highlight = hit_md3;
					}
				}
			}

			if (m_Md3Highlight != oldh)
			{
				Refresh = TRUE;
			}
		}

		break;
	}

	// rotate tris (CTRL+LeftBut)
	if ((tab == TAB_GRID || tab == TAB_MODIFIER || tab == TAB_ALPHAMAP) &&
	    mod == MOD_NONE && kCTRL && !kSHIFT)
	{
		if (GetXYZ(point, p))
		{
			if (g_Grid.GetInfo(p.x, p.y, &inf))
			{
				int          i, j, k;
				int          mt1;
				S_FACEDATAEX *f;

				mt1  = g_Grid.GetTris(p.x, p.y);
				mt1 &= ~1;

				k = mt1 / 2;
				i = k % g_Grid.GetCellsX();
				j = k / g_Grid.GetCellsX();

				f = g_Grid.GetFace(k);

				if ((f->flags & FACE_FL_TRISINV))
				{
					f->flags &= ~FACE_FL_TRISINV;
				}
				else
				{
					f->flags |= FACE_FL_TRISINV;
				}

				g_Grid.FaceOrientateTris(i, j, f->flags & FACE_FL_TRISINV);

				Refresh = TRUE;
			}
		}
	}

	if (Refresh)
	{
		InvalidateRect(NULL, FALSE);
	} //

	SetCapture();

	CView::OnLButtonDown(nFlags, point);
}