Browse Source

libswan, core mod, etc

opengl-renderer-broken
Martin Dørum 4 years ago
parent
commit
19293a67b2

+ 14
- 7
Makefile View File

@@ -3,16 +3,16 @@
PROJNAME = swan
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))
DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS))
PUBLICHDRS =

# Defaults
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
BUILDDIR ?= build
BUILD ?= $(BUILDDIR)/$(CONFIG)
@@ -26,12 +26,12 @@ CONFIGS = release sanitize debug
PKG_CONFIG ?= pkg-config
AR ?= ar

CCOPTS = -Iinclude
CCOPTS = -Iinclude -isystem libswan/include
CCOPTS_release = -O2 -flto
CCOPTS_debug = -g
CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug)

LDOPTS =
LDOPTS = -Llibswan/build/$(CONFIG)
LDOPTS_release = -flto
LDOPTS_debug =
LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug)
@@ -58,7 +58,7 @@ CFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CFLAGS)
CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS)
LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS)

$(BUILD)/$(PROJNAME): $(OBJS)
$(BUILD)/$(PROJNAME): libswan/build/$(CONFIG)/.built $(OBJS)
@mkdir -p $(@D)
$(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) $(LDFLAGS))
touch $(BUILD)/.built
@@ -67,6 +67,9 @@ $(PROJNAME): $(BUILD)/$(PROJNAME)
cp $< $@
@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))
@@ -86,18 +89,22 @@ install: $(BUILD)/$(PROJNAME)
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp -f $^ $(DESTDIR)$(PREFIX)/bin
chmod 755 $(DESTDIR)$(PREFIX)/bin/$(PROJNAME)
$(MAKE) -C libswan install

.PHONY: uninstall
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/$(PROJNAME)
$(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:

+ 3
- 1
Smakefile View File

@@ -1,3 +1,5 @@
PROJNAME = swan
PROJTYPE = exe
PKGS = sfml-all
LDFLAGS += -lstdc++
LDOPTS += -lstdc++ -ldl -lswan -Wl,--rpath=libswan/build/$(CONFIG)
DEPENDS = libswan

+ 1
- 0
core.mod/.gitignore View File

@@ -0,0 +1 @@
/build

+ 123
- 0
core.mod/Makefile View File

@@ -0,0 +1,123 @@
# 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

+ 3
- 0
core.mod/Smakefile View File

@@ -0,0 +1,3 @@
PROJNAME = core.mod
PROJTYPE = solib
DEPENDS = ../libswan

+ 14
- 0
core.mod/src/mod.cc View File

@@ -0,0 +1,14 @@
#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");
}

+ 1
- 0
libswan/.gitignore View File

@@ -0,0 +1 @@
/build

+ 116
- 0
libswan/Makefile View File

@@ -0,0 +1,116 @@
# 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

+ 4
- 0
libswan/Smakefile View File

@@ -0,0 +1,4 @@
PROJNAME = libswan
PROJTYPE = solib
PKGS = sfml-all
CCOPTS += -Iinclude/swan

src/Body.h → libswan/include/swan/Body.h View File


src/Chunk.h → libswan/include/swan/Chunk.h View File


+ 26
- 0
libswan/include/swan/Game.h View File

@@ -0,0 +1,26 @@
#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();
};

}

+ 23
- 0
libswan/include/swan/Mod.h View File

@@ -0,0 +1,23 @@
#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);
};

}

src/Player.h → libswan/include/swan/Player.h View File


src/Tile.h → libswan/include/swan/Tile.h View File

@@ -1,6 +1,7 @@
#pragma once

#include <stdint.h>
#include <string>

namespace Swan {

@@ -8,7 +9,7 @@ class Tile {
public:
using TileID = uint16_t;

Tile(std::string name);
std::string name_;
};

}

src/Game.h → libswan/include/swan/World.h View File

@@ -1,26 +1,27 @@
#pragma once

#include <vector>
#include <map>
#include <string>

#include "common.h"
#include "WorldPlane.h"
#include "Player.h"
#include "Tile.h"
#include "WorldPlane.h"
#include "WorldPlane.h"
#include "Tile.h"

namespace Swan {

class Game {
class World {
public:
Player *player_;

WorldPlane *current_plane_;
std::vector<WorldPlane *> planes_;

std::vector<Tile> registered_tiles_;
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 update(float dt);

src/WorldPlane.h → libswan/include/swan/WorldPlane.h View File


src/common.h → libswan/include/swan/common.h View File


src/Body.cc → libswan/src/Body.cc View File


src/Chunk.cc → libswan/src/Chunk.cc View File


+ 31
- 0
libswan/src/Game.cc View File

@@ -0,0 +1,31 @@
#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();
}

}

+ 22
- 0
libswan/src/Mod.cc View File

@@ -0,0 +1,22 @@
#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());
}

}

src/Player.cc → libswan/src/Player.cc View File


+ 24
- 0
libswan/src/World.cc View File

@@ -0,0 +1,24 @@
#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();
}

}

src/WorldPlane.cc → libswan/src/WorldPlane.cc View File


+ 0
- 34
src/Game.cc View File

@@ -1,34 +0,0 @@
#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();
}

}

+ 10
- 6
src/main.cc View File

@@ -2,9 +2,10 @@
#include <time.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;

@@ -29,9 +30,12 @@ int main() {
Win win = { window, transform };

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 fpsAcc = 0;

Loading…
Cancel
Save