A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefaultWorldGen.h 1.1KB

123456789101112131415161718192021222324252627282930313233
  1. #pragma once
  2. #include <swan/swan.h>
  3. #include <PerlinNoise/PerlinNoise.hpp>
  4. class DefaultWorldGen: public Swan::WorldGen {
  5. public:
  6. class Factory: public Swan::WorldGen::Factory {
  7. public:
  8. WorldGen *create(Swan::World &world) override { return new DefaultWorldGen(world); }
  9. };
  10. DefaultWorldGen(Swan::World &world):
  11. tGrass_(world.getTileID("core::grass")),
  12. tDirt_(world.getTileID("core::dirt")),
  13. tStone_(world.getTileID("core::stone")),
  14. tAir_(world.getTileID("core::air")),
  15. tTreeTrunk_(world.getTileID("core::tree-trunk")),
  16. tLeaves_(world.getTileID("core::leaves")),
  17. bgCave_(world.resources_.getImage("core::background-cave")) {}
  18. void drawBackground(const Swan::Context &ctx, Swan::Win &win, Swan::Vec2 pos) override;
  19. SDL_Color backgroundColor(Swan::Vec2 pos) override;
  20. void genChunk(Swan::WorldPlane &plane, Swan::Chunk &chunk) override;
  21. Swan::BodyTrait::HasBody *spawnPlayer(Swan::WorldPlane &plane) override;
  22. private:
  23. Swan::Tile::ID genTile(Swan::TilePos pos);
  24. Swan::Tile::ID tGrass_, tDirt_, tStone_, tAir_, tTreeTrunk_, tLeaves_;
  25. Swan::ImageResource &bgCave_;
  26. siv::PerlinNoise perlin_ = siv::PerlinNoise(100);
  27. };