protected override void StartPerform()
        {
            base.StartPerform();
            Game.Instance.CameraController.LargeShake();
            var forward = Vector3.Normalize(EndPosition - StartPosition);
            var right   = Vector3.Normalize(Vector3.Cross(new Vector3(forward.X, forward.Y, 0), Vector3.UnitZ));
            var tl      = StartPosition + right * Width / 2f;
            var tr      = StartPosition - right * Width / 2f;
            var bl      = EndPosition + right * Width / 2f;
            var br      = EndPosition - right * Width / 2f;

            region = new Common.Bounding.Region
            {
                Nodes = new Common.Bounding.RegionNode[]
                {
                    new Common.Bounding.RegionNode(new Vector3[] { tl, tr, br }),
                    new Common.Bounding.RegionNode(new Vector3[] { tl, br, bl }),
                }
            };
            Game.Instance.Scene.Add(lavaDitch = new Props.LavaDitchWithEffects1
            {
                Translation = StartPosition,
                Rotation    = Quaternion.RotationAxis(Vector3.UnitZ, (float)Common.Math.AngleFromVector3XY(forward))
            });

#if LAVA_DITCH_DISPLAY_ATTACK_AREA
            pebbles.Clear();
            for (float y = Math.Min(StartPosition.Y, EndPosition.Y) - 10; y < Math.Max(StartPosition.Y, EndPosition.Y) + 10; y += 0.25f)
            {
                for (float x = Math.Min(StartPosition.X, EndPosition.X) - 10; x < Math.Max(StartPosition.Y, EndPosition.Y) + 10; x += 0.25f)
                {
                    if (region.GetNodeAt(new Vector3(x, y, 0)) != null)
                    {
                        Props.Pebble1 p;
                        Game.Instance.Scene.Add(p = new Props.Pebble1 {
                            Translation = new Vector3(x, y, StartPosition.Z), Scale = new Vector3(1, 1, 10)
                        });
                        pebbles.Add(p);
                    }
                }
            }
#endif
            effects.Clear();
        }
        protected override void StartPerform()
        {
            base.StartPerform();
            Game.Instance.CameraController.LargeShake();
            var forward = Vector3.Normalize(EndPosition - StartPosition);
            var right = Vector3.Normalize(Vector3.Cross(new Vector3(forward.X, forward.Y, 0), Vector3.UnitZ));
            var tl = StartPosition + right * Width / 2f;
            var tr = StartPosition -right * Width / 2f;
            var bl = EndPosition + right * Width / 2f;
            var br = EndPosition -right * Width / 2f;
            region = new Common.Bounding.Region
            {
                Nodes = new Common.Bounding.RegionNode[]
                {
                    new Common.Bounding.RegionNode(new Vector3[] { tl, tr, br }),
                    new Common.Bounding.RegionNode(new Vector3[] { tl, br, bl }),
                }
            };
            Game.Instance.Scene.Add(lavaDitch = new Props.LavaDitchWithEffects1
            {
                Translation = StartPosition,
                Rotation = Quaternion.RotationAxis(Vector3.UnitZ, (float)Common.Math.AngleFromVector3XY(forward))
            });

            #if LAVA_DITCH_DISPLAY_ATTACK_AREA
            pebbles.Clear();
            for (float y = Math.Min(StartPosition.Y, EndPosition.Y) - 10; y < Math.Max(StartPosition.Y, EndPosition.Y) + 10; y += 0.25f)
                for (float x = Math.Min(StartPosition.X, EndPosition.X) - 10; x < Math.Max(StartPosition.Y, EndPosition.Y) + 10; x += 0.25f)
                    if (region.GetNodeAt(new Vector3(x, y, 0)) != null)
                    {
                        Props.Pebble1 p;
                        Game.Instance.Scene.Add(p = new Props.Pebble1 { Translation = new Vector3(x, y, StartPosition.Z), Scale = new Vector3(1, 1, 10) });
                        pebbles.Add(p);
                    }
            #endif
            effects.Clear();
        }