Esempio n. 1
0
        public BCharacter(Vector2 position, BTexture spriteSheet, RectangleF spriteBox, BMovementType movementType) : base(position, spriteSheet, spriteBox)
        {
            this.movementType = movementType;
            positionGoto      = position;
            velocity          = Vector2.Zero;
            currentState      = BEntityState.Idle;
            maxMovementSpeed  = 20.0f;
            maxHealth         = 200;
            currentHealth     = maxHealth;

            path     = null;
            pathNode = null;
        }
Esempio n. 2
0
        public BCharacter(Vector2 position, BTexture spriteSheet) : base(position, spriteSheet)
        {
            movementType     = BMovementType.MoveToPosition;
            positionGoto     = position;
            velocity         = Vector2.Zero;
            currentState     = BEntityState.Idle;
            maxMovementSpeed = 20.0f;
            maxHealth        = 200;
            currentHealth    = maxHealth;

            path     = null;
            pathNode = null;
        }
Esempio n. 3
0
        public void HandleMovement(double delta)
        {
            if (this.movementType == BMovementType.MoveToPosition)
            {
                if (positionGoto.Y - this.position.Y >= 0.1f)
                {
                    velocity.Y = Math.Min(maxMovementSpeed, (positionGoto.Y - this.position.Y));
                }
                else if (this.position.Y - positionGoto.Y >= 0.1f)
                {
                    velocity.Y = Math.Max(-maxMovementSpeed, -(this.position.Y - positionGoto.Y));
                }
                else
                {
                    velocity.Y = 0.0f;
                }

                if (positionGoto.X - this.position.X >= 0.1f)
                {
                    velocity.X = Math.Min(maxMovementSpeed, (positionGoto.X - this.position.X));
                }
                else if (this.position.X - positionGoto.X >= 0.1f)
                {
                    velocity.X = Math.Max(-maxMovementSpeed, -(this.position.X - positionGoto.X));
                }
                else
                {
                    velocity.X = 0.0f;
                }
            }
            else if (this.movementType == BMovementType.FollowPath)
            {
                if (path != null)
                {
                    if (pathNode == null && path.DestNode.Parent != null)
                    {
                        pathNode = path.DestNode.Parent;
                    }

                    if (pathNode.Parent != null)
                    {
                        Vector2 nodeVec = new Vector2((pathNode.X * path.TileSizeX) + (path.TileSizeX / 2), (pathNode.Y * path.TileSizeY) + (path.TileSizeY / 2));
                        if (Vector2.Distance(nodeVec, position) > 10.0f)
                        {
                            Vector2 dir = new Vector2(nodeVec.X, nodeVec.Y) - position;
                            MoveInDirection(dir);
                        }
                        else
                        {
                            pathNode      = pathNode.Parent;
                            path.DestNode = pathNode;
                        }
                    }
                    else
                    {
                        velocity       = Vector2.Zero;
                        path.DestNode  = null;
                        path.StartNode = null;
                    }
                }
            }

            if (velocity == Vector2.Zero)
            {
                currentState = BEntityState.Idle;
            }
            if (velocity.Y > 0f)
            {
                if (velocity.X > 0f)
                {
                    if (velocity.X > velocity.Y)
                    {
                        currentState = BEntityState.MovingR;
                    }
                    else if (velocity.X < velocity.Y)
                    {
                        currentState = BEntityState.MovingD;
                    }
                }
                if (velocity.X < 0f)
                {
                    if (-velocity.X > velocity.Y)
                    {
                        currentState = BEntityState.MovingL;
                    }
                    else if (-velocity.X < velocity.Y)
                    {
                        currentState = BEntityState.MovingD;
                    }
                }
            }
            else if (velocity.Y < 0f)
            {
                if (velocity.X > 0f)
                {
                    if (velocity.X > -velocity.Y)
                    {
                        currentState = BEntityState.MovingR;
                    }
                    else if (velocity.X < -velocity.Y)
                    {
                        currentState = BEntityState.MovingU;
                    }
                }
                if (velocity.X < 0f)
                {
                    if (-velocity.X > -velocity.Y)
                    {
                        currentState = BEntityState.MovingL;
                    }
                    else if (-velocity.X < -velocity.Y)
                    {
                        currentState = BEntityState.MovingU;
                    }
                }
            }
            else
            {
                if (velocity.X > 0f)
                {
                    currentState = BEntityState.MovingR;
                }
                if (velocity.X < 0f)
                {
                    currentState = BEntityState.MovingL;
                }
            }

            velocity       = new Vector2(Maths.Clamp(velocity.X, -MaxMovementSpeed, MaxMovementSpeed), Maths.Clamp(velocity.Y, -MaxMovementSpeed, MaxMovementSpeed));
            this.position += (velocity * (float)delta);
        }