-------------------------------------------------------------------------------

function isCasualPlayMode(tag)
	tag = tag or getDefaultGameStateTag()
	return HasGameState(PLAY_MODE, EPlayMode.CASUAL, tag) or false
end
-------------------------------------------------------------------------------

function isAdvancedPlayMode(tag)
	tag = tag or getDefaultGameStateTag()
	return HasGameState(PLAY_MODE, EPlayMode.ADVANCED, tag) or false
end
-------------------------------------------------------------------------------

function isHardPlayMode(tag)
	tag = tag or getDefaultGameStateTag()
	return HasGameState(PLAY_MODE, EPlayMode.HARD, tag) or false
end
-------------------------------------------------------------------------------

function isCustomPlayMode(tag)
	tag = tag or getDefaultGameStateTag()
	return HasGameState(PLAY_MODE, EPlayMode.CUSTOM, tag) or false
end
-------------------------------------------------------------------------------

function getPlayMode(tag)
	tag = tag or getDefaultGameStateTag()
	if HasGameState(PLAY_MODE, nil, tag) then
		return GetGameState(PLAY_MODE, tag):get(0)
	end

	assert()
end
-------------------------------------------------------------------------------

function getPlayModeParameters(tag)
	tag = tag or getDefaultGameStateTag()
	if HasGameState(PLAY_MODE_PARAMETERS, nil, tag) then
		return Helpers.RestoreObjectFromGameState(PLAY_MODE_PARAMETERS, tag)
	elseif getPlayMode(tag) ~= EPlayMode.CUSTOM then
		return table.copy(EPlayModeDefaultParameters[getPlayMode(tag)]) 
	end

	assert()
end
-------------------------------------------------------------------------------