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.

main.cc 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <swan/swan.h>
  2. #include "DefaultWorldGen.h"
  3. #include "entities/PlayerEntity.h"
  4. #include "entities/ItemStackEntity.h"
  5. class CoreMod: public Swan::Mod {
  6. public:
  7. CoreMod(Swan::World &world): Swan::Mod("core") {
  8. breakListener_ = world.evtTileBreak_.subscribe(
  9. std::bind_front(&CoreMod::onTileBreak, this));
  10. registerSprite("entity/player-running");
  11. registerSprite("entity/player-still");
  12. registerSprite("misc/background-cave");
  13. registerTile({
  14. .name = "stone",
  15. .image = "core::tile/stone",
  16. .droppedItem = "core::stone",
  17. });
  18. registerTile({
  19. .name = "dirt",
  20. .image = "core::tile/dirt",
  21. .droppedItem = "core::dirt",
  22. });
  23. registerTile({
  24. .name = "grass",
  25. .image = "core::tile/grass",
  26. .droppedItem = "core::dirt",
  27. });
  28. registerTile({
  29. .name = "tree-trunk",
  30. .image = "core::tile/tree-trunk",
  31. .droppedItem = "core::tree-trunk",
  32. });
  33. registerTile({
  34. .name = "leaves",
  35. .image = "core::tile/leaves",
  36. });
  37. registerTile({
  38. .name = "torch",
  39. .image = "core::tile/torch",
  40. .isSolid = false,
  41. .lightLevel = 80/255.0,
  42. });
  43. registerItem({
  44. .name = "stone",
  45. .image = "core::tile/stone",
  46. });
  47. registerItem({
  48. .name = "dirt",
  49. .image = "core::tile/dirt",
  50. });
  51. registerItem({
  52. .name = "grass",
  53. .image = "core::tile/grass",
  54. });
  55. registerItem({
  56. .name = "tree-trunk",
  57. .image = "core::tile/tree-trunk",
  58. });
  59. registerWorldGen<DefaultWorldGen>("default");
  60. registerEntity<PlayerEntity>("player");
  61. registerEntity<ItemStackEntity>("item-stack");
  62. }
  63. void onTileBreak(const Swan::Context &ctx, Swan::TilePos pos, Swan::Tile &tile) {
  64. if (tile.droppedItem) {
  65. ctx.plane.spawnEntity<ItemStackEntity>(
  66. ctx, (Swan::Vec2)pos + Swan::Vec2{0.5, 0.5}, *tile.droppedItem);
  67. }
  68. }
  69. Swan::EventListener breakListener_;
  70. };
  71. extern "C" Swan::Mod *mod_create(Swan::World &world) {
  72. return new CoreMod(world);
  73. }