Beispiel #1
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            SpriteRender sprite = (SpriteRender)Actor;
            Vector3      viewPosition = ray.View.Position;
            Vector3      viewDirection = ray.View.Direction;
            Matrix       m1, m2, m3, world;
            var          size = sprite.Size;

            Matrix.Scaling(size.X, size.Y, 1.0f, out m1);
            var transform = sprite.Transform;

            if (sprite.FaceCamera)
            {
                var up = Vector3.Up;
                Matrix.Billboard(ref transform.Translation, ref viewPosition, ref up, ref viewDirection, out m2);
                Matrix.Multiply(ref m1, ref m2, out m3);
                Matrix.Scaling(ref transform.Scale, out m1);
                Matrix.Multiply(ref m1, ref m3, out world);
            }
            else
            {
                transform.GetWorld(out m2);
                Matrix.Multiply(ref m1, ref m2, out world);
            }

            OrientedBoundingBox bounds;

            bounds.Extents        = Vector3.Half;
            bounds.Transformation = world;

            normal = -ray.Ray.Direction;
            return(bounds.Intersects(ref ray.Ray, out distance));
        }
Beispiel #2
0
            /// <inheritdoc />
            public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
            {
                normal = Vector3.Up;
                var sphere = new BoundingSphere(Transform.Translation, 1.0f);

                return(sphere.Intersects(ref ray.Ray, out distance));
            }
Beispiel #3
0
            public override bool RayCastSelf(ref RayCastData ray, out Real distance, out Vector3 normal)
            {
                var actor = (Spline)_node.Actor;
                var pos   = actor.GetSplinePoint(Index);

                normal = -ray.Ray.Direction;
                return(new BoundingSphere(pos, 7.0f).Intersects(ref ray.Ray, out distance));
            }
Beispiel #4
0
            public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
            {
                var actor = (Spline)_node.Actor;
                var pos   = actor.GetSplineTangent(_index, _isIn).Translation;

                normal = -ray.Ray.Direction;
                return(new BoundingSphere(pos, 7.0f).Intersects(ref ray.Ray, out distance));
            }
Beispiel #5
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance)
        {
            if (Actor is UICanvas uiCanvas && uiCanvas.Is3D)
            {
                return(uiCanvas.Bounds.Intersects(ref ray.Ray, out distance));
            }

            distance = 0;
            return(false);
        }
Beispiel #6
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance)
        {
            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders)
            {
                distance = 0;
                return(false);
            }

            return(base.RayCastSelf(ref ray, out distance));
        }
Beispiel #7
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out Real distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            if (Actor is UICanvas uiCanvas && uiCanvas.Is3D)
            {
                return(uiCanvas.Bounds.Intersects(ref ray.Ray, out distance));
            }

            distance = 0;
            return(false);
        }
Beispiel #8
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out Real distance, out Vector3 normal)
        {
            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders)
            {
                distance = 0;
                normal   = Vector3.Up;
                return(false);
            }

            return(base.RayCastSelf(ref ray, out distance, out normal));
        }
Beispiel #9
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipEditorPrimitives) == RayCastData.FlagTypes.SkipEditorPrimitives)
            {
                distance = 0;
                return(false);
            }

            return(Camera.Internal_IntersectsItselfEditor(Object.GetUnmanagedPtr(_actor), ref ray.Ray, out distance));
        }
Beispiel #10
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance)
        {
            var volume = (PostFxVolume)_actor;
            var box    = volume.OrientedBox;

            if (!box.Intersects(ref ray.Ray, out distance))
            {
                return(false);
            }

            return(true);
            //box.Scale(0.8f);
            //return !box.Intersects(ref ray, out distance);
        }
Beispiel #11
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            // Pick wires
            var actor = (BoxCollider)_actor;
            var box   = actor.OrientedBox;

            if (Utilities.Utils.RayCastWire(ref box, ref ray.Ray, out distance, ref ray.View.Position))
            {
                normal = Vector3.Up;
                return(true);
            }

            return(base.RayCastSelf(ref ray, out distance, out normal));
        }
Beispiel #12
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipEditorPrimitives) == RayCastData.FlagTypes.SkipEditorPrimitives)
            {
                distance = 0;
                return(false);
            }

            BoundingSphere sphere = new BoundingSphere(Transform.Translation, 7.0f);

            return(CollisionsHelper.RayIntersectsSphere(ref ray.Ray, ref sphere, out distance));
        }
Beispiel #13
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance)
        {
            if (((BoxBrush)_actor).OrientedBox.Intersects(ref ray.Ray))
            {
                for (int i = 0; i < ChildNodes.Count; i++)
                {
                    if (ChildNodes[i] is SideLinkNode node && node.RayCastSelf(ref ray, out distance))
                    {
                        return(true);
                    }
                }
            }

            distance = 0;
            return(false);
        }
Beispiel #14
0
        public static void GenerateRayCastObject(Vector3 position, Quaternion rotation, Vector3 forward,
                                                 Camera currentCamera, out RayCastData rayCastData, out HitPositionData hitPositions)
        {
            rayCastData  = new RayCastData();
            hitPositions = new HitPositionData {
                CameraPosition = position, CameraRotation = rotation
            };

            //TODO Fabian: Check here for all the Layers we use!
            if (Physics.Raycast(currentCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f)), out var centerHit,
                                Mathf.Infinity, 1 << 8))
            {
                rayCastData.CenterHit          = centerHit.transform.name;
                hitPositions.CenterHitPosition = centerHit.point;
                rayCastData.CenterHitPosition  = centerHit.point;
                rayCastData.CenterHitGroup     = centerHit.transform.root.name;
            }
Beispiel #15
0
        void DrillFX(Vector2 direction, RayCastData rayCastData)
        {
            SoundManager.PlaySound(SoundManager.SoundEnum.Drill);

            if (ShovelAnim != null)
            {
                ShovelAnim.StartAnimation(direction.X);
            }
            if (Shake != null)
            {
                Shake.InitShake(ShakeData);
            }
            if (fxManager != null)
            {
                fxManager.CreateParticleSystem(rayCastData.Pos);
            }
        }
Beispiel #16
0
        private float OnRayCast(RayCastData data)
        {
            var ship = data.GameObj.GetComponent <Ship>();

            if (ship != null && !data.Shape.IsSensor)
            {
                if (_hitFraction > data.Fraction)
                {
                    _hitFraction = data.Fraction;
                }
                return(data.Fraction);
            }
            else
            {
                return(1);
            }
        }
Beispiel #17
0
        void DoDrill(RayCastData rayCastData, Vector2 direction)
        {
            if (gameManager.PlayerDrillCount <= 0)
            {
                return;
            }

            gameManager.PlayerDrillCount--;

            Vector2 EpsVec = direction.Normalized;

            var tilemap   = rayCastData.GameObj.GetComponent <TilemapCollider> ().CollisionSource [0].SourceTilemap;
            var tileCoord = GetTileCoord(rayCastData.Pos + EpsVec, tilemap);

            if (IsTileCoordBorder(tileCoord, tilemap))
            {
                return;
            }

            DrillFX(direction, rayCastData);

            //Profile.BeginMeasure ("Measure");

            try {
                Grid <Tile> tiles   = tilemap.BeginUpdateTiles();
                var         tileset = tilemap.Tileset;
                tilemap.SetTile(tileCoord.X, tileCoord.Y, new Tile(emptyTile));
                var updateGrid = new Grid <bool> (tilemap.Size.X, tilemap.Size.Y);
                updateGrid.Fill(true, 0, 0, tilemap.Size.X, tilemap.Size.Y);
                Tile.UpdateAutoTileCon(tiles, updateGrid, tileCoord.X - 1, tileCoord.Y - 1, 3, 3, tileset);
                tilemap.EndUpdateTiles();
            }
            catch (IndexOutOfRangeException /*exception*/) {
                // do f*****g nothing
            }

            //Profile.EndMeasure ("Measure");
            //Profile.SaveTextReport ("measure.txt");
        }
Beispiel #18
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipEditorPrimitives) == RayCastData.FlagTypes.SkipEditorPrimitives)
            {
                distance = 0;
                return(false);
            }

            var volume = (PostFxVolume)_actor;
            var box    = volume.OrientedBox;

            if (!box.Intersects(ref ray.Ray, out distance))
            {
                return(false);
            }

            return(true);
            //box.Scale(0.8f);
            //return !box.Intersects(ref ray, out distance);
        }
Beispiel #19
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipEditorPrimitives) == RayCastData.FlagTypes.SkipEditorPrimitives)
            {
                distance = 0;
                return(false);
            }

            // Skip itself if any link gets hit
            if (RayCastChildren(ref ray, out distance, out normal) != null)
            {
                return(false);
            }

            // Check itself
            var actor = (BoxVolume)_actor;
            var box   = actor.OrientedBox;

            return(Utilities.Utils.RayCastWire(ref box, ref ray.Ray, out distance, ref ray.View.Position));
        }
Beispiel #20
0
        public void OnUpdate()
        {
            var contact = new RayCastData();

            RigidBody.RayCast(
                GameObj.Transform.Pos.Xy,
                Vector2.FromAngleLength(MathF.DegToRad(_angle), Radius) + GameObj.Transform.Pos.Xy,
                delegate(RayCastData data) {
                if (data.GameObj == GameObj || data.Shape.IsSensor)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            },
                out contact);

            GameObj.FireEvent(this, new SensorEvent {
                Data = contact
            });
        }
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
        {
            normal = Vector3.Up;

            // Check if skip raycasts
            if ((ray.Flags & RayCastData.FlagTypes.SkipEditorPrimitives) == RayCastData.FlagTypes.SkipEditorPrimitives)
            {
                distance = 0;
                return(false);
            }

            // Skip itself if any link gets hit
            if (RayCastChildren(ref ray, out distance, out normal) != null)
            {
                return(false);
            }

            // Check itself
            var volume = (PostFxVolume)_actor;
            var box    = volume.OrientedBox;

            return(box.Contains(ref ray.Ray.Position) == ContainmentType.Disjoint && box.Intersects(ref ray.Ray, out distance));
        }
Beispiel #22
0
        /// <inheritdoc />
        public override bool RayCastSelf(ref RayCastData ray, out float distance)
        {
            BoundingSphere sphere = new BoundingSphere(Transform.Translation, 7.0f);

            return(CollisionsHelper.RayIntersectsSphere(ref ray.Ray, ref sphere, out distance));
        }
Beispiel #23
0
 public RayInfo(RayCastData caster)
 {
     this.caster = caster;
 }
Beispiel #24
0
 /// <inheritdoc />
 public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
 {
     return(Brush.Surfaces[Index].Intersects(ref ray.Ray, out distance, out normal));
 }
Beispiel #25
0
 /// <inheritdoc />
 public override bool RayCastSelf(ref RayCastData ray, out float distance)
 {
     return(Camera.Internal_IntersectsItselfEditor(Object.GetUnmanagedPtr(_actor), ref ray.Ray, out distance));
 }
Beispiel #26
0
 /// <inheritdoc />
 public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
 {
     normal   = Vector3.Up;
     distance = float.MaxValue;
     return(false);
 }
Beispiel #27
0
 /// <inheritdoc />
 public override bool RayCastSelf(ref RayCastData ray, out float distance)
 {
     return(Entry.Intersects(ray.Ray, out distance));
 }