コード例 #1
0
 public abstract bool collidesWith(Collidable other);
コード例 #2
0
        public override void LoadContent(ContentManager contentMan)
        {
            Matrix shapeTransform = Matrix.Identity;
            model = loadedModels[type];

            switch (type)
            {
                case 0:
                    collide = new AARectangleCollidable(this.position, 485);
                    this.position.Y += 220;
                    shapeTransform =  Matrix.CreateScale(130) * Matrix.CreateTranslation(this.position);
                    break;
                case 1:
                    collide = new CircleCollidable(this.position, 265);
                    this.position.Y += 253;
                    shapeTransform = Matrix.CreateScale(100) * Matrix.CreateRotationX((float)Math.PI / 2) * Matrix.CreateTranslation(this.position);
                    break;
                case 2:
                    collide = new CircleCollidable(this.position, 165);
                    this.position.Y += 190;
                    shapeTransform = Matrix.CreateScale(80) * Matrix.CreateRotationX((float)Math.PI / 2) * Matrix.CreateTranslation(this.position);
                    break;
            }

            boneOriginTransforms = new Matrix[model.Bones.Count];
            for (int i = 0; i < model.Bones.Count; i++)
            {
                boneOriginTransforms[i] = model.Bones[i].Transform * shapeTransform;
            }

            tex = loadedTextures[textype];

            colliderDrawer = new ColliderDrawer(this.game, this.getCollidable());
        }
コード例 #3
0
 public override bool collidesWith(Collidable other)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
 public void update(Collidable source)
 {
     vertices = source.getPolygonVertices();
     indices = source.getPolygonLineList();
 }
コード例 #5
0
 public ColliderDrawer(Game g, Collidable source)
 {
     game = g;
     vertices = source.getPolygonVertices();
     indices = source.getPolygonLineList();
 }
コード例 #6
0
        public override bool collidesWith(Collidable other)
        {
            VertexPositionColor[] selfvertices = this.getPolygonVertices();

            if (other is CircleCollidable)
            {
                CircleCollidable o = (CircleCollidable)other;

                Vector2 last = Utils.castVector3XZ(selfvertices[0].Position);

                for (int i = 0; i <= selfvertices.Length; i++)
                {
                    Vector2 current = Utils.castVector3XZ(selfvertices[i%selfvertices.Length].Position);
                    if (Utils.pointInCircle(current, Utils.castVector3XZ(o.origin), o.radius)) return true;

                    // check midpoint
                    Vector2 mid = (current + last) / 2;
                    if (Utils.pointInCircle(mid, Utils.castVector3XZ(o.origin), o.radius)) return true;

                    // chekc mid1
                    Vector2 mid1 = (mid + current) / 2;
                    if (Utils.pointInCircle(mid1, Utils.castVector3XZ(o.origin), o.radius)) return true;

                    // chekc mid2
                    Vector2 mid2 = (mid + last) / 2;
                    if (Utils.pointInCircle(mid2, Utils.castVector3XZ(o.origin), o.radius)) return true;

                    last = current;
                }
                return false;
            }
            else if (other is AARectangleCollidable)
            {
                AARectangleCollidable o = (AARectangleCollidable)other;

                Vector2 last = Utils.castVector3XZ(selfvertices[0].Position);

                for (int i = 0; i <= selfvertices.Length; i++)
                {
                    Vector2 current = Utils.castVector3XZ(selfvertices[i % selfvertices.Length].Position);
                    if (Utils.pointInAARectangle(current, Utils.castVector3XZ(o.origin), o.width, o.length)) return true;

                    // check midpoint
                    Vector2 mid = (current + last) / 2;
                    if (Utils.pointInAARectangle(mid, Utils.castVector3XZ(o.origin), o.width, o.length)) return true;

                    // chekc mid1
                    Vector2 mid1 = (mid + current) / 2;
                    if (Utils.pointInAARectangle(mid1, Utils.castVector3XZ(o.origin), o.width, o.length)) return true;

                    // chekc mid2
                    Vector2 mid2 = (mid + last) / 2;
                    if (Utils.pointInAARectangle(mid2, Utils.castVector3XZ(o.origin), o.width, o.length)) return true;

                    last = current;
                }
                return false;

            }
            return false;
        }