[Add] Saving lua active mission states. Fixed Makefile to build pluto.
This commit is contained in:
parent
62542c14c1
commit
1d2a0cfed4
16
bin/Makefile
16
bin/Makefile
@ -18,13 +18,14 @@ OBJS := $(OBJS:%.c=%.o)
|
||||
|
||||
# CFLAGS
|
||||
CLUA = -I../lib/lua
|
||||
CPLUTO = -I../lib/pluto
|
||||
CSDL = $(shell sdl-config --cflags)
|
||||
CXML = $(shell xml2-config --cflags)
|
||||
CTTF = $(shell freetype-config --cflags)
|
||||
CAL = -lopenal
|
||||
CVORBIS =
|
||||
CGL =
|
||||
CFLAGS = $(CLUA) $(CSDL) $(CXML) $(CTTF) $(CGL) $(CAL) $(CVORBIS) $(VERSION) -D$(OS)
|
||||
CFLAGS = $(CLUA) $(CPLUTO) $(CSDL) $(CXML) $(CTTF) $(CGL) $(CAL) $(CVORBIS) $(VERSION) -D$(OS) -fgnu89-inline
|
||||
ifdef DEBUG
|
||||
CFLAGS += -W -Wall -g3 -DDEBUG -DLUA_USE_APICHECK -std=c99
|
||||
else
|
||||
@ -33,6 +34,7 @@ endif
|
||||
|
||||
# LDFLAGS.
|
||||
LDLUA = ../lib/lua/liblua.a
|
||||
LDPLUTO = ../lib/pluto/pluto.a
|
||||
LDSDL = $(shell sdl-config --libs) -lSDL_image
|
||||
LDXML = $(shell xml2-config --libs)
|
||||
LDTTF = $(shell freetype-config --libs)
|
||||
@ -40,7 +42,7 @@ LDGL = -lGL
|
||||
LDAL = -lopenal
|
||||
LDVORBIS = -lvorbisfile
|
||||
LDPNG = -lpng
|
||||
LDFLAGS = -lm $(LDLUA) $(LDSDL) $(LDXML) $(LDTTF) $(LDGL) $(LDPNG) $(LDAL) $(LDVORBIS)
|
||||
LDFLAGS = -lm $(LDLUA) $(LDPLUTO) $(LDSDL) $(LDXML) $(LDTTF) $(LDGL) $(LDPNG) $(LDAL) $(LDVORBIS)
|
||||
|
||||
# This is just for gstat to run some analysis on performance.
|
||||
ifdef DEBUG
|
||||
@ -58,16 +60,19 @@ DATAFILES = $(VERSIONFILE) $(DATA_AI) $(DATA_GFX) $(DATA_XML) $(DATA_SND) $(DATA
|
||||
|
||||
# TARGETS.
|
||||
%.o: %.c %.h
|
||||
@gcc -c $(CFLAGS) -o $@ $<
|
||||
@$(CC) -c $(CFLAGS) -o $@ $<
|
||||
@echo -e "\tCC $@"
|
||||
|
||||
all: utils data lua $(OBJS)
|
||||
@gcc $(LDFLAGS) -o $(APPNAME) $(OBJS) ../lib/lua/liblua.a
|
||||
all: utils data lua pluto $(OBJS)
|
||||
@$(CC) $(LDFLAGS) -o $(APPNAME) $(OBJS) ../lib/lua/liblua.a ../lib/pluto/pluto.a
|
||||
@echo "\tLD $(APPNAME)"
|
||||
|
||||
lua:
|
||||
@if [ ! -e ../lib/lua/liblua.a ]; then (cd ../lib/lua; $(MAKE) a); fi
|
||||
|
||||
pluto:
|
||||
@if [ ! -e ../lib/pluto/pluto.a ]; then (cd ../lib/pluto; $(MAKE)); fi
|
||||
|
||||
pack: ../src/pack.c ../utils/pack/main.c
|
||||
@(cd ../utils/pack; $(MAKE))
|
||||
|
||||
@ -92,4 +97,5 @@ clean:
|
||||
@(cd ../utils/mkspr; $(MAKE) clean)
|
||||
@echo -e "\tCleaning Lua"
|
||||
@(cd ../lib/lua; $(MAKE) clean)
|
||||
@(cd ../lib/pluto; $(MAKE) clean)
|
||||
|
||||
|
@ -2,9 +2,11 @@
|
||||
#include <string.h>
|
||||
#include <malloc.h>
|
||||
|
||||
//#include "pluto.h"
|
||||
#include "lua.h"
|
||||
#include "lauxlib.h"
|
||||
#include "lualib.h"
|
||||
#include "pluto.h"
|
||||
|
||||
#include "rng.h"
|
||||
#include "lephisto.h"
|
||||
@ -410,7 +412,55 @@ void missions_cleanup(void) {
|
||||
mission_cleanup(&player_missions[i]);
|
||||
}
|
||||
|
||||
typedef struct MBuf_ {
|
||||
char* data;
|
||||
int len, alloc; // Size of each data chunk, chunks to alloc when growing.
|
||||
int ndata, mdata; // Buffer real length, memory length.
|
||||
} MBuf;
|
||||
|
||||
MBuf* mbuf_create(int len, int alloc) {
|
||||
MBuf* buf;
|
||||
|
||||
buf = malloc(sizeof(MBuf));
|
||||
|
||||
buf->data = 0;
|
||||
buf->ndata = buf->mdata = 0;
|
||||
|
||||
buf->len = len;
|
||||
buf->alloc = alloc;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void mbuf_free(MBuf* buf) {
|
||||
if(buf->data != NULL) free(buf->data);
|
||||
buf->ndata = buf->mdata = 0;
|
||||
free(buf);
|
||||
}
|
||||
|
||||
static int mission_writeLua(lua_State* L, const void* p, size_t sz, void* ud) {
|
||||
int i;
|
||||
MBuf* buf;
|
||||
(void)L;
|
||||
|
||||
buf = (MBuf*)ud;
|
||||
|
||||
i = buf->ndata * buf->len + sz - buf->mdata*buf->len;
|
||||
if(i = 0) {
|
||||
// Need more memory.
|
||||
buf->mdata += (i / (buf->len*buf->alloc) + 1) * buf->len * buf->alloc;
|
||||
buf->data = realloc(buf->data, buf->mdata*buf->len);
|
||||
}
|
||||
|
||||
memcpy(&buf->data[buf->ndata * buf->len], p, sz);
|
||||
buf->ndata += sz;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int missions_save(xmlTextWriterPtr writer) {
|
||||
MBuf* buf;
|
||||
char* data;
|
||||
int i, j;
|
||||
|
||||
xmlw_startElem(writer, "missions");
|
||||
@ -431,7 +481,15 @@ int missions_save(xmlTextWriterPtr writer) {
|
||||
xmlw_elem(writer, "cargo", "%u", player_missions[i].cargo[j]);
|
||||
xmlw_endElem(writer); // Cargo.
|
||||
|
||||
// TODO: Save lua data.
|
||||
xmlw_startElem(writer, "lua");
|
||||
buf = mbuf_create(1, 128);
|
||||
lua_pushvalue(player_missions[i].L, LUA_GLOBALSINDEX);
|
||||
pluto_persist(player_missions[i].L, mission_writeLua, buf);
|
||||
data = base64_encode(&j, buf->data, buf->ndata);
|
||||
mbuf_free(buf);
|
||||
xmlw_raw(writer, data, j);
|
||||
free(data);
|
||||
xmlw_endElem(writer); // Lua.
|
||||
|
||||
xmlw_endElem(writer); // Mission.
|
||||
}
|
||||
|
@ -55,6 +55,10 @@
|
||||
if(xmlTextWriterWriteFormatElement(w, (xmlChar*)n, str, ## args) < 0) { \
|
||||
ERR("xmlw: Unable to write format element"); return -1; }
|
||||
|
||||
#define xmlw_raw(w,b,l) \
|
||||
if(xmlTextWriterWriteRawLen(w, (xmlChar*)b, l) < 0) { \
|
||||
ERR("xmlw: unable to write raw element"); return -1; }
|
||||
|
||||
#define xmlw_attr(w, str, val...) \
|
||||
if(xmlTextWriterWriteFormatAttribute(w, (xmlChar*)str, ## val) < 0) { \
|
||||
ERR("xmlw: Unable to write element attribute"); return -1; }
|
||||
|
Loading…
Reference in New Issue
Block a user