Пример #1
0
void Framework3D::ResetRenderer() {
  XTRACE_FUNCTION;

  if (m_Renderer->Reset()) {
    // TODO: RefreshDisplay also resets the renderer--could that be problematic?
    WB_MAKE_EVENT(RefreshDisplay, NULL);
    WB_DISPATCH_EVENT(GetEventManager(), RefreshDisplay, this);
  } else {
    // Defer the command
    WB_MAKE_EVENT(ResetRenderer, NULL);
    WB_QUEUE_EVENT(GetEventManager(), ResetRenderer, this);
  }
}
Пример #2
0
void WBCompEldMesh::Load(const IDataStream& Stream) {
  XTRACE_FUNCTION;

  ASSERT(m_Mesh);

  const uint Version = Stream.ReadUInt32();

  if (Version >= VERSION_MESHNAME) {
    const SimpleString MeshName = Stream.ReadString();
    if (MeshName != m_MeshName) {
      SetMesh(MeshName);
    }
  }

  if (Version >= VERSION_TEXTURENAME) {
    const SimpleString TextureName = Stream.ReadString();
    if (TextureName != m_TextureName) {
      SetTexture(TextureName);
    }
  }

  if (Version >= VERSION_MESHSCALE) {
    Stream.Read(sizeof(Vector), &m_Mesh->m_Scale);
  }

  if (Version >= VERSION_HIDDEN) {
    m_Hidden = Stream.ReadBool();
  }

  if (Version >= VERSION_ANIMATION) {
    const int AnimationIndex = Stream.ReadInt32();
    const float AnimationTime = Stream.ReadFloat();
    const int AnimationEndBehavior = Stream.ReadInt32();
    const float AnimationPlayRate =
        (Version >= VERSION_ANIMRATE) ? Stream.ReadFloat() : 1.0f;

    if (m_Mesh->IsAnimated()) {
      WB_MAKE_EVENT(SetAnim, GetEntity());
      WB_SET_AUTO(SetAnim, Int, AnimationIndex, AnimationIndex);
      WB_SET_AUTO(SetAnim, Float, AnimationTime, AnimationTime);
      WB_SET_AUTO(SetAnim, Int, AnimationEndBehavior, AnimationEndBehavior);
      WB_SET_AUTO(SetAnim, Float, AnimationPlayRate, AnimationPlayRate);
      WB_QUEUE_EVENT(GetEventManager(), SetAnim, GetEntity());
    }
  }
}
/*virtual*/ void WBActionEldSetLight::Execute()
{
	WBAction::Execute();

	STATIC_HASHED_STRING( EventOwner );
	WBEntity* const pEntity = WBActionStack::Top().GetEntity( sEventOwner );

	if( pEntity )
	{
		if( m_AddLight )
		{
			// Queue because if we do this during spawning, the world won't accept a light yet.
			WB_MAKE_EVENT( AddLight, pEntity );
			WB_QUEUE_EVENT( WBWorld::GetInstance()->GetEventManager(), AddLight, pEntity );
		}
		else
		{
			WB_MAKE_EVENT( RemoveLight, pEntity );
			WB_DISPATCH_EVENT( WBWorld::GetInstance()->GetEventManager(), RemoveLight, pEntity );
		}
	}
}
Пример #4
0
void EldritchGame::GoToLevel()
{
    XTRACE_FUNCTION;

    PRINTF( "Traveling to level %s\n", m_NextLevelName.CStr() );

    const bool IsRestarting			= m_IsRestarting;
    const bool FlushHubOnRestart	= m_FlushHubOnRestart;

    if( IsRestarting )
    {
        if( FlushHubOnRestart )
        {
            // Don't save the current world, and flush everything.
            GetSaveLoad()->FlushWorldFiles();
        }
        else
        {
            // Don't save the current world, but wait to flush until we're done traveling.
        }
    }
    else
    {
        // Store a record of the world we're leaving so we can come back to it.
        GetSaveLoad()->SaveWorld( DecorateWorldFileName( m_CurrentLevelName ) );
    }

    m_GoToLevelOnNextTick	= false;
    m_IsRestarting			= false;
    m_FlushHubOnRestart		= false;
    SetCurrentLevelName( m_NextLevelName );

    if( GetSaveLoad()->TryLoadWorld( DecorateWorldFileName( m_NextLevelName ) ) )
    {
        // We're good!
    }
    else
    {
        EldritchFramework::GetInstance()->GoToLevel( m_NextWorldDef );
    }

    RefreshUIReturnToHubEnabled();

    if( IsRestarting && !FlushHubOnRestart )
    {
        // Flush worlds now that we're back in the library.
        GetSaveLoad()->FlushWorldFiles();
    }

    WBEventManager* const pEventManager = WBWorld::GetInstance()->GetEventManager();

    WB_MAKE_EVENT( PostLevelTransition, NULL );
    WB_SET_AUTO( PostLevelTransition, Bool, RestoreSpawnPoint, m_RestoreSpawnPoint );
    WB_DISPATCH_EVENT( pEventManager, PostLevelTransition, NULL );

    // Top off player's health if we're returning to the hub.
    if( IsInHub() )
    {
        WB_MAKE_EVENT( RestoreHealth, NULL );
        WB_LOG_EVENT( RestoreHealth );
        WB_DISPATCH_EVENT( pEventManager, RestoreHealth, GetPlayer() );
    }

    // Make a checkpoint save, for crash protection
    // (Queued because we want to pump the event queue once to initialize the world.)
    WB_MAKE_EVENT( Checkpoint, NULL );
    WB_LOG_EVENT( Checkpoint );
    WB_QUEUE_EVENT( pEventManager, Checkpoint, this );

    // Clear travel persistence now that we've successfully traveled and don't need it.
    ClearTravelPersistence();

    // And fade up.
    static const float kFadeInDuration = 0.5f;
    WB_MAKE_EVENT( FadeIn, NULL );
    WB_SET_AUTO( FadeIn, Float, Duration, kFadeInDuration );
    WB_DISPATCH_EVENT( pEventManager, FadeIn, NULL );

    PRINTF( "Travel finished\n" );
}