void CheckHorizontal() { var moveX = movementDelta.x; var rayLength = Mathf.Abs(moveX) + SKIN_WIDTH; var directionX = Mathf.Sign(moveX); var rayDir = directionX * Vector2.right; var collisionFlag = directionX == 1 ? CollisionInfo.Right : CollisionInfo.Left; var rayOrigin = directionX == 1 ? actorBounds.BottomRight() : actorBounds.BottomLeft(); rayOrigin.y += StepHeight; for (var i = 0; i < horizontalRayCount; i++) { #if DEBUG Debug.DrawRay(rayOrigin, rayDir * rayLength, Color.yellow); #endif var rayHit = Physics2D.Raycast(rayOrigin, rayDir, rayLength, CollisionMask); rayOrigin.y += horizontalRaySpacing; if (!rayHit) { continue; } // Propbably implement some slopstuff here? rayLength = rayHit.distance; moveX = (rayLength - SKIN_WIDTH) * directionX; collisions |= collisionFlag; } movementDelta.x = moveX; }
private void DrawChatLine(GuiSpriteBatch graphics, string text, float alpha, ref Vector2 offset) { var size = Font.MeasureString(text); var renderPos = Bounds.BottomLeft() + offset; graphics.FillRectangle(new Rectangle(renderPos.ToPoint(), new Point(Width, (int)Math.Ceiling(size.Y + 2))), new Color(Color.Black, alpha * 0.5f)); Font.DrawString(graphics.SpriteBatch, text, renderPos + new Vector2(0, 2), TextColor.White, opacity: alpha); offset.Y -= (size.Y + 2); }
public void TestBounds() { Bounds b = new Bounds(new Vector3(-2, 2, -2), new Vector3(4, 6, 8)); Assert.That(b.TopLeft(), Is.EqualTo(new Vector3(-4, 5, -2))); Assert.That(b.TopCenter(), Is.EqualTo(new Vector3(-2, 5, -2))); Assert.That(b.TopRight(), Is.EqualTo(new Vector3(0, 5, -2))); Assert.That(b.MiddleLeft(), Is.EqualTo(new Vector3(-4, 2, -2))); Assert.That(b.MiddleCenter(), Is.EqualTo(new Vector3(-2, 2, -2))); Assert.That(b.MiddleRight(), Is.EqualTo(new Vector3(0, 2, -2))); Assert.That(b.BottomLeft(), Is.EqualTo(new Vector3(-4, -1, -2))); Assert.That(b.BottomCenter(), Is.EqualTo(new Vector3(-2, -1, -2))); Assert.That(b.BottomRight(), Is.EqualTo(new Vector3(0, -1, -2))); Assert.That(b.TopLeft(2), Is.EqualTo(new Vector3(-6, 7, -2))); Assert.That(b.TopCenter(2), Is.EqualTo(new Vector3(-2, 7, -2))); Assert.That(b.TopRight(2), Is.EqualTo(new Vector3(2, 7, -2))); Assert.That(b.MiddleLeft(2), Is.EqualTo(new Vector3(-6, 2, -2))); Assert.That(b.MiddleCenter(2), Is.EqualTo(new Vector3(-2, 2, -2))); Assert.That(b.MiddleRight(2), Is.EqualTo(new Vector3(2, 2, -2))); Assert.That(b.BottomLeft(2), Is.EqualTo(new Vector3(-6, -3, -2))); Assert.That(b.BottomCenter(2), Is.EqualTo(new Vector3(-2, -3, -2))); Assert.That(b.BottomRight(2), Is.EqualTo(new Vector3(2, -3, -2))); }
public void TestBoundsZero() { Bounds b = new Bounds(); Assert.That(b.TopLeft(), Is.EqualTo(Vector3.zero)); Assert.That(b.TopCenter(), Is.EqualTo(Vector3.zero)); Assert.That(b.TopRight(), Is.EqualTo(Vector3.zero)); Assert.That(b.MiddleLeft(), Is.EqualTo(Vector3.zero)); Assert.That(b.MiddleCenter(), Is.EqualTo(Vector3.zero)); Assert.That(b.MiddleRight(), Is.EqualTo(Vector3.zero)); Assert.That(b.BottomLeft(), Is.EqualTo(Vector3.zero)); Assert.That(b.BottomCenter(), Is.EqualTo(Vector3.zero)); Assert.That(b.BottomRight(), Is.EqualTo(Vector3.zero)); Assert.That(b.TopLeft(2), Is.EqualTo(new Vector3(-2, 2, 0))); Assert.That(b.TopCenter(2), Is.EqualTo(new Vector3(0, 2, 0))); Assert.That(b.TopRight(2), Is.EqualTo(new Vector3(2, 2, 0))); Assert.That(b.MiddleLeft(2), Is.EqualTo(new Vector3(-2, 0, 0))); Assert.That(b.MiddleCenter(2), Is.EqualTo(new Vector3(0, 0, 0))); Assert.That(b.MiddleRight(2), Is.EqualTo(new Vector3(2, 0, 0))); Assert.That(b.BottomLeft(2), Is.EqualTo(new Vector3(-2, -2, 0))); Assert.That(b.BottomCenter(2), Is.EqualTo(new Vector3(0, -2, 0))); Assert.That(b.BottomRight(2), Is.EqualTo(new Vector3(2, -2, 0))); }
public static void AddRect( Bounds b, VertexHelper vh, Color vertexColor = default(Color), Vector2 uv = default(Vector2)) { uv = new Vector2(0.5f, 0.5f); int vertIdx = vh.currentVertCount; vh.AddVert(b.BottomLeft(), vertexColor, uv); vh.AddVert(b.TopLeft(), vertexColor, uv); vh.AddVert(b.BottomRight(), vertexColor, uv); vh.AddVert(b.TopRight(), vertexColor, uv); vh.AddTriangle(vertIdx, vertIdx + 1, vertIdx + 2); vh.AddTriangle(vertIdx + 2, vertIdx + 1, vertIdx + 3); }
public FeaturePosition GetNewFeaturePosition() { /* # = possible position to return * F = actual room floor * FFFFFF * F000000F * F000000F * F000000F * F000000F * FFFFFF */ Vector3IntMinMax rand = new Vector3IntMinMax(); Vector3Int pos = Vector3Int.zero; Direction d = _directions[Random.Range(0, _directions.Count)]; switch (d) { case Direction.Top: rand.Min = Bounds.TopLeft(); rand.Min.y += 1; rand.Max = Bounds.TopRight(); rand.Max.y += 1; pos = rand.GetRandomValue(); break; case Direction.Left: rand.Min = Bounds.BottomLeft(); rand.Min.x -= 1; rand.Max = Bounds.TopLeft(); rand.Max.x -= 1; pos = rand.GetRandomValue(); break; case Direction.Right: rand.Min = Bounds.BottomRight(); rand.Min.x += 1; rand.Max = Bounds.TopRight(); rand.Max.x += 1; pos = rand.GetRandomValue(); break; case Direction.Bottom: rand.Min = Bounds.BottomLeft(); rand.Min.y -= 1; rand.Max = Bounds.BottomRight(); rand.Max.y -= 1; pos = rand.GetRandomValue(); break; } _directions.Remove(d); return(new FeaturePosition(pos.x, pos.y, d)); }