Exemplo n.º 1
0
 /// <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));
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
                }
            }
        }
Exemplo n.º 5
0
		/// <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);
		}
Exemplo n.º 6
0
        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);
        }