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; } } }
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(); } }
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; } } }