public override void DebugRender(Batcher batcher) { base.DebugRender(batcher); foreach (Connection c in connections.Values) { batcher.DrawLine(Position, Position + Direction8Ext.ToVector2(c.direction) * 50, Color.Chartreuse, 5); } if (roadSystem.truckTargetNode == this) { batcher.DrawHollowRect(new Rectangle((int)Position.X - 25, (int)Position.Y - 25, 50, 50), Color.White, 5); } }
public override void Update(float deltaTime) { targetPosition = _context.currentNode.Position + Node.GetOffsetBefore(_context.currentNode.Position, startPos); var distance = targetPosition - _context.Position; var direction = distance.Normalized(); _context.currentDirection = Direction8Ext.FromVector2(distance); if (!IsBlocked()) { var align = GetAlignVector(targetPosition) / 3; _context.Move(direction.Normalized() * Time.DeltaTime * speed + align); } if (distance.Length() < 10) { _machine.ChangeState <StateWaiting>(); } }
public override void Update(float deltaTime) { var offset = Node.GetOffsetAfter(_context.currentNode, _context.previousNode); turnTarget = _context.previousNode.Position + offset; var distance = (turnTarget - _context.Position); var direction = distance.Normalized(); _context.currentDirection = Direction8Ext.FromVector2(distance); if (!IsBlocked()) { _context.Move(direction * Time.DeltaTime * speed); } if (distance.Length() < 10) { // Finish turn _context.stateMachine.OnTurnFinished?.Invoke(); _machine.ChangeState <StateDriving>(); } }
public static Direction8 GetDirectionTo(Vector2 a, Vector2 b) => Direction8Ext.FromVector2(a - b);