Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
                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>();
                    }
                }
Esempio n. 3
0
                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>();
                    }
                }
Esempio n. 4
0
 public static Direction8 GetDirectionTo(Vector2 a, Vector2 b) => Direction8Ext.FromVector2(a - b);