Example #1
0
CObjectBase* CObjectManager::FindObjectBase(const CStrW& objectname)
{
	ENSURE(!objectname.empty());

	// See if the base type has been loaded yet:

	std::map<CStrW, CObjectBase*>::iterator it = m_ObjectBases.find(objectname);
	if (it != m_ObjectBases.end())
		return it->second;

	// Not already loaded, so try to load it:

	CObjectBase* obj = new CObjectBase(*this);

	VfsPath pathname = VfsPath("art/actors/") / objectname;

	if (obj->Load(pathname))
	{
		m_ObjectBases[objectname] = obj;
		return obj;
	}
	else
		delete obj;

	LOGERROR(L"CObjectManager::FindObjectBase(): Cannot find object '%ls'", objectname.c_str());

	return 0;
}
// 全オブジェクト破棄
void CTitleScene::FinObj() {
	CObjectBase* pObj = m_pObj;
	CObjectBase* pNext;
	for (; pObj; pObj = pNext) {
		pNext = pObj->GetNext();
		pObj->Fin();
	}
}
// 全オブジェクト更新
void CTitleScene::UpdateObj() {
	CObjectBase* pObj = m_pObj;
	CObjectBase* pNext;
	for (; pObj; pObj = pNext) {
		pNext = pObj->GetNext();
		pObj->Update();
	}

	m_pCamera->PostUpdate();	// カメラ更新
}
// 全オブジェクト描画
void CTitleScene::DrawObj() {
	m_pCamera->PreDraw();		// カメラ反映

								// 不透明部分描画
	CObjectBase* pObj = m_pObj;
	for (; pObj; pObj = pObj->GetNext()) {
		if (pObj->GetDamage() && (m_dwTick & 8)) {
			continue;
		}
		pObj->Draw();
	}

	// 半透明部分描画
	LPDIRECT3DDEVICE9 pD = CGraphics::GetDevice();
	pD->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
	pD->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
	pD->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
	pD->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
	pObj = m_pObj;
	for (; pObj; pObj = pObj->GetNext()) {
		if (pObj->GetDamage() && (m_dwTick & 8)) {
			continue;
		}
		pObj->DrawAlpha();
	}
	pD->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
	pD->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
}
Example #5
0
CUnit* CUnit::Create(const CStrW& actorName, uint32_t seed, const std::set<CStr>& selections, CObjectManager& objectManager)
{
	CObjectBase* base = objectManager.FindObjectBase(actorName);

	if (! base)
		return NULL;

	std::set<CStr> actorSelections = base->CalculateRandomVariation(seed, selections);

	std::vector<std::set<CStr> > selectionsVec;
	selectionsVec.push_back(actorSelections);

	CObjectEntry* obj = objectManager.FindObjectVariation(base, selectionsVec);

	if (! obj)
		return NULL;

	return new CUnit(obj, objectManager, actorSelections, seed);
}
CObjectBase* CObjectBase::createObject(const string& name)
{
    CObjectBase* pObject = NULL;
    CCDictionary* pDict = GAME_OJBECT_MANAGER->getObjectByName(name);
    if (!pDict)
    {
        return NULL;
    }
    
    CCString* strCateName = dynamic_cast<CCString*>(pDict->objectForKey("CateName"));
    if (NULL == strCateName)
    {
        return NULL;
    }

    pObject = OBJECT_FACTORY->createInstance(strCateName->getCString());
    
    if (pObject)
    {
        pObject->init(pDict);
    }
    return pObject;
}
// 全オブジェクト初期化
void CTitleScene::InitObj() {
	CObjectBase* pObj = m_pObj;
	for (; pObj; pObj = pObj->GetNext()) {
		pObj->Init();
	}
}
/*=================================================================================================*/
CObjectBase* CObjectManager::MakeObject( const OBJECT_DATA _ObjectData , const std::string _FilePass )
{

	CObjectBase* pObject = nullptr;
	CGimmickBase* pGimmick = nullptr;
	bool GimmickFlag = false;
	

	std::string ObjectName;
	ObjectName = _ObjectData.Name;

	if( false ){}

	// 主人公
	else if( _ObjectData.Name == "Player" ){ pObject = m_pPlayer = new CPlayer(); }

	// オブジェクト
	else if( _ObjectData.Name == "Box"       ){ pObject = new CBox();			   }
	else if( _ObjectData.Name == "Rope"      ){ pObject = new CRope();             }
	else if( _ObjectData.Name == "ChainBox"  ){ pObject = new CChainBox();         }
	else if( _ObjectData.Name == "Fence"     ){ pObject = new CFence();			   }
	else if( _ObjectData.Name == "Bridge"    ){ pObject = new CBridge();		   }
	else if( _ObjectData.Name == "Light"     ){ pObject = new CFluorescentLight(); }
	else if( _ObjectData.Name == "BreakWall" ){ pObject = new CBreakWall();        }

	// ギミック
	else if( _ObjectData.Name == "Switch"				){ pObject = pGimmick = new CSwitch();				GimmickFlag = true; }
	else if( _ObjectData.Name == "WireMesh"				){ pObject = pGimmick = new CWireMesh();			GimmickFlag = true; }
	else if( _ObjectData.Name == "LiftX"				){ pObject = pGimmick = new CLiftX();				GimmickFlag = true; }
	else if( _ObjectData.Name == "LiftY"				){ pObject = pGimmick = new CLiftY();				GimmickFlag = true; }
	else if( _ObjectData.Name == "Balance"				){ pObject = pGimmick = new CBalance();				GimmickFlag = true; }
	else if( _ObjectData.Name == "Stairs"				){ pObject = pGimmick = new CStairs();				GimmickFlag = true; }
	else if( _ObjectData.Name == "Conveyer"				){ pObject = pGimmick = new CConveyer();			GimmickFlag = true; }
	else if( _ObjectData.Name == "SurveillanceCamera"	){ pObject = pGimmick = new CSurveillanceCamera();	GimmickFlag = true; }
	else if( _ObjectData.Name == "ClueLever"			){ pObject = pGimmick = new CClueLever();			GimmickFlag = true; }

	// 敵
	else if( _ObjectData.Name == "Fool"	  ){ pObject = new CFool();   }
	else if( _ObjectData.Name == "Tackle" ){ pObject = new CTackle(); }

	// 部屋
	else if( _ObjectData.Name == "TutorialRoom"   ){ pObject = new CRoomManager( CGame::TUTORIAL_ROOM ); m_ErrorCheckCounter++; }
	else if( _ObjectData.Name == "Passageway"	  ){ pObject = new CRoomManager( CGame::PASSAGEWAY    ); m_ErrorCheckCounter++; }
	else if( _ObjectData.Name == "Room1"		  ){ pObject = new CRoomManager( CGame::ROOM1         ); m_ErrorCheckCounter++; }
	else if( _ObjectData.Name == "Room2"		  ){ pObject = new CRoomManager( CGame::ROOM2         ); m_ErrorCheckCounter++; }
	else if( _ObjectData.Name == "Room3"		  ){ pObject = new CRoomManager( CGame::ROOM3         ); m_ErrorCheckCounter++; }
	else if( _ObjectData.Name == "Room4"		  ){ pObject = new CRoomManager( CGame::ROOM4         ); m_ErrorCheckCounter++; }


	// ここで座標などをセット
	pObject->Init( _ObjectData );
	pObject->SetActor( CAPP->GetCPhysX()->CreateActor( pObject->GetActorData() ) );
	
	m_pPhysX->SetActorCollisionGroup( pObject->GetActor() , CPhysX::CG_DEFAULT );

	std::string String = ( boost::format( "Name : %-22sのオブジェクトを作成しました\n" ) % pObject->GetName().c_str() ).str();
	DEBUG->PrintConsole( String , CDebug::ConObjectMake );
	
	pObject->DiscreteInit();


	// ギミックを専用のベクターに格納する
	if( GimmickFlag ){ m_GimmickList.push_back( pGimmick ); }

	return pObject;

}
Example #9
0
/////////////////////////////////////////////////////////////////////////
/// CRenderCommand
////////////////////////////////////////////////////////////////////////
TRESULT CRenderCommand::ProcessCommand( OCRender* pRenderInterface )
{
	if( NULL == pRenderInterface || false == IsValid() )
		return RE_FAILED;

	switch( GetCommand() )
	{
	case RENDER_COMMAND_START:
		{
			pRenderInterface->SetCurrnetRenderPhase( RENDER_PHASE_STARTED );
		}		
		break;
	
	case RENDER_COMMAND_CAMERA_SETTING:
		{
			if( !pRenderInterface->IsRenderStarted() )
				return RE_FAILED;

			CObjectBase* camera = ObjectFactory::FindObject( GetObjectID() );
			if( camera )camera->Draw();
		}
		break;

	case RENDER_COMMAND_BEGIN_DRAW:
		{
			if( !pRenderInterface->IsRenderStarted() )
				return RE_FAILED;

			if( !SUCCEEDED(pRenderInterface->BeginDraw()) )
				assert(0 && !L"Begin Draw failed");
		}
		break;

	case RENDER_COMMAND_DRAW:
		{
			if( !pRenderInterface->IsRenderStarted() )
				return RE_FAILED;

			CObjectBase* pObjectToDraw = ObjectFactory::FindObject( GetObjectID() );
			if( pObjectToDraw )
			{
				pObjectToDraw->Draw();
			}
		}
		break;

	case RENDER_COMMAND_END_DRAW:
		{
			if( !pRenderInterface->IsRenderStarted() )
				return RE_FAILED;

			OCCamera* camera = ObjectFactory::StaticFindObject<OCCamera>( GetObjectID() );
			if( camera )
			{
				pRenderInterface->EndDraw( camera->GetSrcRect(), camera->GetDestRect() );
			}
		}
		break;

	case RENDER_COMMAND_FINISH:
		{
			pRenderInterface->SetCurrnetRenderPhase( RENDER_PHASE_FINISHED );			
		}		
		break;
	
	default:
		{			
			return RE_FAILED;
		}
		
	}


	// This Command was successfully done. Reset it
	Reset();	

	return RE_SUCCEED;
}
Example #10
0
void CHalos::Draw( bln is_stepTwo )
{
    if( _o_halos.Size() == 0 || _o_mats.Size() < 1 || (!_is_occlude && _visibleHalos == 0) || !is_stepTwo )
    {
        return;
    }

    ASSUME( _i_vbDraw );

    if( _is_occlude )
    {
        ui32 queriesCount = 0;

        for( ui32 halo = 0; halo < _o_halos.Size(); ++halo )
        {
            if( !_o_halos[ halo ].testObject )
            {
                continue;
            }

            CObjectBase *obj = _o_halos[ halo ].testObject;
            if( !obj->IsInFrustumGet() || !obj->IsGlowingGet() )
            {
                continue;
            }

            if( _o_oqueries.Size() <= queriesCount )
            {
                ASSUME( _o_oqueries.Size() + 1 > queriesCount );
                _o_oqueries.Resize( _o_oqueries.Size() + 1 );

                D3D11_QUERY_DESC o_queryDesc;
                o_queryDesc.Query = D3D11_QUERY_OCCLUSION;
                o_queryDesc.MiscFlags = 0;
                DXHRCHECK( RendererGlobals::i_Device->CreateQuery( &o_queryDesc, _o_oqueries[ queriesCount ].i_query.AddrModifiable() ) );
            }

            _o_oqueries[ queriesCount ].index = halo;
        
            RendererGlobals::i_ImContext->Begin( _o_oqueries[ queriesCount ].i_query );
            obj->Draw( true );
            RendererGlobals::i_ImContext->End( _o_oqueries[ queriesCount ].i_query );

            ++queriesCount;
        }

        if( !queriesCount )
        {
            return;
        }

        f32 screenSizePixels = RendererGlobals::RenderingWidth * RendererGlobals::RenderingHeight;

        D3D11_MAPPED_SUBRESOURCE o_sr;
        DXHRCHECK( RendererGlobals::i_ImContext->Map( _i_vbDraw, 0, D3D11_MAP_WRITE_DISCARD, 0, &o_sr ) );
		CVecArr < byte > target( (byte *)o_sr.pData, 0, sizeof( vec4 ) * 4096 );

        _visibleHalos = 0;

        for( ui32 query = 0; query < queriesCount; ++query )
        {
            UINT64 pixels;
            while( RendererGlobals::i_ImContext->GetData( _o_oqueries[ query ].i_query, &pixels, sizeof(pixels), 0 ) != S_OK )
            {
            }
            if( !pixels )
            {
                continue;
            }

            ui32 index = _o_oqueries[ query ].index;

            f32 onScreenIntensity = (f32)pixels / screenSizePixels;
            f32 haloIntensity = _o_halos[ index ].intensity * onScreenIntensity;
    
			target.Append( (byte *)&_o_halos[ index ].o_pos, sizeof(vec3) );
			target.Append( (byte *)&haloIntensity, sizeof(f32) );
			target.Append( (byte *)&_o_halos[ index ].o_color, sizeof(f128color) );

            ++_visibleHalos;
        }

        RendererGlobals::i_ImContext->Unmap( _i_vbDraw, 0 );
    }

    if( !_visibleHalos )
    {
        return;
    }

    for( ui32 mat = 0; mat < _o_mats.Size(); ++mat )
    {
        if( !_o_mats[ mat ].is_geoShaderDefined || !_o_mats[ mat ].is_enabled )
        {
            continue;
        }

        if( !_o_mats[ mat ].rstates )
        {
            continue;
        }

        RendererGlobals::i_ImContext->IASetInputLayout( _o_mats[ mat ].i_lo );

        RendererGlobals::MainBloom.RenderingStatesSet( _o_mats[ mat ].rstates );
    
        D3D11_MAPPED_SUBRESOURCE o_sr;
        DXHRCHECK( RendererGlobals::i_ImContext->Map( RendererGlobals::ai_VSShaderRegisters[ OBJECT_DATA_BUF ], 0, D3D11_MAP_WRITE_DISCARD, 0, &o_sr ) );
        m4x4 o_w = m4x4( _o_w );
        LiceMath::M4x4TransposeInplace( &o_w );
        _MemCpy( o_sr.pData, &o_w, sizeof(m4x4) );
        RendererGlobals::i_ImContext->Unmap( RendererGlobals::ai_VSShaderRegisters[ OBJECT_DATA_BUF ], 0 );
    
        ID3D11Buffer *bufs[ 2 ] = { _o_mats[ mat ].po_geo->i_vbufs[ 0 ], _i_vbDraw };
        ui32 offsets[ 2 ] = {};
        ui32 strides[ 2 ] = { _o_mats[ mat ].po_geo->strides[ 0 ], sizeof(vec3) + sizeof(f32) + sizeof(f128color) };
        RendererGlobals::i_ImContext->IASetVertexBuffers( 0, 2, bufs, strides, offsets );

        RendererGlobals::SetPrimitiveTopology( _o_mats[ mat ].po_geo->topo );

        RendererGlobals::i_ImContext->OMSetBlendState( _i_blend, 0, 0xFFFFFFFF );

        ShadersManager::ApplyShader( _o_mats[ mat ].shader, false );
    
        RendererGlobals::i_ImContext->DrawInstanced( 4, _visibleHalos, 0, 0 );

        RendererGlobals::UnbindVBuffers( 0, 2 );
    }
}