Пример #1
0
 public override CollResult RedirectedCheckAgainst(zCollisionPrimitive other, EntityManager.Transform myRoot, EntityManager.Transform hisRoot)
 {
     CollResult ret = new CollResult();
     ret.collided = false;
     ret.normal = Vector2.Zero;
     return ret;
 }
Пример #2
0
    public override CollResult CheckAgainst(zCollisionPrimitive other, EntityManager.Transform myRoot, EntityManager.Transform hisRoot)
    {
        //Transform both into correct space
        if(other is zCollisionAABB)
        {
            CollResult ret = new CollResult();
            ret.collided = false;
            ret.normal = Vector2.Zero;
            Rectangle mine = m_rect;
            mine.Offset((int)myRoot.GetPos().X, (int)myRoot.GetPos().Y);

            Rectangle his = (other as zCollisionAABB).m_rect;
            his.Offset((int)hisRoot.GetPos().X, (int)hisRoot.GetPos().Y);

            if(mine.Intersects(his))
            {
                ret.collided = true;
                ret.normal = new Vector2(his.Center.X - mine.Center.X, his.Center.Y - mine.Center.Y);
                ret.normal.Normalize();
            }
            return ret;
        }

        //Oh no we can't handle any others.
        return other.RedirectedCheckAgainst(this, hisRoot, myRoot); //Note the swap of transforms
    }
Пример #3
0
    public override CollResult CheckAgainst(zCollisionPrimitive other, EntityManager.Transform myRoot, EntityManager.Transform hisRoot)
    {
        //Transform both into correct space
        if (other is zCollisionAABB)
        {
            CollResult ret = new CollResult();
            ret.collided = false;
            ret.normal   = Vector2.Zero;
            Rectangle mine = m_rect;
            mine.Offset((int)myRoot.GetPos().X, (int)myRoot.GetPos().Y);

            Rectangle his = (other as zCollisionAABB).m_rect;
            his.Offset((int)hisRoot.GetPos().X, (int)hisRoot.GetPos().Y);

            if (mine.Intersects(his))
            {
                ret.collided = true;
                ret.normal   = new Vector2(his.Center.X - mine.Center.X, his.Center.Y - mine.Center.Y);
                ret.normal.Normalize();
            }
            return(ret);
        }

        //Oh no we can't handle any others.
        return(other.RedirectedCheckAgainst(this, hisRoot, myRoot)); //Note the swap of transforms
    }
Пример #4
0
        public void CheckCollisionsAgainst(CollisionComponent other)
        {
            int collision = 0;

            for (int i = 0; i < prims.Count; ++i)
            {
                for (int y = 0; y < other.prims.Count; ++y)
                {
                    CollResult c = prims[i].CheckAgainst(other.prims[y], tran, other.tran);
                    if (c.collided)
                    {
                        if (callback != null)
                        {
                            callback(this, other, c, collision);
                        }
                        CollResult otherC = c;
                        otherC.normal *= -1;
                        if (other.callback != null)
                        {
                            other.callback(other, this, otherC, collision++);
                        }
                    } //Note, currently multiple callbacks can be made, each with their own index
                }
            }
        }
Пример #5
0
 public void PhysicsCallback(CollisionManager.CollisionComponent mine, CollisionManager.CollisionComponent other, CollResult coll, int collNumber)
 {
     if(other.CheckFlag(CollisionManager.FLAGS.GROUND))
     {
         //Move position to above the path (bottom of collision should be above the ground.  Above being relative to normal
         //set velocity to be speed magnitude perpendicular to normal of the primitive it's colliding against,
     }
 }
Пример #6
0
    override public CollResult RedirectedCheckAgainst(zCollisionPrimitive other, EntityManager.Transform myRoot, EntityManager.Transform hisRoot)
    {
        CollResult ret = new CollResult();

        ret.collided = false;
        ret.normal   = Vector2.Zero;
        return(ret);
    }
Пример #7
0
 public void RayCastCallBack(CollisionManager.CollisionComponent mine, CollisionManager.CollisionComponent other, CollResult coll, int collNumber)
 {
     if (other.CheckFlag(CollisionManager.FLAGS.GROUND))
     {
     }
 }
Пример #8
0
 public void PhysicsCallback(CollisionManager.CollisionComponent mine, CollisionManager.CollisionComponent other, CollResult coll, int collNumber)
 {
     if (other.CheckFlag(CollisionManager.FLAGS.GROUND))
     {
         //Move position to above the path (bottom of collision should be above the ground.  Above being relative to normal
         //set velocity to be speed magnitude perpendicular to normal of the primitive it's colliding against,
     }
 }
Пример #9
0
        public void RayCastCallBack(CollisionManager.CollisionComponent mine, CollisionManager.CollisionComponent other, CollResult coll, int collNumber)
        {
            if(other.CheckFlag(CollisionManager.FLAGS.GROUND))
            {

            }
        }