Class OctreeLoader

All Implemented Interfaces:
IOctantLoader, ISceneLoader, IObserver

public class OctreeLoader extends AbstractSceneLoader implements IObserver, IOctantLoader
Implements the loading and streaming of octree nodes from files. This version loads star groups using BinaryDataProvider.
  • Field Details


      protected static final int PRELOAD_DEPTH
      Data will be pre-loaded at startup down to this octree depth.
      See Also:

      protected static final int LOAD_QUEUE_MAX_SIZE
      Default load queue size in octants.
      See Also:

      protected static final long MIN_QUEUE_CLEAR_MS
      Minimum time to pass to be able to clear the queue again.
      See Also:

      protected static final int MAX_LOAD_CHUNK
      Maximum number of pages to send to load every batch.
      See Also:
    • instance

      public static OctreeLoader instance
    • nLoadedStars

      protected int nLoadedStars
      Current number of stars that are loaded.
    • maxLoadedStars

      protected final long maxLoadedStars
      Max number of stars loaded at once.
    • toLoadQueue

      protected Queue<OctreeNode> toLoadQueue
      The octant loading queue.
    • loadingPaused

      protected boolean loadingPaused
      Whether loading is paused or not.
    • lastQueueClearMs

      protected long lastQueueClearMs
      Last time of a queue clear event went through.
    • name

      protected String name
    • description

      protected String description
    • params

      protected Map<String,Object> params
    • toUnloadQueue

      protected Queue<OctreeNode> toUnloadQueue
      This queue is sorted ascending by access date, so that we know which element to release if needed (oldest).
    • loadedIds

      protected long[] loadedIds
      Loaded octant ids, for logging.
    • loadedObjects

      protected int loadedObjects
    • maxLoadedIds

      protected int maxLoadedIds
    • idxLoadedIds

      protected int idxLoadedIds
    • metadata

      protected String metadata
    • particles

      protected String particles
    • daemon

      Daemon thread that gets the data loading requests and serves them.
  • Constructor Details

    • OctreeLoader

      public OctreeLoader()
  • Method Details

    • initialize

      public void initialize(String[] files, Scene scene) throws RuntimeException
      Specified by:
      initialize in interface ISceneLoader
      initialize in class AbstractSceneLoader
    • 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.
      octreeNode - The octant to load.
      octreeWrapper - The octree wrapper entity.
      fullInit - Whether to fully initialise the objects (on-demand load) or not (startup)
      True if the octant was loaded, false otherwise
    • setEpoch

      public void setEpoch(Double epoch)
    • setEpoch

      public void setEpoch(Long epoch)
    • 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 interface ISceneLoader
      The loaded entities.
    • addLoadedInfo

      protected void addLoadedInfo(long id, int nobjects)
    • flushLoadedIds

      protected void flushLoadedIds()
    • queue

      public void queue(OctreeNode octant)
      Adds the octant to the load queue.
      Specified by:
      queue in interface IOctantLoader
    • clearQueue

      public void clearQueue()
      Clears the current load queue.
      Specified by:
      clearQueue in interface IOctantLoader
    • getLoadQueueSize

      public int getLoadQueueSize()
      Specified by:
      getLoadQueueSize in interface IOctantLoader
    • getNLoadedStars

      public int getNLoadedStars()
      Specified by:
      getNLoadedStars in interface IOctantLoader
    • touch

      public void touch(OctreeNode octant)
      Moves the octant to the end of the unload queue.
      Specified by:
      touch in interface IOctantLoader
    • 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

      public void addToQueue(OctreeNode octant)
    • touchOctant

      public void touchOctant(OctreeNode octant)
      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

      public void loadLod(Integer lod, com.badlogic.ashley.core.Entity octreeWrapper) throws IOException
      Loads all the levels of detail until the given one.
      lod - The level of detail to load.
      octreeWrapper - The octree wrapper entity.
      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.
      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.
      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.
      The actual number of loaded octants.
    • unloadOctant

      public void unloadOctant(OctreeNode octant, com.badlogic.ashley.core.Entity octreeWrapper)
      Unloads the given octant.
    • notify

      public void notify(Event event, Object source, Object... data)
      Description copied from interface: IObserver
      Event notification call.
      Specified by:
      notify in interface IObserver
      event - The event type.
      source - The source object, if any.
      data - The data associated with this event.
    • setName

      public void setName(String name)
      Specified by:
      setName in interface ISceneLoader
    • setDescription

      public void setDescription(String description)
      Specified by:
      setDescription in interface ISceneLoader
    • setParams

      public void setParams(Map<String,Object> params)
      Specified by:
      setParams in interface ISceneLoader