PROJNAME = swan | PROJNAME = swan | ||||
PROJTYPE = exe | PROJTYPE = exe | ||||
SRCS = src/Body.cc src/Chunk.cc src/Game.cc src/main.cc src/Player.cc src/WorldPlane.cc | |||||
HDRS = src/Body.h src/Chunk.h src/common.h src/Game.h src/Player.h src/Tile.h src/WorldPlane.h | |||||
SRCS = src/main.cc | |||||
HDRS = | |||||
OBJS = $(patsubst src/%,$(BUILD)/obj/%.o,$(SRCS)) | OBJS = $(patsubst src/%,$(BUILD)/obj/%.o,$(SRCS)) | ||||
DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS)) | DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS)) | ||||
PUBLICHDRS = | PUBLICHDRS = | ||||
# Defaults | # Defaults | ||||
PKGS = | PKGS = | ||||
EXTRADEPS = | |||||
EXTRAPUBLICDEPS = | |||||
EXTRADEPS = libswan/src/Body.cc libswan/src/Chunk.cc libswan/src/Game.cc libswan/src/Mod.cc libswan/src/Player.cc libswan/src/World.cc libswan/src/WorldPlane.cc libswan/include/swan/Chunk.h libswan/include/swan/Game.h libswan/include/swan/Player.h libswan/include/swan/WorldPlane.h libswan/include/swan/World.h libswan/include/swan/common.h libswan/include/swan/Tile.h libswan/include/swan/Mod.h libswan/include/swan/Body.h | |||||
EXTRAPUBLICDEPS = libswan/include/swan/Chunk.h libswan/include/swan/Game.h libswan/include/swan/Player.h libswan/include/swan/WorldPlane.h libswan/include/swan/World.h libswan/include/swan/common.h libswan/include/swan/Tile.h libswan/include/swan/Mod.h libswan/include/swan/Body.h | |||||
CONFIG ?= release | CONFIG ?= release | ||||
BUILDDIR ?= build | BUILDDIR ?= build | ||||
BUILD ?= $(BUILDDIR)/$(CONFIG) | BUILD ?= $(BUILDDIR)/$(CONFIG) | ||||
PKG_CONFIG ?= pkg-config | PKG_CONFIG ?= pkg-config | ||||
AR ?= ar | AR ?= ar | ||||
CCOPTS = -Iinclude | |||||
CCOPTS = -Iinclude -isystem libswan/include | |||||
CCOPTS_release = -O2 -flto | CCOPTS_release = -O2 -flto | ||||
CCOPTS_debug = -g | CCOPTS_debug = -g | ||||
CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug) | CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug) | ||||
LDOPTS = | |||||
LDOPTS = -Llibswan/build/$(CONFIG) | |||||
LDOPTS_release = -flto | LDOPTS_release = -flto | ||||
LDOPTS_debug = | LDOPTS_debug = | ||||
LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug) | LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug) | ||||
CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS) | CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS) | ||||
LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS) | LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS) | ||||
$(BUILD)/$(PROJNAME): $(OBJS) | |||||
$(BUILD)/$(PROJNAME): libswan/build/$(CONFIG)/.built $(OBJS) | |||||
@mkdir -p $(@D) | @mkdir -p $(@D) | ||||
$(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) $(LDFLAGS)) | $(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) $(LDFLAGS)) | ||||
touch $(BUILD)/.built | touch $(BUILD)/.built | ||||
cp $< $@ | cp $< $@ | ||||
@echo '(OK)' Created $@. | @echo '(OK)' Created $@. | ||||
libswan/build/$(CONFIG)/.built: libswan/src/Body.cc libswan/src/Chunk.cc libswan/src/Game.cc libswan/src/Mod.cc libswan/src/Player.cc libswan/src/World.cc libswan/src/WorldPlane.cc libswan/include/swan/Chunk.h libswan/include/swan/Game.h libswan/include/swan/Player.h libswan/include/swan/WorldPlane.h libswan/include/swan/World.h libswan/include/swan/common.h libswan/include/swan/Tile.h libswan/include/swan/Mod.h libswan/include/swan/Body.h | |||||
$(call runpfx,'(SUB)',$(MAKE) -C libswan) | |||||
$(BUILD)/obj/%.c.o: src/%.c $(EXTRAPUBLICDEPS) | $(BUILD)/obj/%.c.o: src/%.c $(EXTRAPUBLICDEPS) | ||||
@mkdir -p $(@D) | @mkdir -p $(@D) | ||||
$(call runpfx,'(CC)',$(CC) -o $@ -c $< $(CFLAGS)) | $(call runpfx,'(CC)',$(CC) -o $@ -c $< $(CFLAGS)) | ||||
mkdir -p $(DESTDIR)$(PREFIX)/bin | mkdir -p $(DESTDIR)$(PREFIX)/bin | ||||
cp -f $^ $(DESTDIR)$(PREFIX)/bin | cp -f $^ $(DESTDIR)$(PREFIX)/bin | ||||
chmod 755 $(DESTDIR)$(PREFIX)/bin/$(PROJNAME) | chmod 755 $(DESTDIR)$(PREFIX)/bin/$(PROJNAME) | ||||
$(MAKE) -C libswan install | |||||
.PHONY: uninstall | .PHONY: uninstall | ||||
uninstall: | uninstall: | ||||
rm -f $(DESTDIR)$(PREFIX)/bin/$(PROJNAME) | rm -f $(DESTDIR)$(PREFIX)/bin/$(PROJNAME) | ||||
$(MAKE) -C libswan uninstall | |||||
.PHONY: clean | .PHONY: clean | ||||
clean: | clean: | ||||
rm -rf $(PROJNAME) $(BUILD) | rm -rf $(PROJNAME) $(BUILD) | ||||
$(MAKE) -C libswan clean | |||||
.PHONY: cleanall | .PHONY: cleanall | ||||
cleanall: | cleanall: | ||||
rm -rf $(BUILDDIR) | rm -rf $(BUILDDIR) | ||||
$(MAKE) -C libswan cleanall | |||||
.PHONY: dumpdeps | .PHONY: dumpdeps | ||||
dumpdeps: | dumpdeps: |
PROJNAME = swan | PROJNAME = swan | ||||
PROJTYPE = exe | |||||
PKGS = sfml-all | PKGS = sfml-all | ||||
LDFLAGS += -lstdc++ | |||||
LDOPTS += -lstdc++ -ldl -lswan -Wl,--rpath=libswan/build/$(CONFIG) | |||||
DEPENDS = libswan |
/build |
# Makefile generated by smake. | |||||
PROJNAME = core.mod | |||||
PROJTYPE = solib | |||||
SRCS = src/mod.cc | |||||
HDRS = | |||||
OBJS = $(patsubst src/%,$(BUILD)/obj/%.o,$(SRCS)) | |||||
DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS)) | |||||
PUBLICHDRS = | |||||
# Defaults | |||||
PKGS = | |||||
EXTRADEPS = ../libswan/src/Body.cc ../libswan/src/Chunk.cc ../libswan/src/Game.cc ../libswan/src/Mod.cc ../libswan/src/Player.cc ../libswan/src/World.cc ../libswan/src/WorldPlane.cc ../libswan/include/swan/Chunk.h ../libswan/include/swan/Game.h ../libswan/include/swan/Player.h ../libswan/include/swan/WorldPlane.h ../libswan/include/swan/World.h ../libswan/include/swan/common.h ../libswan/include/swan/Tile.h ../libswan/include/swan/Mod.h ../libswan/include/swan/Body.h | |||||
EXTRAPUBLICDEPS = ../libswan/include/swan/Chunk.h ../libswan/include/swan/Game.h ../libswan/include/swan/Player.h ../libswan/include/swan/WorldPlane.h ../libswan/include/swan/World.h ../libswan/include/swan/common.h ../libswan/include/swan/Tile.h ../libswan/include/swan/Mod.h ../libswan/include/swan/Body.h | |||||
CONFIG ?= release | |||||
BUILDDIR ?= build | |||||
BUILD ?= $(BUILDDIR)/$(CONFIG) | |||||
WARNINGS = -Wall -Wextra -Wno-unused-parameter | |||||
SMAKEFILE ?= Smakefile | |||||
DESTDIR ?= | |||||
PREFIX ?= /usr/local | |||||
PHONIES = dumpdeps dumppublicdeps dumpprojtype clean cleanall | |||||
CONFIGS = release sanitize debug | |||||
PKG_CONFIG ?= pkg-config | |||||
AR ?= ar | |||||
CCOPTS = -Iinclude -fPIC -isystem ../libswan/include | |||||
CCOPTS_release = -O2 -flto | |||||
CCOPTS_debug = -g | |||||
CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug) | |||||
LDOPTS = -L../libswan/build/$(CONFIG) | |||||
LDOPTS_release = -flto | |||||
LDOPTS_debug = | |||||
LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug) | |||||
runpfx = @echo $(1) $(2) && $(2) | |||||
.PHONY: all | |||||
all: $(BUILD)/$(PROJNAME).so | |||||
-include $(SMAKEFILE) | |||||
ifeq ($(filter $(CONFIGS),$(CONFIG)),) | |||||
ifeq ($(filter cleanall,$(MAKECMDGOALS)),) | |||||
$(error Unknown config '$(CONFIG)'. Supported configs: $(CONFIGS)) | |||||
endif | |||||
endif | |||||
ifneq ($(PKGS),) | |||||
CCOPTS += $(shell $(PKG_CONFIG) --cflags $(PKGS)) | |||||
LDOPTS += $(shell $(PKG_CONFIG) --libs $(PKGS)) | |||||
endif | |||||
CFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CFLAGS) | |||||
CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS) | |||||
LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS) | |||||
$(BUILD)/$(PROJNAME).so: ../libswan/build/$(CONFIG)/.built $(OBJS) $(EXTRADEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) -shared $(LDLAGS)) | |||||
touch $(BUILD)/.built | |||||
@echo '(OK)' Created $@. | |||||
../libswan/build/$(CONFIG)/.built: ../libswan/src/Body.cc ../libswan/src/Chunk.cc ../libswan/src/Game.cc ../libswan/src/Mod.cc ../libswan/src/Player.cc ../libswan/src/World.cc ../libswan/src/WorldPlane.cc ../libswan/include/swan/Chunk.h ../libswan/include/swan/Game.h ../libswan/include/swan/Player.h ../libswan/include/swan/WorldPlane.h ../libswan/include/swan/World.h ../libswan/include/swan/common.h ../libswan/include/swan/Tile.h ../libswan/include/swan/Mod.h ../libswan/include/swan/Body.h | |||||
$(call runpfx,'(SUB)',$(MAKE) -C ../libswan) | |||||
$(BUILD)/obj/%.c.o: src/%.c $(EXTRAPUBLICDEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(CC)',$(CC) -o $@ -c $< $(CFLAGS)) | |||||
$(BUILD)/obj/%.cc.o: src/%.cc $(EXTRAPUBLICDEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(CXX)',$(CXX) -o $@ -c $< $(CXXFLAGS)) | |||||
$(BUILD)/dep/%.c.d: src/%.c $(HDRS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(DEP)',$(CC) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CFLAGS)) | |||||
$(BUILD)/dep/%.cc.d: src/%.cc $(HDRS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(DEP)',$(CXX) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CXXFLAGS)) | |||||
.PHONY: install | |||||
install: $(BUILD)/$(PROJNAME).so | |||||
mkdir -p $(DESTDIR)$(PREFIX)/lib | |||||
cp -f $^ $(DESTDIR)$(PREFIX)/lib | |||||
chmod 755 $(DESTDIR)$(PREFIX)/lib/$(PROJNAME).so | |||||
mkdir -p $(DESTDIR)$(PREFIX)/include | |||||
cp -rf include/* $(DESTDIR)$(PREFIX)/include | |||||
$(MAKE) -C ../libswan install | |||||
.PHONY: uninstall | |||||
uninstall: | |||||
rm -f $(DESTDIR)$(PREFIX)/lib/$(PROJNAME).so | |||||
rm -rf $(patsubst include/%,$(DESTDIR)$(PREFIX)/include/%,$(wildcard include/*)) | |||||
$(MAKE) -C ../libswan uninstall | |||||
.PHONY: clean | |||||
clean: | |||||
rm -rf $(PROJNAME) $(BUILD) | |||||
$(MAKE) -C ../libswan clean | |||||
.PHONY: cleanall | |||||
cleanall: | |||||
rm -rf $(BUILDDIR) | |||||
$(MAKE) -C ../libswan cleanall | |||||
.PHONY: dumpdeps | |||||
dumpdeps: | |||||
@echo $(addprefix $(PREPEND),$(SRCS) $(HDRS) $(EXTRADEPS)) | |||||
.PHONY: dumppublicdeps | |||||
dumppublicdeps: | |||||
@echo $(addprefix $(PREPEND),$(PUBLICHDRS) $(EXTRAPUBLICDEPS)) | |||||
.PHONY: dumpprojtype | |||||
dumpprojtype: | |||||
@echo $(PROJTYPE) | |||||
ifeq ($(filter $(PHONIES),$(MAKECMDGOALS)),) | |||||
-include $(DEPS) | |||||
endif |
PROJNAME = core.mod | |||||
PROJTYPE = solib | |||||
DEPENDS = ../libswan |
#include <swan/Mod.h> | |||||
#include <swan/Game.h> | |||||
extern "C" void mod_init(Swan::Mod &mod) { | |||||
mod.init("core"); | |||||
mod.registerTile("test1", Swan::Tile()); | |||||
mod.registerTile("test2", Swan::Tile()); | |||||
} | |||||
int main() { | |||||
Swan::Mod mod; | |||||
mod.init("core"); | |||||
} |
/build |
# Makefile generated by smake. | |||||
PROJNAME = libswan | |||||
PROJTYPE = solib | |||||
SRCS = src/Body.cc src/Chunk.cc src/Game.cc src/Mod.cc src/Player.cc src/World.cc src/WorldPlane.cc | |||||
HDRS = include/swan/Chunk.h include/swan/Game.h include/swan/Player.h include/swan/WorldPlane.h include/swan/World.h include/swan/common.h include/swan/Tile.h include/swan/Mod.h include/swan/Body.h | |||||
OBJS = $(patsubst src/%,$(BUILD)/obj/%.o,$(SRCS)) | |||||
DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS)) | |||||
PUBLICHDRS = include/swan/Chunk.h include/swan/Game.h include/swan/Player.h include/swan/WorldPlane.h include/swan/World.h include/swan/common.h include/swan/Tile.h include/swan/Mod.h include/swan/Body.h | |||||
# Defaults | |||||
PKGS = | |||||
EXTRADEPS = | |||||
EXTRAPUBLICDEPS = | |||||
CONFIG ?= release | |||||
BUILDDIR ?= build | |||||
BUILD ?= $(BUILDDIR)/$(CONFIG) | |||||
WARNINGS = -Wall -Wextra -Wno-unused-parameter | |||||
SMAKEFILE ?= Smakefile | |||||
DESTDIR ?= | |||||
PREFIX ?= /usr/local | |||||
PHONIES = dumpdeps dumppublicdeps dumpprojtype clean cleanall | |||||
CONFIGS = release sanitize debug | |||||
PKG_CONFIG ?= pkg-config | |||||
AR ?= ar | |||||
CCOPTS = -Iinclude -fPIC | |||||
CCOPTS_release = -O2 -flto | |||||
CCOPTS_debug = -g | |||||
CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug) | |||||
LDOPTS = | |||||
LDOPTS_release = -flto | |||||
LDOPTS_debug = | |||||
LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug) | |||||
runpfx = @echo $(1) $(2) && $(2) | |||||
.PHONY: all | |||||
all: $(BUILD)/$(PROJNAME).so | |||||
-include $(SMAKEFILE) | |||||
ifeq ($(filter $(CONFIGS),$(CONFIG)),) | |||||
ifeq ($(filter cleanall,$(MAKECMDGOALS)),) | |||||
$(error Unknown config '$(CONFIG)'. Supported configs: $(CONFIGS)) | |||||
endif | |||||
endif | |||||
ifneq ($(PKGS),) | |||||
CCOPTS += $(shell $(PKG_CONFIG) --cflags $(PKGS)) | |||||
LDOPTS += $(shell $(PKG_CONFIG) --libs $(PKGS)) | |||||
endif | |||||
CFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CFLAGS) | |||||
CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS) | |||||
LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS) | |||||
$(BUILD)/$(PROJNAME).so: $(OBJS) $(EXTRADEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) -shared $(LDLAGS)) | |||||
touch $(BUILD)/.built | |||||
@echo '(OK)' Created $@. | |||||
$(BUILD)/obj/%.c.o: src/%.c $(EXTRAPUBLICDEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(CC)',$(CC) -o $@ -c $< $(CFLAGS)) | |||||
$(BUILD)/obj/%.cc.o: src/%.cc $(EXTRAPUBLICDEPS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(CXX)',$(CXX) -o $@ -c $< $(CXXFLAGS)) | |||||
$(BUILD)/dep/%.c.d: src/%.c $(HDRS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(DEP)',$(CC) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CFLAGS)) | |||||
$(BUILD)/dep/%.cc.d: src/%.cc $(HDRS) | |||||
@mkdir -p $(@D) | |||||
$(call runpfx,'(DEP)',$(CXX) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CXXFLAGS)) | |||||
.PHONY: install | |||||
install: $(BUILD)/$(PROJNAME).so | |||||
mkdir -p $(DESTDIR)$(PREFIX)/lib | |||||
cp -f $^ $(DESTDIR)$(PREFIX)/lib | |||||
chmod 755 $(DESTDIR)$(PREFIX)/lib/$(PROJNAME).so | |||||
mkdir -p $(DESTDIR)$(PREFIX)/include | |||||
cp -rf include/* $(DESTDIR)$(PREFIX)/include | |||||
.PHONY: uninstall | |||||
uninstall: | |||||
rm -f $(DESTDIR)$(PREFIX)/lib/$(PROJNAME).so | |||||
rm -rf $(patsubst include/%,$(DESTDIR)$(PREFIX)/include/%,$(wildcard include/*)) | |||||
.PHONY: clean | |||||
clean: | |||||
rm -rf $(PROJNAME) $(BUILD) | |||||
.PHONY: cleanall | |||||
cleanall: | |||||
rm -rf $(BUILDDIR) | |||||
.PHONY: dumpdeps | |||||
dumpdeps: | |||||
@echo $(addprefix $(PREPEND),$(SRCS) $(HDRS) $(EXTRADEPS)) | |||||
.PHONY: dumppublicdeps | |||||
dumppublicdeps: | |||||
@echo $(addprefix $(PREPEND),$(PUBLICHDRS) $(EXTRAPUBLICDEPS)) | |||||
.PHONY: dumpprojtype | |||||
dumpprojtype: | |||||
@echo $(PROJTYPE) | |||||
ifeq ($(filter $(PHONIES),$(MAKECMDGOALS)),) | |||||
-include $(DEPS) | |||||
endif |
PROJNAME = libswan | |||||
PROJTYPE = solib | |||||
PKGS = sfml-all | |||||
CCOPTS += -Iinclude/swan |
#pragma once | |||||
#include <vector> | |||||
#include <map> | |||||
#include <string> | |||||
#include "common.h" | |||||
#include "World.h" | |||||
#include "Mod.h" | |||||
namespace Swan { | |||||
class Game { | |||||
public: | |||||
std::vector<Mod> registered_mods_; | |||||
World *world_; | |||||
void loadMod(const std::string &path); | |||||
void draw(Win &win); | |||||
void update(float dt); | |||||
void tick(); | |||||
}; | |||||
} |
#pragma once | |||||
#include <stdint.h> | |||||
#include <string> | |||||
#include <vector> | |||||
#include "Tile.h" | |||||
namespace Swan { | |||||
class Mod { | |||||
public: | |||||
using ModID = uint32_t; | |||||
std::string name_; | |||||
std::vector<Tile> tiles_; | |||||
bool inited_ = false;; | |||||
void init(const std::string &name); | |||||
void registerTile(const std::string &name, const Tile &tile); | |||||
}; | |||||
} |
#pragma once | #pragma once | ||||
#include <stdint.h> | #include <stdint.h> | ||||
#include <string> | |||||
namespace Swan { | namespace Swan { | ||||
public: | public: | ||||
using TileID = uint16_t; | using TileID = uint16_t; | ||||
Tile(std::string name); | |||||
std::string name_; | |||||
}; | }; | ||||
} | } |
#pragma once | #pragma once | ||||
#include <vector> | |||||
#include <map> | |||||
#include <string> | |||||
#include "common.h" | #include "common.h" | ||||
#include "WorldPlane.h" | |||||
#include "Player.h" | #include "Player.h" | ||||
#include "Tile.h" | #include "Tile.h" | ||||
#include "WorldPlane.h" | |||||
#include "WorldPlane.h" | |||||
#include "Tile.h" | |||||
namespace Swan { | namespace Swan { | ||||
class Game { | |||||
class World { | |||||
public: | public: | ||||
Player *player_; | Player *player_; | ||||
WorldPlane *current_plane_; | WorldPlane *current_plane_; | ||||
std::vector<WorldPlane *> planes_; | std::vector<WorldPlane *> planes_; | ||||
std::vector<Tile> registered_tiles_; | std::vector<Tile> registered_tiles_; | ||||
std::map<std::string, Tile::TileID> tile_id_map_; | std::map<std::string, Tile::TileID> tile_id_map_; | ||||
void registerTile(std::string &name, Tile &tile); | |||||
Tile::TileID getTileID(std::string &name); | |||||
Tile::TileID getTileID(const std::string &name) { | |||||
return tile_id_map_[name]; | |||||
} | |||||
void draw(Win &win); | void draw(Win &win); | ||||
void update(float dt); | void update(float dt); |
#include "Game.h" | |||||
#include <dlfcn.h> | |||||
namespace Swan { | |||||
void Game::loadMod(const std::string &path) { | |||||
registered_mods_.push_back(Mod()); | |||||
Mod &mod = registered_mods_.back(); | |||||
void *dl = dlopen(path.c_str(), RTLD_LAZY); | |||||
void (*mod_init)(Mod &) = (void (*)(Mod &))dlsym(dl, "mod_init"); | |||||
mod_init(mod); | |||||
} | |||||
void Game::draw(Win &win) { | |||||
if (world_) | |||||
world_->draw(win); | |||||
} | |||||
void Game::update(float dt) { | |||||
if (world_) | |||||
world_->update(dt); | |||||
} | |||||
void Game::tick() { | |||||
if (world_) | |||||
world_->tick(); | |||||
} | |||||
} |
#include "Mod.h" | |||||
#include <stdio.h> | |||||
namespace Swan { | |||||
void Mod::init(const std::string &name) { | |||||
name_ = name; | |||||
inited_ = true; | |||||
fprintf(stderr, "Mod initing: %s\n", name_.c_str()); | |||||
} | |||||
void Mod::registerTile(const std::string &name, const Tile &tile) { | |||||
tiles_.push_back(tile); | |||||
Tile &t = tiles_.back(); | |||||
t.name_ = name_ + "::" + name; | |||||
fprintf(stderr, "Mod %s added tile %s.\n", name_.c_str(), t.name_.c_str()); | |||||
} | |||||
} |
#include "World.h" | |||||
namespace Swan { | |||||
void World::draw(Win &win) { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->draw(win); | |||||
player_->draw(win); | |||||
} | |||||
void World::update(float dt) { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->update(dt); | |||||
player_->update(dt); | |||||
} | |||||
void World::tick() { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->tick(); | |||||
} | |||||
} |
#include "Game.h" | |||||
namespace Swan { | |||||
void Game::registerTile(std::string &name, Tile &tile) { | |||||
Tile::TileID id = registered_tiles_.size(); | |||||
registered_tiles_.push_back(tile); | |||||
tile_id_map_[name] = id; | |||||
} | |||||
Tile::TileID Game::getTileID(std::string &name) { | |||||
return tile_id_map_[name]; | |||||
} | |||||
void Game::draw(Win &win) { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->draw(win); | |||||
player_->draw(win); | |||||
} | |||||
void Game::update(float dt) { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->update(dt); | |||||
player_->update(dt); | |||||
} | |||||
void Game::tick() { | |||||
for (WorldPlane *plane: planes_) | |||||
plane->tick(); | |||||
} | |||||
} |
#include <time.h> | #include <time.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include "common.h" | |||||
#include "Player.h" | |||||
#include "Game.h" | |||||
#include <swan/common.h> | |||||
#include <swan/Player.h> | |||||
#include <swan/World.h> | |||||
#include <swan/Game.h> | |||||
using namespace Swan; | using namespace Swan; | ||||
Win win = { window, transform }; | Win win = { window, transform }; | ||||
Game game; | Game game; | ||||
game.player_ = new Player(Vec2(1, 1)); | |||||
game.current_plane_ = new WorldPlane(); | |||||
game.planes_.push_back(game.current_plane_); | |||||
game.world_ = new World(); | |||||
game.world_->player_ = new Player(Vec2(1, 1)); | |||||
game.world_->current_plane_ = new WorldPlane(); | |||||
game.world_->planes_.push_back(game.world_->current_plane_); | |||||
game.loadMod("core.mod/build/release/core.mod.so"); | |||||
double prevtime = getTime(); | double prevtime = getTime(); | ||||
double fpsAcc = 0; | double fpsAcc = 0; |