public abstract bool collidesWith(Collidable other);
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()); }
public override bool collidesWith(Collidable other) { throw new NotImplementedException(); }
public void update(Collidable source) { vertices = source.getPolygonVertices(); indices = source.getPolygonLineList(); }
public ColliderDrawer(Game g, Collidable source) { game = g; vertices = source.getPolygonVertices(); indices = source.getPolygonLineList(); }
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; }