예제 #1
0
        public override void Update(Map map, Guid EntityId)
        {
            if (TicksToLive == 0)
            {
                map.LoadedEntities.TryRemove(EntityId, out GameEntity value);
                return;
            }
            TicksToLive--;

            switch (DirectionFacing)
            {
            case BasicDirections.North:
                MoveWithTileCollision(map, (0, -0.05), true, false);
                break;

            case BasicDirections.South:
                MoveWithTileCollision(map, (0, 0.05), true, false);
                break;

            case BasicDirections.West:
                MoveWithTileCollision(map, (-0.05, 0), true, false);
                break;

            case BasicDirections.East:
                MoveWithTileCollision(map, (0.05, 0), true, false);
                break;

            case BasicDirections.NorthWest:
                MoveWithTileCollision(map, (-0.05, -0.05), true, false);
                break;

            case BasicDirections.NorthEast:
                MoveWithTileCollision(map, (0.05, -0.05), true, false);
                break;

            case BasicDirections.SouthWest:
                MoveWithTileCollision(map, (-0.05, 0.05), true, false);
                break;

            case BasicDirections.SouthEast:
                MoveWithTileCollision(map, (0.05, 0.05), true, false);
                break;
            }
        }
예제 #2
0
        public override void Update(Map map, Guid objectId)
        {
            if (Keyboard != null)
            {
                (sbyte, sbyte)direction = (0, 0);

                if (Keyboard.Contains(Keys.W))
                {
                    direction = (direction.Item1, (sbyte)(direction.Item2 - 1));
                }
                if (Keyboard.Contains(Keys.S))
                {
                    direction = (direction.Item1, (sbyte)(direction.Item2 + 1));
                }
                if (Keyboard.Contains(Keys.A))
                {
                    direction = ((sbyte)(direction.Item1 - 1), direction.Item2);
                }
                if (Keyboard.Contains(Keys.D))
                {
                    direction = ((sbyte)(direction.Item1 + 1), direction.Item2);
                }

                if (direction.Item1 != 0 && direction.Item2 != 0)
                {
                    double angle = Math.Atan2(direction.Item2, direction.Item1);
                    MoveWithTileCollision(map, (0.05 * Math.Cos(angle), 0.05 * Math.Sin(angle)), false, false);
                }
                else if (direction.Item1 != 0 || direction.Item2 != 0)
                {
                    MoveWithTileCollision(map, (0.05 * direction.Item1, 0.05 * direction.Item2), false, false);
                }

                if (direction.Item1 != 0 || direction.Item2 != 0)
                {
                    switch (direction)
                    {
                    default:
                    case (0, 0):
                        break;

                    case (-1, 0):
                        DirectionFacing = BasicDirections.West;
                        break;

                    case (1, 0):
                        DirectionFacing = BasicDirections.East;
                        break;

                    case (0, -1):
                        DirectionFacing = BasicDirections.North;
                        break;

                    case (0, 1):
                        DirectionFacing = BasicDirections.South;
                        break;

                    case (-1, -1):
                        DirectionFacing = BasicDirections.NorthWest;
                        break;

                    case (1, -1):
                        DirectionFacing = BasicDirections.NorthEast;
                        break;

                    case (1, 1):
                        DirectionFacing = BasicDirections.SouthEast;
                        break;

                    case (-1, 1):
                        DirectionFacing = BasicDirections.SouthWest;
                        break;
                    }
                }

                if (Keyboard.Contains(Keys.Z) && (DateTime.Now - LastAttack).Seconds > 2)
                {
                    LastAttack = DateTime.Now;

                    (double X, double Y)coords = this.Coordinates;
                    (double X, double Y)size   = (1.2, 1.2);

                    if (DirectionFacing == BasicDirections.North ||
                        DirectionFacing == BasicDirections.NorthEast ||
                        DirectionFacing == BasicDirections.NorthWest)
                    {
                        coords.Y -= 1.5;
                    }
                    else if (DirectionFacing == BasicDirections.South ||
                             DirectionFacing == BasicDirections.SouthEast ||
                             DirectionFacing == BasicDirections.SouthWest)
                    {
                        coords.Y += 1.5;
                    }

                    if (DirectionFacing == BasicDirections.West ||
                        DirectionFacing == BasicDirections.NorthWest ||
                        DirectionFacing == BasicDirections.SouthWest)
                    {
                        coords.X -= 1.5;
                    }
                    else if (DirectionFacing == BasicDirections.East ||
                             DirectionFacing == BasicDirections.NorthEast ||
                             DirectionFacing == BasicDirections.SouthEast)
                    {
                        coords.X += 1.5;
                    }


                    map.LoadedEntities.TryAdd(Guid.NewGuid(), new SlashAttack()
                    {
                        AttackPower     = 1,
                        Coordinates     = coords,
                        CreatorObjectId = objectId,
                        DirectionFacing = this.DirectionFacing,
                        Size            = size,
                        TicksToLive     = 35
                    });
                }
            }

            base.Update(map, objectId);
        }