Package gaiasky.data
Class OctreeLoader
java.lang.Object
gaiasky.data.AbstractSceneLoader
gaiasky.data.OctreeLoader
- All Implemented Interfaces:
IOctantLoader
,ISceneLoader
,IObserver
Implements the loading and streaming of octree nodes from files. This version
loads star groups using
BinaryDataProvider
.-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
The daemon loader thread. -
Field Summary
Modifier and TypeFieldDescriptionprotected OctreeLoader.OctreeLoaderThread
Daemon thread that gets the data loading requests and serves them.protected String
protected int
static OctreeLoader
protected long
Last time of a queue clear event went through.protected static final int
Default load queue size in octants.protected long[]
Loaded octant ids, for logging.protected int
protected boolean
Whether loading is paused or not.protected static final int
Maximum number of pages to send to load every batch.protected int
protected final long
Max number of stars loaded at once.protected String
protected static final long
Minimum time to pass to be able to clear the queue again.protected String
protected int
Current number of stars that are loaded.protected String
protected static final int
Data will be preloaded at startup down to this octree depth.protected Queue<OctreeNode>
The octant loading queue.protected Queue<OctreeNode>
This queue is sorted ascending by access date, so that we know which element to release if needed (oldest).Fields inherited from class gaiasky.data.AbstractSceneLoader
datasetDirectory, dataSource, filePaths, loggedArchetypes, parentName, scene
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Tells the daemon to immediately stop the loading of octants and wait for new dataprotected void
addLoadedInfo
(long id, int nobjects) void
addToQueue
(OctreeNode octant) void
Clears the current load queue.void
Removes all octants from the current load queue.protected void
void
Tells the loader to start loading the octants in the queue.int
int
void
initialize
(String[] files, Scene scene) void
initialize
(String[] files, String dsLocation, Scene scene) com.badlogic.gdx.utils.Array<com.badlogic.ashley.core.Entity>
loadData()
Performs the loading and returns an array with the entities loaded.void
Loads all the levels of detail until the given one.boolean
loadOctant
(OctreeNode octreeNode, com.badlogic.ashley.core.Entity octreeWrapper, boolean fullInit) Loads the data of the given octant.void
loadOctant
(OctreeNode octant, com.badlogic.ashley.core.Entity octreeWrapper, Integer level) Loads the data of the given octant and its children down to the given level.int
loadOctants
(com.badlogic.gdx.utils.Array<OctreeNode> octants, com.badlogic.ashley.core.Entity octreeWrapper, AtomicBoolean abort) Loads the objects of the given octants.protected com.badlogic.ashley.core.Entity
Loads the nodes and the octree.void
Event notification call.void
queue
(OctreeNode octant) Adds the octant to the load queue.void
setDescription
(String description) void
void
void
void
void
touch
(OctreeNode octant) Moves the octant to the end of the unload queue.void
touchOctant
(OctreeNode octant) Puts it at the end of the toUnloadQueue.void
unloadOctant
(OctreeNode octant, com.badlogic.ashley.core.Entity octreeWrapper) Unloads the given octant.Methods inherited from class gaiasky.data.AbstractSceneLoader
initialize, interceptDataFilePath, interceptDataFilePaths, setParentName
-
Field Details
-
PRELOAD_DEPTH
protected static final int PRELOAD_DEPTHData will be preloaded at startup down to this octree depth.- See Also:
-
LOAD_QUEUE_MAX_SIZE
protected static final int LOAD_QUEUE_MAX_SIZEDefault load queue size in octants.- See Also:
-
MIN_QUEUE_CLEAR_MS
protected static final long MIN_QUEUE_CLEAR_MSMinimum time to pass to be able to clear the queue again.- See Also:
-
MAX_LOAD_CHUNK
protected static final int MAX_LOAD_CHUNKMaximum number of pages to send to load every batch.- See Also:
-
instance
-
maxLoadedStars
protected final long maxLoadedStarsMax number of stars loaded at once. -
nLoadedStars
protected int nLoadedStarsCurrent number of stars that are loaded. -
toLoadQueue
The octant loading queue. -
loadingPaused
protected boolean loadingPausedWhether loading is paused or not. -
lastQueueClearMs
protected long lastQueueClearMsLast time of a queue clear event went through. -
name
-
description
-
params
-
toUnloadQueue
This queue is sorted ascending by access date, so that we know which element to release if needed (oldest). -
loadedIds
protected long[] loadedIdsLoaded octant ids, for logging. -
loadedObjects
protected int loadedObjects -
maxLoadedIds
protected int maxLoadedIds -
idxLoadedIds
protected int idxLoadedIds -
metadata
-
particles
-
daemon
Daemon thread that gets the data loading requests and serves them.
-
-
Constructor Details
-
OctreeLoader
public OctreeLoader()
-
-
Method Details
-
initialize
- Specified by:
initialize
in interfaceISceneLoader
- Overrides:
initialize
in classAbstractSceneLoader
- Throws:
RuntimeException
-
initialize
- Specified by:
initialize
in interfaceISceneLoader
- Overrides:
initialize
in classAbstractSceneLoader
- Throws:
RuntimeException
-
loadOctreeData
protected com.badlogic.ashley.core.Entity loadOctreeData()Loads the nodes and the octree. -
loadOctant
public boolean loadOctant(OctreeNode octreeNode, com.badlogic.ashley.core.Entity octreeWrapper, boolean fullInit) Loads the data of the given octant.- Parameters:
octreeNode
- The octant to load.octreeWrapper
- The octree wrapper entity.fullInit
- Whether to fully initialise the objects (on-demand load) or not (startup)- Returns:
- True if the octant was loaded, false otherwise
-
setEpoch
-
setEpoch
-
loadData
public com.badlogic.gdx.utils.Array<com.badlogic.ashley.core.Entity> loadData()Description copied from interface:ISceneLoader
Performs the loading and returns an array with the entities loaded.- Specified by:
loadData
in interfaceISceneLoader
- Returns:
- The loaded entities.
-
addLoadedInfo
protected void addLoadedInfo(long id, int nobjects) -
flushLoadedIds
protected void flushLoadedIds() -
queue
Adds the octant to the load queue.- Specified by:
queue
in interfaceIOctantLoader
-
clearQueue
public void clearQueue()Clears the current load queue.- Specified by:
clearQueue
in interfaceIOctantLoader
-
getLoadQueueSize
public int getLoadQueueSize()- Specified by:
getLoadQueueSize
in interfaceIOctantLoader
-
getNLoadedStars
public int getNLoadedStars()- Specified by:
getNLoadedStars
in interfaceIOctantLoader
-
touch
Moves the octant to the end of the unload queue.- Specified by:
touch
in interfaceIOctantLoader
-
emptyLoadQueue
public void emptyLoadQueue()Removes all octants from the current load queue. This happens when the camera viewport changes radically (velocity is high, direction changes a lot, etc.) so that the old octants are dropped and newly observed octants are loaded right away. -
addToQueue
-
touchOctant
Puts it at the end of the toUnloadQueue. -
flushLoadQueue
public void flushLoadQueue()Tells the loader to start loading the octants in the queue. -
abortCurrentLoading
public void abortCurrentLoading()Tells the daemon to immediately stop the loading of octants and wait for new data -
loadLod
Loads all the levels of detail until the given one.- Parameters:
lod
- The level of detail to load.octreeWrapper
- The octree wrapper entity.- Throws:
IOException
- When any of the level's files fails to load.
-
loadOctant
public void loadOctant(OctreeNode octant, com.badlogic.ashley.core.Entity octreeWrapper, Integer level) Loads the data of the given octant and its children down to the given level.- Parameters:
octant
- The octant to load.octreeWrapper
- The octree wrapper.level
- The depth to load.
-
loadOctants
public int loadOctants(com.badlogic.gdx.utils.Array<OctreeNode> octants, com.badlogic.ashley.core.Entity octreeWrapper, AtomicBoolean abort) Loads the objects of the given octants.- Parameters:
octants
- The list holding the octants to load.octreeWrapper
- The octree wrapper.abort
- State variable that will be set to true if an abort is called.- Returns:
- The actual number of loaded octants.
-
unloadOctant
Unloads the given octant. -
notify
Description copied from interface:IObserver
Event notification call. -
setName
- Specified by:
setName
in interfaceISceneLoader
-
setDescription
- Specified by:
setDescription
in interfaceISceneLoader
-
setParams
- Specified by:
setParams
in interfaceISceneLoader
-