/// <summary> /// Determines if the Renderer is visible to the specified <see cref="IDrawDevice"/>. /// This is usually the case if they share at least one mutual <see cref="VisibilityGroup">visibility group</see>. /// </summary> /// <param name="device"></param> /// <returns></returns> public virtual bool IsVisible(IDrawDevice device) { if ((device.VisibilityMask & VisibilityFlag.ScreenOverlay) != (this.visibilityGroup & VisibilityFlag.ScreenOverlay)) { return(false); } if ((this.visibilityGroup & device.VisibilityMask & VisibilityFlag.AllGroups) == VisibilityFlag.None) { return(false); } return(device.IsCoordInView(this.gameobj.Transform.Pos, this.BoundRadius)); }
public bool IsVisible(IDrawDevice device) { if ((device.VisibilityMask & VisibilityFlag.ScreenOverlay) != (VisibilityGroup & VisibilityFlag.ScreenOverlay)) { return(false); } if ((VisibilityGroup & device.VisibilityMask & VisibilityFlag.AllGroups) == VisibilityFlag.None) { return(false); } return(device.IsCoordInView(GameObj.Transform.Pos, BoundRadius)); }
public bool IsVisibleTo(IDrawDevice device) { if (this.IsDirectional) { return(true); } if (this.range <= 0.0f) { return(false); } if (this.intensity <= 0.0f) { return(false); } float uniformScale = this.GameObj.Transform.Scale; if (uniformScale <= 0.0f) { return(false); } Vector3 pos = this.GameObj.Transform.Pos; if (device.IsCoordInView(pos, this.range * uniformScale)) { return(true); } if (device.IsCoordInView(pos - Vector3.UnitZ * this.range * 0.5f * uniformScale, this.range * uniformScale)) { return(true); } if (device.IsCoordInView(pos + Vector3.UnitZ * this.range * uniformScale, this.range * uniformScale)) { return(true); } return(false); }
void ICmpRenderer.Draw(IDrawDevice device) { if (_inEditor) { if (FXArea != null) { Canvas c = new Canvas(device); FXArea.DrawInEditor(c); } } else { if (_particlesAlive > 0) { Vector3 posTemp = FXArea.GameObj.Transform.Pos; float scaleTemp = 1f; device.PreprocessCoords(ref posTemp, ref scaleTemp); int index = 0; foreach (Particle p in _particles) { if (p.IsAlive) { bool toDraw = DrawParticlesOffScreen || device.IsCoordInView(p.Position); if (toDraw) { p.UpdateVertices(device, posTemp, scaleTemp); Array.Copy(p.Vertices, 0, _particleVertices, index * 4, 4); } index++; } } device.AddVertices(_particleMaterial.Material, VertexMode.Quads, _particleVertices, index * 4); } } }
/// <summary> /// Determines if the Renderer is visible to the specified <see cref="IDrawDevice"/>. /// This is usually the case if they share at least one mutual <see cref="VisibilityGroup">visibility group</see>. /// </summary> /// <param name="device"></param> /// <returns></returns> public virtual bool IsVisible(IDrawDevice device) { if ((device.VisibilityMask & VisibilityFlag.ScreenOverlay) != (this.visibilityGroup & VisibilityFlag.ScreenOverlay)) return false; if ((this.visibilityGroup & device.VisibilityMask & VisibilityFlag.AllGroups) == VisibilityFlag.None) return false; return device.IsCoordInView(this.gameobj.Transform.Pos, this.BoundRadius); }
public bool IsVisibleTo(IDrawDevice device) { if (this.IsDirectional) return true; if (this.range <= 0.0f) return false; if (this.intensity <= 0.0f) return false; float uniformScale = this.GameObj.Transform.Scale; if (uniformScale <= 0.0f) return false; Vector3 pos = this.GameObj.Transform.Pos; if (device.IsCoordInView(pos, this.range * uniformScale)) return true; if (device.IsCoordInView(pos - Vector3.UnitZ * this.range * 0.5f * uniformScale, this.range * uniformScale)) return true; if (device.IsCoordInView(pos + Vector3.UnitZ * this.range * uniformScale, this.range * uniformScale)) return true; return false; }
public override bool IsVisible(IDrawDevice device) { if ((device.VisibilityMask & VisibilityFlag.ScreenOverlay) != (VisibilityGroup & VisibilityFlag.ScreenOverlay)) return false; if ((VisibilityGroup & device.VisibilityMask & VisibilityFlag.AllGroups) == VisibilityFlag.None) return false; return device.IsCoordInView(GameObj.Transform.Pos, BoundRadius); }