/// <summary> /// Deserializes the object and populates it from the input. /// </summary> /// <param name="input">Savable input</param> public virtual void Read(ISavableReader input) { _name = input.ReadString(); _localTransform = input.ReadSavable <Transform>(); _sceneHints = input.ReadSavable <SceneHints>(); _sceneHints.HintableSource = this; _localLights = input.ReadSavable <LightCollection>(); _localLights._spatial = this; bool hasControllers = input.ReadBoolean(); _controllers = new TeslaList <ISpatialController>(1); if (hasControllers) { ISavable[] savableControllers = input.ReadSavableArray <ISavable>(); for (int i = 0; i < savableControllers.Length; i++) { ISpatialController controller = savableControllers[i] as ISpatialController; if (controller != null) { _controllers.Add(controller); } } } _worldTransform = new Transform(_localTransform); _frustumIntersect = ContainmentType.Intersects; _parent = null; _dirtyMark = DirtyMark.Bounding | DirtyMark.Transform | DirtyMark.Lighting; }
/// <summary> /// Marks this spatial with the dirty flag and then propagates /// it up the scene graph. /// </summary> /// <param name="flag">DirtyMark bit flag</param> public void PropagateDirtyUp(DirtyMark flag) { _dirtyMark |= flag; if (_parent != null) { _parent.PropagateDirtyUp(flag); } }
/// <summary> /// Propagates a dirty mark down the tree, calling PropagateDirtyDown() /// on each child. /// </summary> /// <param name="flag">Dirty mark</param> public override void PropagateDirtyDown(DirtyMark flag) { MarkDirty(flag); for (int i = 0; i < _children.Count; i++) { _children[i].PropagateDirtyDown(flag); } }
/// <summary> /// Creates a new spatial with the specified name. /// </summary> /// <param name="name"></param> public Spatial(String name) { _name = name; _parent = null; _localTransform = new Transform(); _worldTransform = new Transform(); _controllers = new TeslaList <ISpatialController>(1); _dirtyMark = DirtyMark.Bounding | DirtyMark.Transform | DirtyMark.Lighting; _sceneHints = new SceneHints(this); _localLights = new LightCollection(this); }
/// <summary> /// Clears the specified dirty mark from this Spatial. /// </summary> /// <param name="flag">DirtyMark bit flag</param> public void ClearDirty(DirtyMark flag) { _dirtyMark &= ~flag; }
/// <summary> /// Marks the spatial dirty, but does not propagate the mark up/down the tree. /// </summary> /// <param name="flag">DirtyMark bit flag</param> public void MarkDirty(DirtyMark flag) { _dirtyMark |= flag; }
/// <summary> /// Checks if this Spatial is marked with the /// specified dirty mark. /// </summary> /// <param name="flag">DirtyMark bit flag</param> /// <returns>True if the spatial is marked with the flag</returns> public bool IsDirty(DirtyMark flag) { return((_dirtyMark & flag) == flag); }
/// <summary> /// Marks this spatial with the dirty flag and then propagates it down the /// scene graph. This is meant to be overridden by subclasses that have children. /// </summary> /// <param name="flag">DirtyMark bit flag</param> public virtual void PropagateDirtyDown(DirtyMark flag) { _dirtyMark |= flag; }