Exemple #1
0
        public override void OnAddedToScene()
        {
            base.OnAddedToScene();

            tileMap = Core.Content.LoadTiledMap(System.IO.Path.Combine(
                                                    Core.Content.RootDirectory,
                                                    "Levels/TileMap1.tmx"));

            tileMapRenderer = AddComponent(new TiledMapRenderer(tileMap));

            tileMapRenderer.SetLayersToRender(new string[] { "Foreground", "Background" });

            tileMapRenderer.PhysicsLayer = (int)Physics.PhysicsLayer.Collidable;

            tileMapRenderer.CollisionLayer = tileMap.GetLayer <TmxLayer>("Collision");

            tileMapRenderer.AddColliders();

            tileMapRenderer.LayerDepth = 1;

            TmxObjectGroup objectsLayer = tileMap.GetObjectGroup("Objects");

            objectsLayer.Visible = false;

            foreach (TmxObject obj in objectsLayer.Objects)
            {
                switch (obj.Type)
                {
                case AvatarObjectType:
                    Avatar avatar = Scene.AddEntity(new Avatar(obj.Position() + TiledObjectOffset));
                    Scene.Camera.AddComponent(new FollowCamera(avatar, FollowCamera.CameraStyle.LockOn));
                    break;

                case SlimeObjectType:
                    Slime slime = Scene.AddEntity(
                        new Slime(
                            obj.Position() + TiledObjectOffset,
                            obj.FullName()));

                    break;
                }
            }
        }
Exemple #2
0
        public void HandleCollisionResult(SwordCollisionResult collisionResult)
        {
            var removedCount = 0;

            foreach (var tile in collisionResult.DetailTiles)
            {
                if (HandleReplaceTileCollision(tile, TileLookupEnum.GrassBush, TileLookupEnum.GrassBushChopped))
                {
                    removedCount++;
                }

                if (HandleReplaceTileCollision(tile, TileLookupEnum.GrassBushPurple, TileLookupEnum.GrassBushChoppedPurple))
                {
                    removedCount++;
                }
            }

            if (removedCount > 0)
            {
                _tiledMapRenderer.RemoveColliders();
                _tiledMapRenderer.AddColliders();
            }
        }
Exemple #3
0
        void IUpdatable.Update()
        {
            Entity.Scene.Camera.Position = new Vector2(Entity.Scene.SceneRenderTargetSize.X / 2,
                                                       Entity.Scene.SceneRenderTargetSize.Y / 2);
            if (_isGrounded)
            {
                if (Input.IsKeyPressed(Keys.Left))
                {
                    _moveDir.X = -1f;
                    if (!CanMove())
                    {
                        _moveDir.X = 0;
                        return;
                    }

                    _sprite.FlipY          = false;
                    Entity.RotationDegrees = 90f;
                }
                else if (Input.IsKeyPressed(Keys.Right))
                {
                    _moveDir.X = 1f;
                    if (!CanMove())
                    {
                        _moveDir.X = 0;
                        return;
                    }

                    _sprite.FlipY          = false;
                    Entity.RotationDegrees = -90f;
                }
                else if (Input.IsKeyPressed(Keys.Up))
                {
                    _moveDir.Y = -1f;
                    if (!CanMove())
                    {
                        _moveDir.Y = 0;
                        return;
                    }

                    _sprite.FlipY          = true;
                    Entity.RotationDegrees = 0f;
                }
                else if (Input.IsKeyPressed(Keys.Down))
                {
                    _moveDir.Y = 1f;
                    if (!CanMove())
                    {
                        _moveDir.Y = 0;
                        return;
                    }

                    _sprite.FlipY          = false;
                    Entity.RotationDegrees = 0f;
                }
            }


            if (_moveDir != Vector2.Zero)
            {
                var             movement = _moveDir * _speed * Time.DeltaTime;
                CollisionResult res;
                if (_mover.Move(movement, out res))
                {
                    var pos  = Entity.Position + new Vector2(-16) * res.Normal;
                    var tile = _tiledMapRenderer.GetTileAtWorldPosition(pos);

                    // the presence of a tilesetTile means we have a tile with custom properties. The only tiles with custom properties are our
                    // wall tiles which cannot be destroyed
                    if (!_destroyedTile && tile != null && tile.TilesetTile == null)
                    {
                        _destroyedTile = true;
                        _tiledMapRenderer.CollisionLayer.RemoveTile(tile.X, tile.Y);
                        _tiledMapRenderer.RemoveColliders();
                        _tiledMapRenderer.AddColliders();
                    }
                    else
                    {
                        _moveDir       = Vector2.Zero;
                        _isGrounded    = true;
                        _destroyedTile = false;
                        Entity.GetComponent <CameraShake>().Shake(8, 0.8f);
                    }
                }
                else
                {
                    _isGrounded = false;
                }
            }
        }