public static GameWorld CreatePlanet(GameSession session, int planetId) { var w = new GameWorld(session); // Planet info var _info = new PlanetInfo(); _info.Randomize(planetId); w.Planet = _info; w.AddComponent(new BackgroundComponent()); w.AddComponent(new WeatherComponent()); w.AddComponent(new DaylightComponent()); w.AddComponent(new TerrainComponent() { Seed = _info.TerrainSeed }); var terrain = w.GetComponent <TerrainComponent>(); w._camera.Position.Y = terrain.HeightMap(0); // Make the world less empty { var player = w.CreateEntity("player"); player.GetComponent <BodyComponent>().LegPosition = new Vector2(0, terrain.HeightMap(0)); player.GetComponent <InventoryComponent>().AddItem(Item.Create("test_axe")); player.GetComponent <InventoryComponent>().AddItem(Item.Create("test_bow")); var slime = w.CreateEntity("slime"); slime.GetComponent <BodyComponent>().LegPosition = new Vector2(600, terrain.HeightMap(600)); } //CameraControls = true; return(w); }
public override void DrawWeatherEffects(GameWorld world, SpriteBatch spriteBatch) { int x = (int)world.Camera.BoundingBox.Left; x -= Helper.NegModulo(x, X_DELTA); for (int dx = 0; x + dx < world.Camera.BoundingBox.Right; dx += X_DELTA) { var terrain = world.GetComponent <TerrainComponent>(); float height = terrain != null?terrain.HeightMap(x + dx) : 0; float offset = Y_DELTA * (1 - ((Time + (float)Math.Sin(Helper.Hash(x + dx))) % 1f)); for (int i = 0; i < Math.Max(height - world.Camera.BoundingBox.Top, 0) / Y_DELTA; ++i) { spriteBatch.Draw(ContentLoader.Pixel, new Vector2(x + dx, height - offset - i * Y_DELTA), null, Color.Blue, 0, new Vector2(0.5f, 1f), new Vector2(1, 8f), SpriteEffects.None, 0f); } } }