2018-01-28 20:48:02 +00:00
//-----------------------------------------------------------------------------
// Copyright (c) 2013 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
# ifndef LEVEL_ASSET_H
# include "LevelAsset.h"
# endif
# ifndef _ASSET_MANAGER_H_
# include "assets/assetManager.h"
# endif
# ifndef _CONSOLETYPES_H_
# include "console/consoleTypes.h"
# endif
# ifndef _TAML_
# include "persistence/taml/taml.h"
# endif
# ifndef _ASSET_PTR_H_
# include "assets/assetPtr.h"
# endif
// Debug Profiling.
# include "platform/profiler.h"
//-----------------------------------------------------------------------------
IMPLEMENT_CONOBJECT ( LevelAsset ) ;
2019-06-03 07:47:30 +00:00
ConsoleType ( LevelAssetPtr , TypeLevelAssetPtr , String , ASSET_ID_FIELD_PREFIX )
2018-01-28 20:48:02 +00:00
//-----------------------------------------------------------------------------
ConsoleGetType ( TypeLevelAssetPtr )
{
// Fetch asset Id.
2019-06-03 07:47:30 +00:00
return * ( ( StringTableEntry * ) dptr ) ;
2018-01-28 20:48:02 +00:00
}
//-----------------------------------------------------------------------------
ConsoleSetType ( TypeLevelAssetPtr )
{
// Was a single argument specified?
if ( argc = = 1 )
{
// Yes, so fetch field value.
const char * pFieldValue = argv [ 0 ] ;
2019-06-03 07:47:30 +00:00
// Fetch asset Id.
StringTableEntry * assetId = ( StringTableEntry * ) ( dptr ) ;
2018-01-28 20:48:02 +00:00
2019-06-03 07:47:30 +00:00
// Update asset value.
* assetId = StringTable - > insert ( pFieldValue ) ;
2018-01-28 20:48:02 +00:00
return ;
}
// Warn.
Con : : warnf ( " (TypeLevelAssetPtr) - Cannot set multiple args to a single asset. " ) ;
}
//-----------------------------------------------------------------------------
2018-02-04 22:21:07 +00:00
LevelAsset : : LevelAsset ( ) : AssetBase ( ) , mIsSubLevel ( false )
2018-01-28 20:48:02 +00:00
{
2019-05-04 16:49:42 +00:00
mLevelName = StringTable - > EmptyString ( ) ;
2018-01-28 20:48:02 +00:00
mLevelFile = StringTable - > EmptyString ( ) ;
mPreviewImage = StringTable - > EmptyString ( ) ;
2019-10-20 07:47:15 +00:00
mPostFXPresetFile = StringTable - > EmptyString ( ) ;
mDecalsFile = StringTable - > EmptyString ( ) ;
mForestFile = StringTable - > EmptyString ( ) ;
mNavmeshFile = StringTable - > EmptyString ( ) ;
2018-02-04 22:21:07 +00:00
2019-09-29 11:44:43 +00:00
mGamemodeName = StringTable - > EmptyString ( ) ;
2018-02-04 22:21:07 +00:00
mMainLevelAsset = StringTable - > EmptyString ( ) ;
2019-11-18 09:30:04 +00:00
mEditorFile = StringTable - > EmptyString ( ) ;
mBakedSceneFile = StringTable - > EmptyString ( ) ;
2018-01-28 20:48:02 +00:00
}
//-----------------------------------------------------------------------------
LevelAsset : : ~ LevelAsset ( )
{
// If the asset manager does not own the asset then we own the
// asset definition so delete it.
if ( ! getOwned ( ) )
delete mpAssetDefinition ;
}
//-----------------------------------------------------------------------------
void LevelAsset : : initPersistFields ( )
{
// Call parent.
Parent : : initPersistFields ( ) ;
2019-05-04 16:49:42 +00:00
addProtectedField ( " LevelFile " , TypeAssetLooseFilePath , Offset ( mLevelFile , LevelAsset ) ,
& setLevelFile , & getLevelFile , " Path to the actual level file. " ) ;
addField ( " LevelName " , TypeString , Offset ( mLevelName , LevelAsset ) , " Human-friendly name for the level. " ) ;
addProtectedField ( " PreviewImage " , TypeAssetLooseFilePath , Offset ( mPreviewImage , LevelAsset ) ,
& setPreviewImageFile , & getPreviewImageFile , " Path to the image used for selection preview. " ) ;
2019-06-03 07:47:30 +00:00
2019-10-20 07:47:15 +00:00
addProtectedField ( " PostFXPresetFile " , TypeAssetLooseFilePath , Offset ( mPostFXPresetFile , LevelAsset ) ,
& setLevelFile , & getLevelFile , " Path to the level's postFXPreset. " ) ;
addProtectedField ( " DecalsFile " , TypeAssetLooseFilePath , Offset ( mDecalsFile , LevelAsset ) ,
& setLevelFile , & getLevelFile , " Path to the decals cache file. " ) ;
addProtectedField ( " ForestFile " , TypeAssetLooseFilePath , Offset ( mForestFile , LevelAsset ) ,
& setLevelFile , & getLevelFile , " Path to the Forest cache file. " ) ;
addProtectedField ( " NavmeshFile " , TypeAssetLooseFilePath , Offset ( mNavmeshFile , LevelAsset ) ,
& setLevelFile , & getLevelFile , " Path to the navmesh file. " ) ;
2019-11-18 09:30:04 +00:00
addProtectedField ( " EditorFile " , TypeAssetLooseFilePath , Offset ( mEditorFile , LevelAsset ) ,
& setEditorFile , & getEditorFile , " Path to the level file with objects that were removed as part of the baking process. Loaded when the editor is loaded for ease of editing. " ) ;
addProtectedField ( " BakedSceneFile " , TypeAssetLooseFilePath , Offset ( mBakedSceneFile , LevelAsset ) ,
& setBakedSceneFile , & getBakedSceneFile , " Path to the level file with the objects generated as part of the baking process " ) ;
2019-09-29 11:44:43 +00:00
addField ( " isSubScene " , TypeBool , Offset ( mIsSubLevel , LevelAsset ) , " Is this a sublevel to another Scene " ) ;
2019-06-03 07:47:30 +00:00
addField ( " gameModeName " , TypeString , Offset ( mGamemodeName , LevelAsset ) , " Name of the Game Mode to be used with this level " ) ;
2018-01-28 20:48:02 +00:00
}
//------------------------------------------------------------------------------
void LevelAsset : : copyTo ( SimObject * object )
{
// Call to parent.
Parent : : copyTo ( object ) ;
2019-05-04 16:49:42 +00:00
}
//
void LevelAsset : : initializeAsset ( )
{
// Call parent.
Parent : : initializeAsset ( ) ;
// Ensure the image-file is expanded.
mPreviewImage = expandAssetFilePath ( mPreviewImage ) ;
mLevelFile = expandAssetFilePath ( mLevelFile ) ;
}
//
void LevelAsset : : setLevelFile ( const char * pLevelFile )
{
// Sanity!
AssertFatal ( pLevelFile ! = NULL , " Cannot use a NULL level file. " ) ;
// Fetch image file.
pLevelFile = StringTable - > insert ( pLevelFile ) ;
// Ignore no change,
if ( pLevelFile = = mLevelFile )
return ;
// Update.
mLevelFile = getOwned ( ) ? expandAssetFilePath ( pLevelFile ) : StringTable - > insert ( pLevelFile ) ;
// Refresh the asset.
refreshAsset ( ) ;
}
void LevelAsset : : setImageFile ( const char * pImageFile )
{
// Sanity!
AssertFatal ( pImageFile ! = NULL , " Cannot use a NULL image file. " ) ;
// Fetch image file.
pImageFile = StringTable - > insert ( pImageFile ) ;
// Ignore no change,
if ( pImageFile = = mPreviewImage )
return ;
// Update.
mPreviewImage = getOwned ( ) ? expandAssetFilePath ( pImageFile ) : StringTable - > insert ( pImageFile ) ;
// Refresh the asset.
refreshAsset ( ) ;
}
2019-11-18 09:30:04 +00:00
void LevelAsset : : setEditorFile ( const char * pEditorFile )
{
// Sanity!
AssertFatal ( pEditorFile ! = NULL , " Cannot use a NULL level file. " ) ;
// Fetch image file.
pEditorFile = StringTable - > insert ( pEditorFile ) ;
// Ignore no change,
if ( pEditorFile = = mEditorFile )
return ;
// Update.
mEditorFile = getOwned ( ) ? expandAssetFilePath ( pEditorFile ) : StringTable - > insert ( pEditorFile ) ;
// Refresh the asset.
refreshAsset ( ) ;
}
void LevelAsset : : setBakedSceneFile ( const char * pBakedSceneFile )
{
// Sanity!
AssertFatal ( pBakedSceneFile ! = NULL , " Cannot use a NULL level file. " ) ;
// Fetch image file.
pBakedSceneFile = StringTable - > insert ( pBakedSceneFile ) ;
// Ignore no change,
if ( pBakedSceneFile = = mBakedSceneFile )
return ;
// Update.
mBakedSceneFile = getOwned ( ) ? expandAssetFilePath ( pBakedSceneFile ) : StringTable - > insert ( pBakedSceneFile ) ;
// Refresh the asset.
refreshAsset ( ) ;
}