From 0641d953a4a2382561b4501336fcf1beda75e7cc Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Tue, 15 Mar 2016 03:41:08 +0200 Subject: [PATCH] less built-in fields --- data/scripts/actor.dacs | 52 ++++----- dengapi.d | 5 +- xmain_d2d.d | 283 ++++++++++++++++++++++++------------------------ 3 files changed, 174 insertions(+), 166 deletions(-) diff --git a/data/scripts/actor.dacs b/data/scripts/actor.dacs index 00ec2db..f257091 100644 --- a/data/scripts/actor.dacs +++ b/data/scripts/actor.dacs @@ -7,36 +7,36 @@ import mapapi; // for flags public extern field(Actor) string classtype; public extern field(Actor) string classname; public extern field(Actor) string state; // used in action scripts; also, defines animation -public extern field(Actor) uint tag; // userdata public extern field(Actor) int x, y; // coordinates -public extern field(Actor) int xv, yv; // current velocity -public extern field(Actor) int vx, vy; // desired velocity (usually) -public extern field(Actor) int radius, height; // radius, height -public extern field(Actor) int hitpoints; +public /*extern*/ field(Actor) uint tag; // userdata +public /*extern*/ field(Actor) int xv, yv; // current velocity +public /*extern*/ field(Actor) int vx, vy; // desired velocity (usually) +public /*extern*/ field(Actor) int radius, height; // radius, height +public /*extern*/ field(Actor) int hitpoints; // starting monster stats (usually will not be changed by thinkers) -public extern field(Actor) int painin, painout; -public extern field(Actor) int xvel, yvel; -public extern field(Actor) int slophit; -public extern field(Actor) int angertime; +public /*extern*/ field(Actor) int painin, painout; +public /*extern*/ field(Actor) int xvel, yvel; +public /*extern*/ field(Actor) int slophit; +public /*extern*/ field(Actor) int angertime; // instead of `ap`; used by the engine to animate actors -public extern field(Actor) string animname; -public extern field(Actor) string animstr; -public extern field(Actor) int animidx; +public /*extern*/ field(Actor) string animname; +public /*extern*/ field(Actor) string animstr; +public /*extern*/ field(Actor) int animidx; // various monster and other actor's fields -public extern field(Actor) Actor target; -public extern field(Actor) uint dir; // 1: right -public extern field(Actor) int st; -public extern field(Actor) int ftime; -public extern field(Actor) int fobj; //??? -public extern field(Actor) int s; // for item too -public extern field(Actor) int aim; -public extern field(Actor) int life /*is "life"*/; -public extern field(Actor) int pain; -public extern field(Actor) int ac; -public extern field(Actor) int tx; -public extern field(Actor) int ty; -public extern field(Actor) int ammo; -public extern field(Actor) int atm; // anger time (decreasing counter) +public /*extern*/ field(Actor) Actor target; +public /*extern*/ field(Actor) uint dir; // 1: right +public /*extern*/ field(Actor) int st; +public /*extern*/ field(Actor) int ftime; +public /*extern*/ field(Actor) int fobj; //??? +public /*extern*/ field(Actor) int s; // for item too +public /*extern*/ field(Actor) int aim; +public /*extern*/ field(Actor) int life /*is "life"*/; +public /*extern*/ field(Actor) int pain; +public /*extern*/ field(Actor) int ac; +public /*extern*/ field(Actor) int tx; +public /*extern*/ field(Actor) int ty; +public /*extern*/ field(Actor) int ammo; +public /*extern*/ field(Actor) int atm; // anger time (decreasing counter) public auto isLeft (Actor me) { return (me.dir&ACTOR_DIR_RIGHT); } diff --git a/dengapi.d b/dengapi.d index 6f3575e..f488077 100644 --- a/dengapi.d +++ b/dengapi.d @@ -323,6 +323,8 @@ public void registerAPI () { foreach (ActorDef adef; actordefs.byValue) { adef.callAnimInit(); } + + conwriteln("API registered"); } @@ -332,7 +334,7 @@ __gshared ActorId[2] players; public void loadMapMonsters () { assert(map !is null); players[] = ActorId(0); - conwriteln(players[0].valid, "; ", players[0].id); + //conwriteln(players[0].valid, "; ", players[0].id); foreach (ref thing; map.things) { if (thing.dmonly) continue; if (auto did = thing.type in d2dactordefsById) { @@ -374,6 +376,7 @@ public void loadMapMonsters () { auto aid = Actor.alloc; aid.classtype = StrPool.intern(adef.classtype); aid.classname = StrPool.intern(adef.classname); + //conwriteln("found '", aid.classtype.get, ":", aid.classname.get, "'"); if (auto did = thing.type in d2dactordefsById) { assert(did.classtype == adef.classtype); assert(did.classname == adef.classname); diff --git a/xmain_d2d.d b/xmain_d2d.d index 7319df4..2a01ea0 100644 --- a/xmain_d2d.d +++ b/xmain_d2d.d @@ -518,153 +518,158 @@ void main (string[] args) { if (compileOnly) return; - registerAPI(); - loadPalette(); - - setOpenGLContextVersion(3, 2); // up to GLSL 150 - //openGLContextCompatible = false; - - map = new LevelMap("maps/map01.d2m"); - - //mapOfsX = 8*26; - //mapOfsY = 8*56; - map.getThingPos(1/*ThingId.Player1*/, &mapOfsX, &mapOfsY); - // fix viewport - mapOfsX = (mapOfsX*2)-vlWidth/2; - if (mapOfsX+vlWidth > map.width*16) mapOfsX = map.width*16-vlWidth; - if (mapOfsX < 0) mapOfsX = 0; - mapOfsY = (mapOfsY*2)-vlHeight/2; - if (mapOfsY+vlHeight > map.height*16) mapOfsY = map.height*16-vlHeight; - if (mapOfsY < 0) mapOfsY = 0; - scale = 2; - - sdwindow = new SimpleWindow(vlWidth, vlHeight, "D2D", OpenGlOptions.yes, Resizablity.fixedSize); - - sdwindow.visibleForTheFirstTime = delegate () { - sdwindow.setAsCurrentOpenGlContext(); // make this window active - glbindLoadFunctions(); - /+ - { - import core.stdc.stdio; - printf("GL version: %s\n", glGetString(GL_VERSION)); - GLint l, h; - glGetIntegerv(GL_MAJOR_VERSION, &h); - glGetIntegerv(GL_MINOR_VERSION, &l); - printf("version: %d.%d\n", h, l); - printf("shader version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); - GLint svcount; - glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, &svcount); - if (svcount > 0) { - printf("%d shader versions supported:\n", svcount); - foreach (GLuint n; 0..svcount) printf(" %d: %s\n", n, glGetStringi(GL_SHADING_LANGUAGE_VERSION, n)); - } - /* - GLint ecount; - glGetIntegerv(GL_NUM_EXTENSIONS, &ecount); - if (ecount > 0) { - printf("%d extensions supported:\n", ecount); - foreach (GLuint n; 0..ecount) printf(" %d: %s\n", n, glGetStringi(GL_EXTENSIONS, n)); - } - */ - } - +/ - // check if we have sufficient shader version here - { - bool found = false; - GLint svcount; - glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, &svcount); - if (svcount > 0) { - foreach (GLuint n; 0..svcount) { - import core.stdc.string : strncmp; - auto v = glGetStringi(GL_SHADING_LANGUAGE_VERSION, n); - if (v is null) continue; - if (strncmp(v, "120", 3) != 0) continue; - if (v[3] > ' ') continue; - found = true; - break; + try { + registerAPI(); + loadPalette(); + + setOpenGLContextVersion(3, 2); // up to GLSL 150 + //openGLContextCompatible = false; + + map = new LevelMap("maps/map01.d2m"); + + //mapOfsX = 8*26; + //mapOfsY = 8*56; + map.getThingPos(1/*ThingId.Player1*/, &mapOfsX, &mapOfsY); + // fix viewport + mapOfsX = (mapOfsX*2)-vlWidth/2; + if (mapOfsX+vlWidth > map.width*16) mapOfsX = map.width*16-vlWidth; + if (mapOfsX < 0) mapOfsX = 0; + mapOfsY = (mapOfsY*2)-vlHeight/2; + if (mapOfsY+vlHeight > map.height*16) mapOfsY = map.height*16-vlHeight; + if (mapOfsY < 0) mapOfsY = 0; + scale = 2; + + sdwindow = new SimpleWindow(vlWidth, vlHeight, "D2D", OpenGlOptions.yes, Resizablity.fixedSize); + + sdwindow.visibleForTheFirstTime = delegate () { + sdwindow.setAsCurrentOpenGlContext(); // make this window active + glbindLoadFunctions(); + /+ + { + import core.stdc.stdio; + printf("GL version: %s\n", glGetString(GL_VERSION)); + GLint l, h; + glGetIntegerv(GL_MAJOR_VERSION, &h); + glGetIntegerv(GL_MINOR_VERSION, &l); + printf("version: %d.%d\n", h, l); + printf("shader version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); + GLint svcount; + glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, &svcount); + if (svcount > 0) { + printf("%d shader versions supported:\n", svcount); + foreach (GLuint n; 0..svcount) printf(" %d: %s\n", n, glGetStringi(GL_SHADING_LANGUAGE_VERSION, n)); + } + /* + GLint ecount; + glGetIntegerv(GL_NUM_EXTENSIONS, &ecount); + if (ecount > 0) { + printf("%d extensions supported:\n", ecount); + foreach (GLuint n; 0..ecount) printf(" %d: %s\n", n, glGetStringi(GL_EXTENSIONS, n)); } + */ } - if (!found) assert(0, "can't find OpenGL GLSL 120"); + +/ + // check if we have sufficient shader version here { - auto adr = glGetProcAddress("glTexParameterf"); - if (adr is null) assert(0); - } - } - sdwindow.vsync = false; - //sdwindow.useGLFinish = false; - initOpenGL(); - //sdwindow.redrawOpenGlScene(); - if (!sdwindow.releaseCurrentOpenGlContext()) { import core.stdc.stdio; printf("can't release OpenGL context(1)\n"); } - if (!renderTid) { - renderTid = new Thread(&renderThread); - renderTid.start(); - } - }; - - //sdwindow.redrawOpenGlScene = delegate () { renderScene(); }; - - enum MSecsPerFrame = 1000/30; /* 30 is FPS */ - - uint[8] frameTimes = 1000; - enum { Left, Right, Up, Down } - bool[4] pressed = false; - bool altMove = false; - - sdwindow.eventLoop(MSecsPerFrame, - delegate () { - if (sdwindow.closed) return; - if (pressed[Left]) mapOfsX -= 8; - if (pressed[Right]) mapOfsX += 8; - if (pressed[Up]) mapOfsY -= 8; - if (pressed[Down]) mapOfsY += 8; - import std.math : cos, sin; - __gshared float itime = 0.0; - itime += 0.02; - if (movement) { - mapOfsX = cast(int)(800.0/2.0+cos(itime)*220.0); - mapOfsY = cast(int)(800.0/2.0+120.0+sin(itime)*160.0); + bool found = false; + GLint svcount; + glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, &svcount); + if (svcount > 0) { + foreach (GLuint n; 0..svcount) { + import core.stdc.string : strncmp; + auto v = glGetStringi(GL_SHADING_LANGUAGE_VERSION, n); + if (v is null) continue; + if (strncmp(v, "120", 3) != 0) continue; + if (v[3] > ' ') continue; + found = true; + break; + } + } + if (!found) assert(0, "can't find OpenGL GLSL 120"); + { + auto adr = glGetProcAddress("glTexParameterf"); + if (adr is null) assert(0); + } } - if (scale == 1) mapOfsX = mapOfsY = 0; - //sdwindow.redrawOpenGlSceneNow(); - }, - delegate (KeyEvent event) { - if (sdwindow.closed) return; - if (event.pressed && event.key == Key.Escape) { closeWindow(); return; } - switch (event.key) { - case Key.X: if (event.pressed) altMove = !altMove; break; - case Key.Left: if (altMove) pressed[Left] = event.pressed; break; - case Key.Right: if (altMove) pressed[Right] = event.pressed; break; - case Key.Up: if (altMove) pressed[Up] = event.pressed; break; - case Key.Down: if (altMove) pressed[Down] = event.pressed; break; - default: + sdwindow.vsync = false; + //sdwindow.useGLFinish = false; + initOpenGL(); + //sdwindow.redrawOpenGlScene(); + if (!sdwindow.releaseCurrentOpenGlContext()) { import core.stdc.stdio; printf("can't release OpenGL context(1)\n"); } + if (!renderTid) { + renderTid = new Thread(&renderThread); + renderTid.start(); } - if (!altMove) { + }; + + //sdwindow.redrawOpenGlScene = delegate () { renderScene(); }; + + enum MSecsPerFrame = 1000/30; /* 30 is FPS */ + + uint[8] frameTimes = 1000; + enum { Left, Right, Up, Down } + bool[4] pressed = false; + bool altMove = false; + + sdwindow.eventLoop(MSecsPerFrame, + delegate () { + if (sdwindow.closed) return; + if (pressed[Left]) mapOfsX -= 8; + if (pressed[Right]) mapOfsX += 8; + if (pressed[Up]) mapOfsY -= 8; + if (pressed[Down]) mapOfsY += 8; + import std.math : cos, sin; + __gshared float itime = 0.0; + itime += 0.02; + if (movement) { + mapOfsX = cast(int)(800.0/2.0+cos(itime)*220.0); + mapOfsY = cast(int)(800.0/2.0+120.0+sin(itime)*160.0); + } + if (scale == 1) mapOfsX = mapOfsY = 0; + //sdwindow.redrawOpenGlSceneNow(); + }, + delegate (KeyEvent event) { + if (sdwindow.closed) return; + if (event.pressed && event.key == Key.Escape) { closeWindow(); return; } switch (event.key) { - case Key.Left: case Key.Pad4: plrKeyUpDown(0, PLK_LEFT, event.pressed); break; - case Key.Right: case Key.Pad6: plrKeyUpDown(0, PLK_RIGHT, event.pressed); break; - case Key.Up: case Key.Pad8: plrKeyUpDown(0, PLK_UP, event.pressed); break; - case Key.Down: case Key.Pad2: plrKeyUpDown(0, PLK_DOWN, event.pressed); break; - case Key.Alt: plrKeyUpDown(0, PLK_JUMP, event.pressed); break; - case Key.Ctrl: plrKeyUpDown(0, PLK_FIRE, event.pressed); break; - case Key.Shift: plrKeyUpDown(0, PLK_USE, event.pressed); break; + case Key.X: if (event.pressed) altMove = !altMove; break; + case Key.Left: if (altMove) pressed[Left] = event.pressed; break; + case Key.Right: if (altMove) pressed[Right] = event.pressed; break; + case Key.Up: if (altMove) pressed[Up] = event.pressed; break; + case Key.Down: if (altMove) pressed[Down] = event.pressed; break; default: } - } - }, - delegate (MouseEvent event) { - lightX = event.x/scale; - lightY = event.y/scale; - lightX += mapOfsX/scale; - lightY += mapOfsY/scale; - }, - delegate (dchar ch) { - if (ch == 'q') { closeWindow(); return; } - if (ch == 's') scanlines = !scanlines; - if (ch == '1') scale = 1; - if (ch == '2') scale = 2; - if (ch == ' ') movement = !movement; - }, - ); + if (!altMove) { + switch (event.key) { + case Key.Left: case Key.Pad4: plrKeyUpDown(0, PLK_LEFT, event.pressed); break; + case Key.Right: case Key.Pad6: plrKeyUpDown(0, PLK_RIGHT, event.pressed); break; + case Key.Up: case Key.Pad8: plrKeyUpDown(0, PLK_UP, event.pressed); break; + case Key.Down: case Key.Pad2: plrKeyUpDown(0, PLK_DOWN, event.pressed); break; + case Key.Alt: plrKeyUpDown(0, PLK_JUMP, event.pressed); break; + case Key.Ctrl: plrKeyUpDown(0, PLK_FIRE, event.pressed); break; + case Key.Shift: plrKeyUpDown(0, PLK_USE, event.pressed); break; + default: + } + } + }, + delegate (MouseEvent event) { + lightX = event.x/scale; + lightY = event.y/scale; + lightX += mapOfsX/scale; + lightY += mapOfsY/scale; + }, + delegate (dchar ch) { + if (ch == 'q') { closeWindow(); return; } + if (ch == 's') scanlines = !scanlines; + if (ch == '1') scale = 1; + if (ch == '2') scale = 2; + if (ch == ' ') movement = !movement; + }, + ); + } catch (Exception e) { + import std.stdio : stderr; + stderr.writeln("FUUUUUUUUUUUU\n", e.toString); + } closeWindow(); flushGui(); } -- 2.11.4.GIT