示例#1
0
        public static Entity CreatePlayerEntity(Vector2 Position)
        {
            Entity player = Entity.CreateNew();

            player.Add(new PlayerInputComponent());
            var component = new TilePositionComponent(Position);

            LabyrinthianGame.PlayerPosition = component;
            player.Add(component);
            player.Add(new TransformComponent());
            player.Add(new PlayerSpriteComponent(LabyrinthianGame.Game.Content.Load <Texture2D>(@"Textures/PlayerFemale"), new SpriteAnimator(SpriteAnimator.PlayerRectangles)
            {
                TimeBetweenAnimationInMs = 200
            }));
            player.Add(new BoxColliderComponent(new Point(6, 3), new Point(20, 26)));
            player.Add(new RigidBodyComponent(BodyType.Dynamic));
            player.Add(new LightSourceComponent(100)
            {
                Offset = new Point(16, 16)
            });
            player.Add(new CameraComponent(LabyrinthianGame.Game.GraphicsDevice.Viewport));
            player.Add(new LevelCompleterComponent());

            return(player);
        }
 protected override void Entity_ComponentRemoved(Entity sender, ComponentEventArgs e)
 {
     if (e.Component == this.entityPosition)
     {
         this.entityPosition = null;
     }
     base.Entity_ComponentRemoved(sender, e);
 }
 protected override void Entity_ComponentAdded(Entity sender, ComponentEventArgs e)
 {
     if (e.Component is TilePositionComponent p)
     {
         this.entityPosition = p;
     }
     base.Entity_ComponentAdded(sender, e);
 }
示例#4
0
        static public bool IsOnFloor(GameEntity avatarEntity, GameContext gameContext)
        {
            if (avatarEntity.position.y % TilePositionComponent.TileSize == TilePositionComponent.TileSize - 1)
            {
                var playerTilePosition = TilePositionComponent.TransformWorldPositionToTilePosition(new IntVector2(avatarEntity.position.x, avatarEntity.position.y));
                var tileBelowPlayer    = playerTilePosition.BelowTilePosition();
                return(gameContext.GetEntitiesWithTilePosition(tileBelowPlayer).Count > 0);
            }

            return(false);
        }
示例#5
0
        public void Execute()
        {
            foreach (var entity in allMovablesGroup.GetEntities())
            {
                if (entity.rigidbody.speedX != 0 || entity.rigidbody.speedY != 0)
                {
                    var newX = entity.position.x + entity.rigidbody.speedX;
                    var newY = entity.position.y + entity.rigidbody.speedY;

                    var newTilePosition = TilePositionComponent.TransformWorldPositionToTilePosition(new IntVector2(newX, newY));

                    if (TileUtils.IsSolid(newX, newY, gameContext))
                    {
                        if (entity.rigidbody.speedY > 0)
                        {
                            entity.rigidbody.speedY = 0;
                            newY = newTilePosition.ToTopLeftWorldPosition().y - 1;
                        }
                    }

                    entity.ReplacePosition(newX, newY);
                }

                if (entity.rigidbody.useGravity)
                {
                    if (!AvatarUtils.IsOnFloor(entity, gameContext))
                    {
                        entity.rigidbody.speedY++;
                        if (entity.rigidbody.speedY > 10)
                        {
                            entity.rigidbody.speedY = 10;
                        }
                    }
                    else
                    {
                        entity.rigidbody.speedY = 0;
                    }
                }
            }
        }
示例#6
0
        static public bool IsSolid(IntVector2 worldPosition, GameContext gameContext)
        {
            var tilePosition = TilePositionComponent.TransformWorldPositionToTilePosition(worldPosition);

            return(IsSolid(tilePosition, gameContext));
        }
示例#7
0
 private Rectangle GetDrawRectangle(TilePositionComponent tilePosition)
 {
     return(new Rectangle(tilePosition.TopLeftWorldPosition.ToPoint(), new Point(TilePositionComponent.TileSize, TilePositionComponent.TileSize)));
 }
示例#8
0
 public IntVector2 ToBottomMiddleWorldPosition()
 {
     return(TilePositionComponent.TransformTilePositionToBottomMiddleWorldPosition(this));
 }
示例#9
0
 public IntVector2 ToCenteredWorldPosition()
 {
     return(TilePositionComponent.TransformTilePositionToCenteredWorldPosition(this));
 }