public void SetPositionWithPoint() { var start = new PointF(0, 0); var end = new PointF(5.1f, 3.66f); Assert.AreEqual(start, _position.Position); _position.SetPosition(end); Assert.AreEqual(end, _position.Position); }
public void Collision_FloatingPointError_StillWorks() { var hitbox = new CollisionBox(-7.5f, -9f, 15, 21); hitbox.Name = "Test"; hitbox.Environment = true; hitbox.PushAway = true; _position.SetPosition(5f, 115.999992f); _collision.AddBox(hitbox); _collision.Message(new HitBoxMessage(EntityMock.Object, new List <CollisionBox>(), new HashSet <string>() { "Test" }, false)); var layer = new Mock <IScreenLayer>(); layer.SetupGet(l => l.Stage).Returns(Container); var tileset = new Common.Tileset() { TileSize = 16 }; var backTile = new Common.Tile(1, new Common.TileSprite(tileset)); var blankSquare = new MapSquare(layer.Object, backTile, 0, 0, 16); Screen.Setup(s => s.SquareAt(It.IsAny <float>(), It.IsAny <float>())).Returns(blankSquare); var blockTile = new Common.Tile(2, new Common.TileSprite(tileset)); blockTile.Properties = new Common.TileProperties() { Blocking = true }; var blockSquare = new MapSquare(layer.Object, blockTile, 0, 8, 16); Screen.Setup(s => s.SquareAt(It.IsInRange <float>(0, 16, Range.Inclusive), It.IsInRange <float>(128, 144, Range.Inclusive))).Returns(blockSquare); Assert.IsFalse(_collision.BlockBottom); Container.Tick(); Assert.IsTrue(_collision.BlockBottom); Container.Tick(); Assert.IsTrue(_collision.BlockBottom); Container.Tick(); Assert.IsTrue(_collision.BlockBottom); }
private Effect ParsePositionBehavior(PositionEffectAxisInfo axisInfo, Axis axis) { Effect action = e => { }; var baseVar = axisInfo.BaseVar; var offsetVar = axisInfo.OffsetVar; if (baseVar != null) { if (axis == Axis.X) { action = entity => { var x = CheckNumericVar(entity, baseVar); if (x.HasValue) { PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(x.Value, pos.Position.Y)); } } } } ; else { action = entity => { var y = CheckNumericVar(entity, baseVar); if (y.HasValue) { PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X, y.Value)); } } } }; } else if (axisInfo.Base == null) { action = entity => { PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null && entity.Parent != null) { PositionComponent parentPos = entity.Parent.GetComponent <PositionComponent>(); if (parentPos != null) { pos.SetPosition(axis == Axis.X ? new PointF(parentPos.Position.X, pos.Position.Y) : new PointF(pos.Position.X, parentPos.Position.Y)); } } }; } else { if (axis == Axis.X) { action = entity => { PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(axisInfo.Base.Value, pos.Position.Y)); } } } ; else { action = entity => { PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X, axisInfo.Base.Value)); } } }; } if (axisInfo.Offset != null || offsetVar != null) { switch (axisInfo.OffsetDirection) { case OffsetDirection.Inherit: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null && entity.Parent != null) { Direction offdir = entity.Parent.Direction; switch (offdir) { case Direction.Down: pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y + offset)); break; case Direction.Up: pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y - offset)); break; case Direction.Left: pos.SetPosition(new PointF(pos.Position.X - offset, pos.Position.Y)); break; case Direction.Right: pos.SetPosition(new PointF(pos.Position.X + offset, pos.Position.Y)); break; } } }; break; case OffsetDirection.Input: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); InputComponent input = entity.GetComponent <InputComponent>(); if (input != null && pos != null) { if (axis == Axis.Y) { if (input.Down) { pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y + offset)); } else if (input.Up) { pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y - offset)); } } else { if (input.Left) { pos.SetPosition(new PointF(pos.Position.X - offset, pos.Position.Y)); } else if (input.Right || (!input.Up && !input.Down)) { pos.SetPosition(new PointF(pos.Position.X + offset, pos.Position.Y)); } } } }; break; case OffsetDirection.Left: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X - offset, pos.Position.Y)); } }; break; case OffsetDirection.Right: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X + offset, pos.Position.Y)); } }; break; case OffsetDirection.Down: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y + offset)); } }; break; case OffsetDirection.Up: action += entity => { var offset = axisInfo.Offset ?? CheckNumericVar(entity, offsetVar) ?? 0; PositionComponent pos = entity.GetComponent <PositionComponent>(); if (pos != null) { pos.SetPosition(new PointF(pos.Position.X, pos.Position.Y - offset)); } }; break; } } return(action); }