|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include <swan/swan.h>
-
- #include "DefaultWorldGen.h"
- #include "entities/PlayerEntity.h"
- #include "entities/ItemStackEntity.h"
-
- #include <functional>
-
- class CoreMod: public Swan::Mod {
- public:
- CoreMod(Swan::World &world): Swan::Mod("core") {
- breakListener_ = world.evtTileBreak_.subscribe(
- [=](auto ...args) { return onTileBreak(args...); });
-
- registerSprite("entity/player-running");
- registerSprite("entity/player-still");
- registerSprite("misc/background-cave");
-
- registerTile({
- .name = "stone",
- .image = "core::tile/stone",
- .droppedItem = "core::stone",
- });
- registerTile({
- .name = "dirt",
- .image = "core::tile/dirt",
- .droppedItem = "core::dirt",
- });
- registerTile({
- .name = "grass",
- .image = "core::tile/grass",
- .droppedItem = "core::dirt",
- });
- registerTile({
- .name = "tree-trunk",
- .image = "core::tile/tree-trunk",
- .droppedItem = "core::tree-trunk",
- });
- registerTile({
- .name = "leaves",
- .image = "core::tile/leaves",
- });
- registerTile({
- .name = "torch",
- .image = "core::tile/torch",
- .isSolid = false,
- .lightLevel = 80/255.0,
- });
-
- registerItem({
- .name = "stone",
- .image = "core::tile/stone",
- });
- registerItem({
- .name = "dirt",
- .image = "core::tile/dirt",
- });
- registerItem({
- .name = "grass",
- .image = "core::tile/grass",
- });
- registerItem({
- .name = "tree-trunk",
- .image = "core::tile/tree-trunk",
- });
-
- registerWorldGen<DefaultWorldGen>("default");
-
- registerEntity<PlayerEntity>("player");
- registerEntity<ItemStackEntity>("item-stack");
- }
-
- void onTileBreak(const Swan::Context &ctx, Swan::TilePos pos, Swan::Tile &tile) {
- if (tile.droppedItem) {
- ctx.plane.spawnEntity<ItemStackEntity>(
- ctx, (Swan::Vec2)pos + Swan::Vec2{0.5, 0.5}, *tile.droppedItem);
- }
- }
-
- Swan::EventListener breakListener_;
- };
-
- extern "C" Swan::Mod *mod_create(Swan::World &world) {
- return new CoreMod(world);
- }
|