⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 engineobject.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

BOOL CEngineObject::Attach(CEngineObject* pToObject,char* szObjectName)
{
	if(m_GXOHandle == NULL)		return FALSE;

	return g_pExecutive->GXOAttach(m_GXOHandle,pToObject->m_GXOHandle,szObjectName);
}

void CEngineObject::Detach(CEngineObject* pChildObject)
{
	if(m_GXOHandle == NULL)		return;

	BOOL rt = g_pExecutive->GXODetach(m_GXOHandle,pChildObject->m_GXOHandle);
}

void CEngineObject::DrawFitInViewPort(int ViewPortNum,float fFOV)
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->SetCameraFitGXObject(m_GXOHandle,1,1000,fFOV,ViewPortNum);
	g_pExecutive->GetGeometry()->SetAmbientColor(ViewPortNum,0xffffffff);
	g_pExecutive->GetGeometry()->BeginRender(ViewPortNum,0xffff0000,BEGIN_RENDER_FLAG_DONOT_CLEAR_FRAMEBUFFER);
	g_pExecutive->GXORender(m_GXOHandle);
	g_pExecutive->GetGeometry()->EndRender();
}

void CEngineObject::SetScale(VECTOR3* pScale)
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXOSetScale(m_GXOHandle,pScale);
}

void CEngineObject::GetScale(VECTOR3* pScale)
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXOGetScale(m_GXOHandle,pScale);
}

BOOL CEngineObject::ChangePart(int PartNum,char* pFileName)
{
	if(m_GXOHandle == NULL)		return FALSE;

	if(m_pObject->m_EngineObjectType == eEngineObjectType_Character)
		DIRECTORYMGR->SetLoadMode(eLM_Character);
	else if(m_pObject->m_EngineObjectType == eEngineObjectType_Monster)
		DIRECTORYMGR->SetLoadMode(eLM_Monster);
	else if(m_pObject->m_EngineObjectType == eEngineObjectType_Npc)
		DIRECTORYMGR->SetLoadMode(eLM_Npc);
	else if(m_pObject->m_EngineObjectType == eEngineObjectType_Effect)
		DIRECTORYMGR->SetLoadMode(eLM_Effect);
	else if(m_pObject->m_EngineObjectType == eEngineObjectType_Weapon)
		DIRECTORYMGR->SetLoadMode(eLM_Character);

	BOOL rt = g_pExecutive->GXOReplaceModel(m_GXOHandle,PartNum,pFileName);

	
		DIRECTORYMGR->SetLoadMode(eLM_Root);
	return rt;
}

void CEngineObject::ApplyHeightField(BOOL bApply)
{
	if(m_GXOHandle == NULL)		return;

	m_bApplyHeight = bApply;
	if(g_bFixHeight)
		return;
	
	if(bApply)
		g_pExecutive->GXOEnableHFieldApply(m_GXOHandle);
	else
		g_pExecutive->GXODisableHFieldApply(m_GXOHandle);
}

void CEngineObject::EnableShadow(BOOL bShadow)
{
	if(m_GXOHandle == NULL)		return;

	if(bShadow)
		g_pExecutive->EnableSendShadow(m_GXOHandle);
	else
		g_pExecutive->DisableSendShadow(m_GXOHandle);
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->EnableShadow(bShadow);
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->EnableShadow(bShadow);
	PTRLISTSEARCHEND
}

void CEngineObject::SetAlpha(float Alpha)
{
	if(m_GXOHandle == NULL)		return;

	DWORD dAlpha = (DWORD)(Alpha * 255);
	if(dAlpha == 0)
		dAlpha = 1;
	
	g_pExecutive->SetAlphaFlag(m_GXOHandle,dAlpha);
	
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->SetAlpha(Alpha);
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->SetAlpha(Alpha);
	PTRLISTSEARCHEND
}

void CEngineObject::EnablePick()
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->EnablePick(m_GXOHandle);
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->EnablePick();
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->EnablePick();
	PTRLISTSEARCHEND
}

void CEngineObject::DisablePick()
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->DisablePick(m_GXOHandle);
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->DisablePick();
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->DisablePick();
	PTRLISTSEARCHEND
}

void CEngineObject::EnableSelfIllumin()
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXOEnableSelfIllumin(m_GXOHandle);
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->EnableSelfIllumin();
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->EnableSelfIllumin();
	PTRLISTSEARCHEND
}

void CEngineObject::DisableSelfIllumin()
{
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXODisableSelfIllumin(m_GXOHandle);
	
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->DisableSelfIllumin();
	PTRLISTSEARCHEND
	
	PTRLISTSEARCHSTART(m_AttachedDress,CEngineObject*,pDress)
		pDress->DisableSelfIllumin();
	PTRLISTSEARCHEND
}

BOOL CEngineObject::IsVisible()
{
	if(m_GXOHandle == NULL)		return FALSE;

	return g_pExecutive->IsInViewVolume(m_GXOHandle);
}

void CEngineObject::InitializeIllusionEffect(DWORD MaxIllusionFrame,void* pMtl)
{
	return;
	if(m_GXOHandle == NULL)		return;

	/*
	void* pMtlHandle =	NULL;
	MATERIAL	mtl;	
	memset(&mtl, 0, sizeof(mtl));
	mtl.dwDiffuse	=	0xffffffff;
	mtl.dwAmbient	=	0xffffffff;
	mtl.dwFlag = TRANSP_TYPE_ADDITIVE;
    lstrcpy(mtl.szDiffuseTexmapFileName,"d:\\work\\CWorking\\3ddata\\Effect\\mo2.tga");	// 捞 概磐府倔捞 荤侩且 咆胶媚 颇老
	
	// 概磐府倔 积己. 鞘夸绝霸登搁 馆靛矫 秦力秦具茄促.
	pMtlHandle = g_pExecutive->GetRenderer()->CreateMaterial( &mtl,NULL,NULL, 0);
	*/
	BOOL rt = g_pExecutive->GXOInitializeIllusionEffect(m_GXOHandle,MaxIllusionFrame,"_ILLUSION_MESH",pMtl,0);
}
void CEngineObject::BeginIllusionEffect()
{
	return;
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXOBeginIllusionEffect(m_GXOHandle);
}
void CEngineObject::EndIllusionEffect()
{
	return;
	if(m_GXOHandle == NULL)		return;

	g_pExecutive->GXOEndIllusionEffect(m_GXOHandle);
}


DWORD CEngineObject::GetAnimationTime(DWORD MotionNum)
{
	if(m_GXOHandle == NULL)		return 1;
	if(MotionNum == (DWORD)-1)	return 0;

	ANIINFO* AniInfo = m_AniInfo->GetAniInfo(MotionNum);
	MOTION_DESC pMotionDesc;
	g_pExecutive->GXOGetMotionDesc(m_GXOHandle,&pMotionDesc,AniInfo->EngineMotionIndex,0);

	DWORD lastFrame = pMotionDesc.dwLastFrame < AniInfo->EndFrame ?
							pMotionDesc.dwLastFrame : AniInfo->EndFrame;
	DWORD startFrame = AniInfo->StartFrame;

	if(startFrame > lastFrame)
	{
		MessageBox(NULL,"StartFrame is bigger than LastFrame. Check chi File",0,0);
		return 0;
	}
	DWORD frame = lastFrame - startFrame;
	
	return (DWORD)(frame * gTickPerFrame);
}

void CEngineObject::RandMotionFrame()
{
	if(m_GXOHandle == NULL)		return;

	DWORD MotionNum = m_CurMotionNum;
	MOTION_DESC pMotionDesc;
	g_pExecutive->GXOGetMotionDesc(m_GXOHandle,&pMotionDesc,MotionNum,0);

	ANIINFO* AniInfo = m_AniInfo->GetAniInfo(MotionNum);
	DWORD aniinfo = AniInfo->EndFrame - AniInfo->StartFrame;

	DWORD frame = pMotionDesc.dwLastFrame < aniinfo ? 
					pMotionDesc.dwLastFrame : aniinfo;
	
	if(pMotionDesc.dwLastFrame == 0)
	{
		if(AniInfo->EndFrame == (WORD)-1)
		{
			g_pExecutive->GXOGetMotionDesc(m_GXOHandle,&pMotionDesc,AniInfo->EngineMotionIndex,0);
			frame = pMotionDesc.dwLastFrame - AniInfo->StartFrame;
		}
		else
			frame = aniinfo;
	}

	DWORD rrr = rand() % frame;
	g_pExecutive->GXOSetCurrentFrame(m_GXOHandle,rrr);
}
void CEngineObject::SetDirection(VECTOR3* pDir)
{
	if(m_GXOHandle == NULL)		return;

	if(pDir->x == 0 && pDir->y == 0 && pDir->z == 0)
		return;

	VECTOR3 ypr;
	ypr.x = (float)(atan2(pDir->y, roughGetLength(pDir->x,pDir->z)));
	ypr.y = -(float)(atan2(pDir->z, pDir->x) + gPHI/2.f);
	ypr.z = 0;

	g_pExecutive->GXOSetDirectionFPSStyle(m_GXOHandle,&ypr);
}

void CEngineObject::AttachToCamera(float fDist)
{
	if(m_GXOHandle == NULL)		return;
	g_pExecutive->GXOAttachCameraFront(m_GXOHandle,fDist);
}
void CEngineObject::DetachFromCamera()
{
	if(m_GXOHandle == NULL)		return;
	g_pExecutive->GXODetachCameraFront(m_GXOHandle);
}

//////////////////////////////////////////////////////////////////////////

BOOL CEngineObject::AttachWeapon(CEngineObject* pWeaponObject,char* szObjectName)
{
	BOOL rt = pWeaponObject->Attach(this,szObjectName);
	if(rt)
		m_AttachedWeapon.AddHead(pWeaponObject);

	return rt;
}

BOOL CEngineObject::AttachDress(CEngineObject* pDressObject,char* szObjectName)
{
	BOOL rt = pDressObject->Attach(this,szObjectName);
	if(rt)
		m_AttachedDress.AddHead(pDressObject);

	return rt;
}

void CEngineObject::RemoveAllAttachedWeapon()
{
	CEngineObject* pAttachedWeapon;
	while(pAttachedWeapon = (CEngineObject*)m_AttachedWeapon.RemoveTail())
	{
		Detach(pAttachedWeapon);
		delete pAttachedWeapon;		
	}	
}

void CEngineObject::RemoveAllAttachedDress()
{
	CEngineObject* pDressObject;
	while(pDressObject = (CEngineObject*)m_AttachedDress.RemoveTail())
	{
		Detach(pDressObject);
		delete pDressObject;		
	}	
}

void CEngineObject::StartWeaponIllusion(DWORD MaxIllusionFrame,void* pMtl)
{
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->InitializeIllusionEffect(MaxIllusionFrame,pMtl);
		pWeapon->BeginIllusionEffect();
	PTRLISTSEARCHEND
}
void CEngineObject::EndWeaponIllusion()
{
	PTRLISTSEARCHSTART(m_AttachedWeapon,CEngineObject*,pWeapon)
		pWeapon->EndIllusionEffect();
	PTRLISTSEARCHEND
}

void CEngineObject::LinkTo(CEngineObject* pParent)
{
	if(pParent != m_pObjectLinkTo)
	{
		if(m_pObjectLinkTo)
			m_pObjectLinkTo->m_LinkedObject.Remove(this);

		if(pParent)
			pParent->m_LinkedObject.AddTail(this);

		m_pObjectLinkTo = pParent;
	}
}


DWORD __stdcall MHPlayerPROC(I4DyuchiGXExecutive* pExecutive, GXMAP_OBJECT_HANDLE gxh, DWORD msg, int arg1, int arg2, void* pData)
{
	CEngineObject* pObject = (CEngineObject*)pData;
	if(pObject == NULL)
		return 0;

	if(arg1)
		pObject->Animate(arg1);

	if(pObject->m_pObject)
		pObject->m_pObject->Process();

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -