#include "StdAfx.h" #include ".\mapportalscenenode.h" #include "ResourceManager.h" //#include "CameraManager.h" #include "SceneManager.h" //#include "LightAgent.h" //#include "FogAgent.h" #include "NifAnimationInfo.h" //#include "ObjectNameCard.h" #include "StageScript.h" #include "GameResourceManager.h" #include "RenderSystem.h" #include "NaviMesh.h" // #include "ObjectManager.h" // #include "hero.h" // #include "PartyManager.h" #include "Application.h" cMapPortalSceneNode::cMapPortalSceneNode( eType type ) : cManagedStaticSceneNode(type) , mpNameCard(0) { mPortalIdx = 0; mPosScriptIdx = 0; mNameHeight = 0; } cMapPortalSceneNode::~cMapPortalSceneNode() { ClearCollectInfo(); // SAFE_DELETE(mpNameCard); } void cMapPortalSceneNode::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { // /// ¹Ýº¹ µ¿ÀÛÀ» °¡Áø °æ¿ì ¿£Áø ³ëµå¸¦ ó¸® // if( mNifAniInfo ) // { // mNeedUpdateTransform = true; // cManagedStaticSceneNode::OnProcess( deltaTime, accumTime ); // // mNifAniInfo->Update( deltaTime, accumTime ); // } // // mPickedByCamera = false; // // if( mAlpha < 0.000001f ) // mCheckFrustum = false; // else // mCheckFrustum = true; } bool cMapPortalSceneNode::Init( cMapPortalSceneNodeParam& param ) { mPosScriptIdx = param.mPosScriptIdx; sStageChangePos* pInfo = STAGESCRIPT->GetPosScriptInfo( mPosScriptIdx ); if( pInfo == 0 ) return false; mNameHeight = pInfo->mNameHeight; /// ÆÄÀÏÀ» ·Îµù param.mPathName += pInfo->mFileName; if( RESOURCEMAN->LoadNIF( param.mPathName.Cstr() ) == false ) { assert( 0 && "failed to load nif file" ); return false; } /// ¸®¼Ò½º °ü¸®ÀڷκÎÅÍ ¿£Áø ³ëµå¸¦ º¹Á¦ NiNode* n = RESOURCEMAN->CloneObjectByName( param.mPathName.Cstr() ); if( n == 0 ) { assert( 0 && "failed to clone node from resource manager" ); return false; } /// »óÀ§ ÃʱâÈ­ mSceneNiNode = n; NiFogProperty* pFog = NiNew NiFogProperty; pFog->SetFog( false ); n->AttachProperty( pFog ); if( cSceneNode::Init( param ) == false ) { return false; } /// create name card // if( pInfo->mTargetInfo ) // { // mpNameCard = new cNameCard; // mpNameCard->SetName( (LPTSTR)GAMERESOURCEMAN->GetMapName( pInfo->mTargetInfo->mMapNumber ), 0xFF19F0A0 ); // } /// ¾Ö´Ï¸ÞÀÌ¼Ç ÄÁÆ®·Ñ·¯ Á¤º¸ ¼öÁý mNifAniInfo->CollectData( n ); if( mNifAniInfo->GetNumberOfControllers() ) { mNifAniInfo->SetAnimType( NiTimeController::APP_INIT ); mNifAniInfo->SetLooping( true ); // mNifAniInfo->Start( THEAPP->GetWorldAccumTime() * 0.001f ); } else { /// ¾Ö´Ï Á¤º¸°¡ ¾ø´Ù¸é ¸Þ¸ð¸® ÇØÁ¦ SAFE_DELETE(mNifAniInfo); } return true; } void cMapPortalSceneNode::AddToVisibleArray() { // if( IsViewNode() == false ) // return; // // cSceneNode::AddToVisibleArray(); // // if( mpNameCard ) // { // NiPoint3 pos = this->GetWorldTranslate(); // pos.z += mNameHeight; // // bool showName = false; // // if( mIsMouseOver == false ) // { // NiPoint3 camPos = CAMERAMAN->GetCurrentNi()->GetWorldTranslate(); // float distCam = (pos - camPos).Length(); // float distHero = distCam; // if( HERO ) // distHero = (pos - HERO->GetPos()).Length(); // // if( distHero < 1500.0f ) // distHero = 1500.0f; // if( distHero > 10000.0f ) // distHero = 10000.0f; // // if( distHero <= 3000.0f ) // showName = true; // } // else // { // showName = true; // } // // if( showName ) // { // float x,y; // cPlane::WorldPtToScreenPt( CAMERAMAN->GetCurrentNi(), pos, x, y, false ); // int ScreenPosX = (int)( x * RENDERSYS->GetScreenWidth() ); // int ScreenPosY = (int)( (1.0f - y) * RENDERSYS->GetScreenHeight() ); // // mpNameCard->Set2DPos( ScreenPosX, ScreenPosY, 0, 0 ); // SCENEMAN->AddPlane( mpNameCard ); // } // } } ////////////////////////////////////////////////////////////////////////// bool cUserPortalSceneNode::Init( cUserPortalSceneNodeParam& param ) { mPosScriptIdx = param.mPosScriptIdx; mPortalIdx = param.mPortalIdx; mOwnerIdx = param.mOwnerIdx; if( mPortalIdx == 0 ) return false; sStageChangePos* pInfo = STAGESCRIPT->GetPosScriptInfo( mPosScriptIdx ); if( pInfo == 0 ) return false; mNameHeight = pInfo->mNameHeight; if( RESOURCEMAN->LoadNIF( param.mPathName.Cstr() ) == false ) { assert( 0 && "failed to load nif file" ); return false; } /// ¸®¼Ò½º °ü¸®ÀڷκÎÅÍ ¿£Áø ³ëµå¸¦ º¹Á¦ NiNode* n = RESOURCEMAN->CloneObjectByName( param.mPathName.Cstr() ); if( n == 0 ) { assert( 0 && "failed to clone node from resource manager" ); return false; } /// »óÀ§ ÃʱâÈ­ mSceneNiNode = n; NiFogProperty* pFog = NiNew NiFogProperty; pFog->SetFog( false ); n->AttachProperty( pFog ); float height = 0.0f; NAVIMESH->CalcHeight( &height, param.mTranslate.x, param.mTranslate.y ); param.mTranslate.z = height; if( cSceneNode::Init( param ) == false ) { return false; } // mpNameCard = new cNameCard; // mpNameCard->SetName( (LPTSTR)GAMERESOURCEMAN->GetMapName( pInfo->mMapNumber ), 0xFF19F0A0 ); /// ¾Ö´Ï¸ÞÀÌ¼Ç ÄÁÆ®·Ñ·¯ Á¤º¸ ¼öÁý mNifAniInfo->CollectData( n ); if( mNifAniInfo->GetNumberOfControllers() ) { mNifAniInfo->SetAnimType( NiTimeController::APP_INIT ); mNifAniInfo->SetLooping( true ); // mNifAniInfo->Start( THEAPP->GetWorldAccumTime() * 0.001f ); } else { /// ¾Ö´Ï Á¤º¸°¡ ¾ø´Ù¸é ¸Þ¸ð¸® ÇØÁ¦ SAFE_DELETE(mNifAniInfo); } return true; } bool cUserPortalSceneNode::Pick( const cRay& ray ) { // /// party or owner check // if( PARTYMAN->IsHeroParty( mOwnerIdx ) == false ) // { // if( HERO->GetObjectID() != mOwnerIdx ) // return false; // } return cMapPortalSceneNode::Pick( ray ); }