Ejemplo n.º 1
0
        public Sprite(Image sprite, Transformation transformation, AnimationScript animation, SATCollisionVolume collider)
        {
            this.Image = sprite;
            SubRect = new Rectangle(0, 0, sprite.Texture.Width, sprite.Texture.Height);

            this.Transformation = new Transformation(transformation);
            this.AnimationScript = animation;
            this.CollisionVolume = collider;

            OnDraw += this.Draw;

            if (CollisionVolume != null)
            {
                OnUpdate += delegate(GameTime time) { collider.TransformCollisionVolume(this.Transformation); };
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// An Actor can be drawn on screen, translated around arbitrarily, collide with other game objects, and process update logic every frame.
 /// </summary>
 /// <param name="sprite">The artwork the actor will use during Draw.</param>
 /// <param name="transformation">Positioning information.</param>
 /// <param name="collider">A collision shape that mirrors the transformation.</param>
 public Actor(Image sprite, Transformation transformation, SATCollisionVolume collider)
     : base(sprite, transformation, collider)
 {
 }
Ejemplo n.º 3
0
 public Sprite(Image sprite, Transformation transformation, SATCollisionVolume collider)
     : this(sprite, transformation, null, collider)
 {
 }
Ejemplo n.º 4
0
        static void TestCollisionVolume()
        {
            //Two non-touching squares
            SATCollisionVolume cv = new SATCollisionVolume();
            SATCollisionVolume cv2 = new SATCollisionVolume();

            cv.AddVertex(Vector2.Zero);
            cv.AddVertex(new Vector2(0, 1));
            cv.AddVertex(Vector2.One);
            cv.AddVertex(new Vector2(1, 0));

            cv2.AddVertex(new Vector2(2, 0));
            cv2.AddVertex(new Vector2(2, 1));
            cv2.AddVertex(new Vector2(3, 1));
            cv2.AddVertex(new Vector2(3, 0));

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == false);

            //Two overlapping squares
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(Vector2.Zero);
            cv.AddVertex(new Vector2(0, 1));
            cv.AddVertex(Vector2.One);
            cv.AddVertex(new Vector2(1, 0));

            cv2.AddVertex(new Vector2(0.9f, 0));
            cv2.AddVertex(new Vector2(0.9f, 1));
            cv2.AddVertex(new Vector2(2, 1));
            cv2.AddVertex(new Vector2(2, 0));

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == true);

            //two non-overlapping triangles
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(0, 0);
            cv.AddVertex(0, 1);
            cv.AddVertex(1, 1);

            cv2.AddVertex(2, 0);
            cv2.AddVertex(3, 1);
            cv2.AddVertex(3, 0);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == false);

            //two overlapping triangles
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(0, 0);
            cv.AddVertex(0, 1);
            cv.AddVertex(1, 1);

            cv2.AddVertex(0, 0);
            cv2.AddVertex(1, 1);
            cv2.AddVertex(1, 0);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == true);

            //two overlapping triangles that are both defined counterclockwise
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(0, 0);
            cv.AddVertex(1, 1);
            cv.AddVertex(0, 1);

            cv2.AddVertex(0, 0);
            cv2.AddVertex(1, 0);
            cv2.AddVertex(1, -1);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == true);

            //two overlapping triangles that are both defined in negative space counterclockwise
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(0, 0);
            cv.AddVertex(-1, -1);
            cv.AddVertex(0, -1);

            cv2.AddVertex(0, 0);
            cv2.AddVertex(-1, 0);
            cv2.AddVertex(-1, -1);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == true);

            //two overlapping triangles that are both defined in negative space
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();

            cv.AddVertex(0, 0);
            cv.AddVertex(0, 1);
            cv.AddVertex(-1, 1);

            cv2.AddVertex(0, 0);
            cv2.AddVertex(-1, 1);
            cv2.AddVertex(-1, 0);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == true);

            //two non-overlapping triangles on opposite sides of the x axis
            cv = new SATCollisionVolume();
            cv2 = new SATCollisionVolume();
            cv.AddVertex(0, 0);
            cv.AddVertex(0, 1);
            cv.AddVertex(1, 1);

            cv2.AddVertex(0, -1);
            cv2.AddVertex(1, -1);
            cv2.AddVertex(1, -2);

            System.Diagnostics.Debug.Assert(cv.TestCollision(cv2) == false);
        }