You can subscribe to this list here.
2006 |
Jan
(189) |
Feb
(200) |
Mar
(83) |
Apr
(31) |
May
(34) |
Jun
(156) |
Jul
(190) |
Aug
(19) |
Sep
(79) |
Oct
(79) |
Nov
(48) |
Dec
(4) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(13) |
Mar
(1) |
Apr
(15) |
May
(50) |
Jun
(19) |
Jul
(6) |
Aug
(6) |
Sep
(13) |
Oct
|
Nov
(4) |
Dec
(1) |
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(7) |
Jun
|
Jul
(1) |
Aug
|
Sep
(2) |
Oct
|
Nov
(6) |
Dec
(4) |
2009 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: <ge...@us...> - 2009-09-25 01:44:56
|
Revision: 792 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=792&view=rev Author: genjix Date: 2009-09-25 01:44:46 +0000 (Fri, 25 Sep 2009) Log Message: ----------- backup copy of my app Added Paths: ----------- branches/notevenalpha/ branches/notevenalpha/Jamroot branches/notevenalpha/Makefile branches/notevenalpha/README branches/notevenalpha/app.py branches/notevenalpha/bind.py branches/notevenalpha/evensys.cpp branches/notevenalpha/evensys.h branches/notevenalpha/evsys.py branches/notevenalpha/expmesh.py branches/notevenalpha/game.py branches/notevenalpha/genkeys.py branches/notevenalpha/harimau.py branches/notevenalpha/hello.cpp branches/notevenalpha/keys branches/notevenalpha/keys.hpp branches/notevenalpha/lesson05.cpp branches/notevenalpha/lesson05.cpp.bak branches/notevenalpha/models/ branches/notevenalpha/models/harimau branches/notevenalpha/patches/ branches/notevenalpha/patches/musictomyears.pd branches/notevenalpha/patches/oggread.pd branches/notevenalpha/patches/recv.pd branches/notevenalpha/patches/send.pd branches/notevenalpha/physics.py branches/notevenalpha/signals.py branches/notevenalpha/signals.py.bak branches/notevenalpha/textures/ branches/notevenalpha/textures/Harimau.png branches/notevenalpha/textures/Harimau_engine.png branches/notevenalpha/thefuture.jpg branches/notevenalpha/videoplayer.cpp branches/notevenalpha/videoplayer.h Added: branches/notevenalpha/Jamroot =================================================================== --- branches/notevenalpha/Jamroot (rev 0) +++ branches/notevenalpha/Jamroot 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,40 @@ +# Copyright David Abrahams 2006. Distributed under the Boost +# Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +import python ; + +if ! [ python.configured ] +{ + ECHO "notice: no Python configured in user-config.jam" ; + ECHO "notice: will use default configuration" ; + using python ; +} + +# Specify the path to the Boost project. If you move this project, +# adjust this path to refer to the Boost root directory. +use-project boost + : ./ ; + +# Set up the project-wide requirements that everything uses the +# boost_python library from the project whose global ID is +# /boost/python. +project + : requirements <library>/boost/python//boost_python ; + +# Declare the three extension modules. You can specify multiple +# source files after the colon separated by spaces. +python-extension hello_ext : hello.cpp ; + +# A little "rule" (function) to clean up the syntax of declaring tests +# of these extension modules. +local rule run-test ( test-name : sources + ) +{ + import testing ; + testing.make-test run-pyd : $(sources) : : $(test-name) ; +} + +# Declare test targets +run-test hello : hello_ext hello.py ; + + Added: branches/notevenalpha/Makefile =================================================================== --- branches/notevenalpha/Makefile (rev 0) +++ branches/notevenalpha/Makefile 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,11 @@ +CC = g++ -Wall -ansi +CSCF = /home/genjix/media/programs/crystalspace-src-1.2.1/ + +all: + export CRYSTAL=$(CSCF) + $(CC) hello.cpp -shared -lGL -lGLU `sdl-config --cflags --libs` -lGLEW -lavutil -lavformat -lavcodec -lz -lm -lswscale -g `$(CSCF)/cs-config --cflags --libs` -I/usr/include/python2.6 lib/libboost_python.a -o engine.so videoplayer.cpp evensys.cpp -lSDL_image lib/libboost_thread.a -llo + +clean: + @echo Cleaning up... + @rm lesson05 + @echo Done. Added: branches/notevenalpha/README =================================================================== --- branches/notevenalpha/README (rev 0) +++ branches/notevenalpha/README 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,28 @@ +Readme for NeHe's OpenGL Tutorial Lesson 05 Linux/SDL port +========================================================== + +Compilation: + +make + +Running: + +./lesson05 + +Requirements: + +- OpenGL headers and libraries +- SDL headers and libraries (I've used version 1.1.7 and 1.2.0) +- gcc (any other ANSI C compiler should do it too; I used gcc 2.96) + +Known bugs/issues: + +Contact: + +If you have any problems, comments, or have useful hints, +email to le...@ee... + +Credits: +Jeff Molofee (ne...@co...) for writing the tutorials. +Ti Leggett for the port to linux/SDL +Mihael Vrbanec for the Makefile and this README template Added: branches/notevenalpha/app.py =================================================================== --- branches/notevenalpha/app.py (rev 0) +++ branches/notevenalpha/app.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- +from OpenGL.GL import * +import engine as en, time +import evsys as ev +import signals +import game +from bind import * +import harimau + +en.init() +root = game.Component() + +class Camera(game.Component): + def __init__(self, evsys, updates): + game.Component.__init__(self) + #evsys.signal("keydown_left").Connect(self.move(-1, 0, 0)) + """evsys.signal("keydown_left").Connect(bind(self.startMove, 1, 0, 0)) + evsys.signal("keyup_left").Connect(bind(self.stopMove, 1, 0, 0)) + evsys.signal("keydown_right").Connect(bind(self.startMove, -1, 0, 0)) + evsys.signal("keyup_right").Connect(bind(self.stopMove, -1, 0, 0)) + evsys.signal("keydown_up").Connect(bind(self.startMove, 0, 0, 1)) + evsys.signal("keyup_up").Connect(bind(self.stopMove, 0, 0, 1)) + evsys.signal("keydown_down").Connect(bind(self.startMove, 0, 0, -1)) + evsys.signal("keyup_down").Connect(bind(self.stopMove, 0, 0, -1)) + evsys.signal("keydown_pageup").Connect(bind(self.startMove, 0, -1, 0)) + evsys.signal("keyup_pageup").Connect(bind(self.stopMove, 0, -1, 0)) + evsys.signal("keydown_pagedown").Connect(bind(self.startMove, 0, 1, 0)) + evsys.signal("keyup_pagedown").Connect(bind(self.stopMove, 0, 1, 0)) + evsys.signal("keydown_lalt").Connect(bind(self.altPress, True)) + evsys.signal("keyup_lalt").Connect(bind(self.altPress, False))""" + self.pos = en.Vector(0,-2,-16) + self.eye = en.Vector(0,6,0) + self.up = en.Vector(0,1,0) + self.camtrans = en.Transform() + self.updateTransform() + updates.Connect(self.applyCamera, 5000) + self.move = None + self.alt = False + def altPress(self, alt): + self.alt = alt + def startMove(self, x, y, z): + self.move = en.Vector(x, y, z) + def stopMove(self, x, y, z): + self.move = None + def applyCamera(self): + if self.move: + if self.alt: + self.camtrans.RotateThis(self.move, 0.1) + else: + self.camtrans.Translate(self.move) + glLoadIdentity() + en.setupTransform(self.camtrans) + def updateTransform(self): + self.camtrans.SetOrigin(self.pos) + """dir = en.Vector(self.pos) + dir.x -= self.eye.x + dir.y -= self.eye.y + dir.z -= self.eye.z""" + v = en.Vector(0,-1,1) + self.camtrans.LookAt(v, self.up) + +class Floor(game.Component): + def __init__(self, updates, text): + updates.Connect(self.draw, 6002) + self.texture = text + def draw(self): + scale = 8 + glPushMatrix() + glTranslatef( 0, -0.5, 0 ) + glBindTexture( GL_TEXTURE_2D, self.texture ) + glBegin( GL_QUADS ) + glNormal3f( 0.0,-1.0, 0.0) # Normal Pointing Down + glTexCoord2f(1.0, 1.0) + glVertex3f(-scale, 0, -scale) # Point 1 (Bottom) + glTexCoord2f(0.0, 1.0) + glVertex3f( scale, 0, -scale) # Point 2 (Bottom) + glTexCoord2f(0.0, 0.0) + glVertex3f( scale, 0, scale) # Point 3 (Bottom) + glTexCoord2f(1.0, 0.0) + glVertex3f(-scale, 0, scale) # Point 4 (Bottom) + glEnd( ) + glPopMatrix() + +class Cube(game.Component): + def __init__(self, updates, text): + updates.Connect(self.draw, 6000) + self.rquad = 0 + self.texture = text + def draw(self): + glPushMatrix() + glTranslatef( 0, 0.0, -4 ) + glRotatef( self.rquad, 0.0, 1.0, 0.0 ) + + glBindTexture( GL_TEXTURE_2D, self.texture ) + glBegin( GL_QUADS ) + glNormal3f( 0.0, 0.0, 1.0) # Normal Pointing Towards Viewer + glTexCoord2f(0.0, 0.0) + glVertex3f(-1.0, -1.0, 1.0) # Point 1 (Front) + glTexCoord2f(1.0, 0.0) + glVertex3f( 1.0, -1.0, 1.0) # Point 2 (Front) + glTexCoord2f(1.0, 1.0) + glVertex3f( 1.0, 1.0, 1.0) # Point 3 (Front) + glTexCoord2f(0.0, 1.0) + glVertex3f(-1.0, 1.0, 1.0) # Point 4 (Front) + # Back Face + glNormal3f( 0.0, 0.0,-1.0) # Normal Pointing Away From Viewer + glTexCoord2f(1.0, 0.0) + glVertex3f(-1.0, -1.0, -1.0) # Point 1 (Back) + glTexCoord2f(1.0, 1.0) + glVertex3f(-1.0, 1.0, -1.0) # Point 2 (Back) + glTexCoord2f(0.0, 1.0) + glVertex3f( 1.0, 1.0, -1.0) # Point 3 (Back) + glTexCoord2f(0.0, 0.0) + glVertex3f( 1.0, -1.0, -1.0) # Point 4 (Back) + # Top Face + glNormal3f( 0.0, 1.0, 0.0) # Normal Pointing Up + glTexCoord2f(0.0, 1.0) + glVertex3f(-1.0, 1.0, -1.0) # Point 1 (Top) + glTexCoord2f(0.0, 0.0) + glVertex3f(-1.0, 1.0, 1.0) # Point 2 (Top) + glTexCoord2f(1.0, 0.0) + glVertex3f( 1.0, 1.0, 1.0) # Point 3 (Top) + glTexCoord2f(1.0, 1.0) + glVertex3f( 1.0, 1.0, -1.0) # Point 4 (Top) + # Bottom Face + glNormal3f( 0.0,-1.0, 0.0) # Normal Pointing Down + glTexCoord2f(1.0, 1.0) + glVertex3f(-1.0, -1.0, -1.0) # Point 1 (Bottom) + glTexCoord2f(0.0, 1.0) + glVertex3f( 1.0, -1.0, -1.0) # Point 2 (Bottom) + glTexCoord2f(0.0, 0.0) + glVertex3f( 1.0, -1.0, 1.0) # Point 3 (Bottom) + glTexCoord2f(1.0, 0.0) + glVertex3f(-1.0, -1.0, 1.0) # Point 4 (Bottom) + # Right ace + glNormal3f( 1.0, 0.0, 0.0) # Normal Pointing Right + glTexCoord2f(1.0, 0.0) + glVertex3f( 1.0, -1.0, -1.0) # Point 1 (Right) + glTexCoord2f(1.0, 1.0) + glVertex3f( 1.0, 1.0, -1.0) # Point 2 (Right) + glTexCoord2f(0.0, 1.0) + glVertex3f( 1.0, 1.0, 1.0) # Point 3 (Right) + glTexCoord2f(0.0, 0.0) + glVertex3f( 1.0, -1.0, 1.0) # Point 4 (Right) + glNormal3f(-1.0, 0.0, 0.0) # Normal Pointing Let + glTexCoord2f(0.0, 0.0) + glVertex3f(-1.0, -1.0, -1.0) # Point 1 (Let) + glTexCoord2f(1.0, 0.0) + glVertex3f(-1.0, -1.0, 1.0) # Point 2 (Let) + glTexCoord2f(1.0, 1.0) + glVertex3f(-1.0, 1.0, 1.0) # Point 3 (Let) + glTexCoord2f(0.0, 1.0) + glVertex3f(-1.0, 1.0, -1.0) # Point 4 (Let) + glEnd( ) + glPopMatrix() + self.rquad -= 0.8 + +class Video(game.Component): + def __init__(self, updater): + self.v = en.VideoPlayer() + self.v.init("/home/genjix/media/videos/[BSS]_Genius_Party_Beyond_[DVD]/[BSS]_Genius_Party_Beyond_-_Dimension_Bomb_[1DB25A30].mkv") + self.v.run() + updater.Connect(self.draw, 4000) + def draw(self): + self.v.display() + def die(self): + self.v.die = True + +LightPosition = [0.0, 10.0, 2.0, 1.0] +LightAmbient = [0.5, 0.5, 0.5, 1.0] +LightDiffuse = [1.0, 1.0, 1.0, 1.0] +glLightfv( GL_LIGHT1, GL_AMBIENT, LightAmbient ) +glLightfv( GL_LIGHT1, GL_DIFFUSE, LightDiffuse ) +glLightfv( GL_LIGHT1, GL_POSITION, LightPosition ) +glEnable( GL_LIGHT1 ) + +#evsys = EventSystem() +evsys = ev.EventSystem() +evsys.runOSCServer(7779) + +tex = en.loadTexture("thefuture.jpg") +updater = signals.Signal() +cam = Camera(evsys, updater) +#cub = Cube(updater, tex) +Floor(updater, tex) +vid = Video(updater) +s = harimau.Ship(evsys, updater) + +finish = False +def stopLoop(p): + global finish + finish = True +evsys.signal("keydown_escape").Connect(stopLoop) + +while not finish: + try: + updater() + en.flipBuffers() + en.delay(50) + evsys.pollEvents() + evsys.update() + except KeyboardInterrupt: + vid.die() + break +vid.die() +en.quit(0) Added: branches/notevenalpha/bind.py =================================================================== --- branches/notevenalpha/bind.py (rev 0) +++ branches/notevenalpha/bind.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +class placeholder(object): + def __init__(self, pos): + self.pos = pos + +_1 = placeholder(0) +_2 = placeholder(1) +_3 = placeholder(2) + +# etc... would be nice to have code to generate N placeholders automatically. +# is eval the way to do it? +#>>> (Update) see George's comment for an answer to +#>>> the above question and and alternative solution + +def bind(foo, *boundargs, **boundkw): + """ Allows binding some of the function's args, using placeholders _1, _2, + etc for the args that are NOT bound (or curried, if you like) + ========= FOOD FOR DOCTEST =========== + >>> def foo(a, b, c, d = None, e = None): return (a, b, c, d, e) + >>> foo(1, 2, 3, e = 'Nooo!') + (1, 2, 3, None, 'Nooo!') + >>> foo1 = bind(foo, _2, 2, _1, e = 'Nee!') + >>> foo1(1, 3) + (3, 2, 1, None, 'Nee!') + Test overriding the bound args with the calltime args + >>> foo1(1, 3, e = 'Overritten') + (3, 2, 1, None, 'Overritten') + """ + def with_bound_args(*a, **kw): + args = [] + for arg in boundargs: + if isinstance(arg, placeholder): + args.append(a[arg.pos]) + else: + args.append(arg) + #>>> (Update) Peter Harris (PEP 309) mentioned + #>>> that it makes much more sense to override + #>>> the bound keyword args with call-time args; + #>>> hence we have to make a copy of the bound + #>>> dict and update it, rather than updatinng the + #>>> call-time keyword arg dictionary. I agree + #>>> with the point, although there is an alternative + #>>> of treating it as an error. The more lenient + #>>> way seems more Pythonic. + #kwdict = boundargs.copy() + #kwdict.update(kw) + kwdict = boundkw.copy() + kwdict.update(kw) + return foo(*args, **kwdict) + return with_bound_args + +#>>> Update: I thought about this a little bit longer, especially considering +#>>> George's observation that this technique is an implementation of +#>>> 'partial function application' rather that just 'curry'. In languages where +#>>> 'partial application' or 'curry' is supported natively it is possible to +#>>> just use the name of the function to create a function with partially +#>>> applied agruments. Well, why not do it in Python? All it takes is a +#>>> decorator. The decorator decides whether a regular call or a partial +#>>> application is desired by looking for placeholders in the argument list. + +def partial_application(foo): + def inner(*a, **kw): + if True in [isinstance(o, placeholder) for o in a]: + return bind(foo, *a, **kw) + else: return foo(*a, **kw) + return inner + +@partial_application +def pa_test(a, b, c, d, e = None, f = None): + """ ============ DOCTEST FOOD ============ + >>> pa_test(1, 2, 3, 4, 5) + (1, 2, 3, 4, 5, None) + >>> pa = pa_test(_1, 2, 3, 4, 5) + >>> pa(1) + (1, 2, 3, 4, 5, None) + """ + return (a, b, c, d, e, f) + +if __name__ == "__main__": + def foo(a, b, c, d = None, e = None): + return (a, b, c, d, e) + print foo(1, 2, 3, e = 'Nooo!') + foo1 = bind(foo, _2, 2, _1, e = 'Nee!') + print foo1(1, 4) + print foo1(1, 3, e = 'Overritten') + print pa_test(1, 2, 3, 4, 5) + pa = pa_test(_1, 2, 3, 4, 5) + print pa(110) Added: branches/notevenalpha/evensys.cpp =================================================================== --- branches/notevenalpha/evensys.cpp (rev 0) +++ branches/notevenalpha/evensys.cpp 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,233 @@ +#include "evensys.h" + +#include <SDL/SDL.h> +#include <boost/lexical_cast.hpp> +#include <boost/bind.hpp> +#include <boost/thread.hpp> +//#include <boost/foreach.hpp> +//#define foreach BOOST_FOREACH + +static std::string oscTypePython(char type) +{ + switch(type) + { + /** 32 bit signed integer. */ + case (LO_INT32): + return "int"; + /** 32 bit IEEE-754 float. */ + case (LO_FLOAT): + return "float"; + /** Standard C, NULL terminated string. */ + case (LO_STRING): + return "str"; + /** OSC binary blob type. Accessed using the lo_blob_*() functions. */ + case (LO_BLOB): + //params.GetParameter (i+1).Set (v->i32); + break; + /* extended OSC types */ + /** 64 bit signed integer. */ + case (LO_INT64): + return "int"; + /** OSC TimeTag type, represented by the lo_timetag structure. */ + case (LO_TIMETAG): + //params.GetParameter (i+1).Set (v->i32); + break; + /** 64 bit IEEE-754 double. */ + case (LO_DOUBLE): + return "float"; + /** Standard C, NULL terminated, string. Used in systems which + * distinguish strings and symbols. */ + case (LO_SYMBOL): + return "str"; + /** Standard C, 8 bit, char variable. */ + case (LO_CHAR): + return "str"; + /** A 4 byte MIDI packet. */ + case (LO_MIDI): + //params.GetParameter (i+1).Set (v->i32); +/*printf("MIDI ["); +for (i=0; i<4; i++) { + printf("0x%02x", *((uint8_t *)(data) + i)); + if (i+1 < 4) printf(" "); +} +printf("]");*/ + break; + /** Symbol representing the value True. */ + case (LO_TRUE): + return "bool"; + /** Symbol representing the value False. */ + case (LO_FALSE): + return "bool"; + /** Symbol representing the value Nil. */ + case (LO_NIL): + return "int"; + /** Symbol representing the value Infinitum. */ + case (LO_INFINITUM): + return "int"; + default: + break; + } + return ""; +} +static std::string oscValueStr(char type, lo_arg* v) +{ + #define cast(x, y) boost::lexical_cast<std::string>((x)y) + switch (type) + { + /** 32 bit signed integer. */ + case (LO_INT32): + return cast(int32_t, v->i32); + /** 32 bit IEEE-754 float. */ + case (LO_FLOAT): + return cast(float,v->f32); + /** Standard C, NULL terminated string. */ + case (LO_STRING): + return cast(const char*,v); + /** OSC binary blob type. Accessed using the lo_blob_*() functions. */ + case (LO_BLOB): + //params.GetParameter (i+1).Set (v->i32); + break; + /* extended OSC types */ + /** 64 bit signed integer. */ + case (LO_INT64): + return cast(int64_t,v->i64); + /** OSC TimeTag type, represented by the lo_timetag structure. */ + case (LO_TIMETAG): + //params.GetParameter (i+1).Set (v->i32); + break; + /** 64 bit IEEE-754 double. */ + case (LO_DOUBLE): + return cast(double,v->f64); + /** Standard C, NULL terminated, string. Used in systems which + * distinguish strings and symbols. */ + case (LO_SYMBOL): + return cast(const char*,v); + /** Standard C, 8 bit, char variable. */ + case (LO_CHAR): + return cast(char,v->c); + /** A 4 byte MIDI packet. */ + case (LO_MIDI): + //params.GetParameter (i+1).Set (v->i32); +/*printf("MIDI ["); +for (i=0; i<4; i++) { + printf("0x%02x", *((uint8_t *)(data) + i)); + if (i+1 < 4) printf(" "); +} +printf("]");*/ + break; + /** Symbol representing the value True. */ + case (LO_TRUE): + return cast(const char*,"True"); + /** Symbol representing the value False. */ + case (LO_FALSE): + return cast(const char*,"False"); + /** Symbol representing the value Nil. */ + case (LO_NIL): + return cast(int,0); + /** Symbol representing the value Infinitum. */ + case (LO_INFINITUM): + return cast(int,99999999); + default: + break; + } + #undef cast + return "None"; +} +static int generic_handler(const char *path, const char *types, lo_arg **argv, + int argc, void *data, void *user_data) +{ + EventSystem* evsys = reinterpret_cast<EventSystem*>(user_data); + if (!evsys) + return 1; + evsys->handleOSCMessage(path, types, argv, argc, data); + return 0; +} +static void loerror(int num, const char *msg, const char *path) +{ + fprintf(stderr, "liblo server error %d in path %s: %s\n", num, path, msg); + fflush(stderr); +} +static void threadOSC(int port, EventSystem* evsys) +{ + std::string portstr = boost::lexical_cast<std::string>(port); + lo_server_thread st = lo_server_thread_new(portstr.c_str(), loerror); + lo_server_thread_add_method(st, NULL, NULL, generic_handler, evsys); + lo_server_thread_start(st); +} + +EventSystem::EventSystem() +{ +} +Event EventSystem::pop() +{ + Event ev = events.top(); + events.pop(); + return ev; +} +bool EventSystem::runOSCServer(int port) +{ + boost::thread thr(boost::bind(&threadOSC, port, this)); + return true; +} +void EventSystem::handleKeyPress(SDL_keysym *keysym, bool down) +{ + std::string evtype(down ? "keydown_" : "keyup_"); + switch (keysym->sym) + { + #include "keys.hpp" + default: + break; + } + Event ev(evtype.c_str()); + events.push(ev); +} +void EventSystem::handleOSCMessage(const char *path, const char *types, lo_arg **argv, + int argc, void *data) +{ + Event ev("osc_msg"); + std::string par("\""); + par += path; + par += "\""; + ev.add(par.c_str()); + for (int i = 0; i < argc; i++) { + par = oscTypePython(types[i]); + par += "(\""; + par += oscValueStr(types[i], argv[i]); + par += "\")"; + ev.add(par.c_str()); + } + events.push(ev); +} +void EventSystem::pollEvents() +{ + Event* ev; + SDL_Event event; + while(SDL_PollEvent(&event)) { + switch(event.type) + { + case SDL_ACTIVEEVENT: + ev = new Event("window_focus"); + if(event.active.gain == 0) + ev->add("bool(False)"); + else + ev->add("bool(True)"); + events.push(*ev); + delete ev; + break; + case SDL_VIDEORESIZE: + events.push(Event("window_resize")); + break; + case SDL_KEYDOWN: + handleKeyPress(&event.key.keysym, true); + break; + case SDL_KEYUP: + handleKeyPress(&event.key.keysym, false); + break; + case SDL_QUIT: + events.push(Event("window_quit")); + break; + default: + break; + } + } +} Added: branches/notevenalpha/evensys.h =================================================================== --- branches/notevenalpha/evensys.h (rev 0) +++ branches/notevenalpha/evensys.h 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,36 @@ +#ifndef EVENTSYM_H +#define EVENTSYM_H + +#include <boost/python/list.hpp> +#include <stack> +#include <string> +#include <vector> +#include "lo/lo.h" + +struct SDL_keysym; + +struct Event +{ + Event() {} + Event(const char* type) : type (type) {} + void add(const char* par) { params.append(par); } + std::string type; + boost::python::list params; +}; + +class EventSystem +{ + public: + EventSystem(); + void pollEvents(); + Event pop(); + bool empty() { return events.empty(); } + bool runOSCServer(int port); + + void handleKeyPress(SDL_keysym *keysym, bool down); + void handleOSCMessage(const char *path, const char *types, lo_arg **argv, + int argc, void *data); + std::stack<Event> events; +}; + +#endif Added: branches/notevenalpha/evsys.py =================================================================== --- branches/notevenalpha/evsys.py (rev 0) +++ branches/notevenalpha/evsys.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from engine import EventSystem as engEventSystem +import signals + +class IterableWrapper: + def __init__(self, evsys): + self.evsys = evsys + def __iter__(self): + return self + def next(self): + if self.evsys.empty(): + raise StopIteration + ev = self.evsys.pop() + params = [] + for p in ev.params: + params.append(eval(p)) + return ev.type, params + +class EventSystem(engEventSystem): + def __init__(self): + engEventSystem.__init__(self) + self.evmap = {} + def events(self): + return IterableWrapper(self) + def signal(self, type): + if not self.evmap.has_key(type): + self.evmap[type] = signals.Signal() + return self.evmap[type] + def update(self): + for evtype, evpar in self.events(): + print evtype, evpar + try: + self.evmap[evtype](evpar) + except KeyError: + pass Added: branches/notevenalpha/expmesh.py =================================================================== --- branches/notevenalpha/expmesh.py (rev 0) +++ branches/notevenalpha/expmesh.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +import Blender +mesh = Blender.Object.GetSelected()[0].getData() +f = open("/home/genjix/out", "a") +f.write("faces %i\nverts %i\n"%(len(mesh.faces), len(mesh.verts))) +for fidx, face in enumerate(mesh.faces): + f.write("%s\n"%(face.image.getFilename().strip("//textures/"))) + for vert in face.v: + f.write("%i "%(vert.index,)) + f.write("|") + for uv in face.uv: + f.write("%f %f "%(uv[0], uv[1])) + f.write("\n") + f.write("%f %f %f\n"%(face.normal[0], face.normal[1], face.normal[2])) +for vert in mesh.verts: + f.write("%f %f %f\n"%(vert.co[0], vert.co[1], vert.co[2])) Added: branches/notevenalpha/game.py =================================================================== --- branches/notevenalpha/game.py (rev 0) +++ branches/notevenalpha/game.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +import signals + +class TestComponent: + def __init__(self, parententity, name): + pass + def sendMessage(self, propname, msg): + print propname, msg + return "returned..." + +class Entity: + def __init__(self, name): + self.comps = {} + def sendMessage(self, msg): + try: + return self.comps[msg[0][0]].sendMessage(msg[0][1], msg[1]) + except KeyError: + return None + +class InvalidRequest(Exception): + def __init__(self, msg): + self.msg = msg + def __str__(self): + return "Invalid method/property request: " + str(self.msg) + +class Component: + def __init__(self): + self.comps = {} + def sendMessage(self, hier, msg): + hier = list(hier[:]) + next = hier.pop() + try: + if len(hier) == 0: + getattr(self, next)(*msg) + else: + return self.comps[next].sendMessage(hier, msg) + except KeyError: + raise InvalidRequest(msg) + def findComp(self, hier): + hier = list(hier[:]) + next = hier.pop() + try: + if len(hier) == 0: + return self.comps[next] + else: + return self.comps[next].findComp(hier) + except KeyError: + raise InvalidRequest("findComp() " + next + ", " + str(hier)) + + def setValue(self, name, val): + try: + preval = getattr(self, name) + val = preval.__class__(val) + except KeyError: + raise InvalidRequest(name + "=" + str(val)) + except TypeError: + pass + setattr(self, name, val) + + def add(self, name, comp): + self.comps[name] = comp + +# signals slots +#properties, methods, entities +# set/get on props signals + +if __name__ == "__main__": + class A(Component): + pass + class B(Component): + def __init__(self): + Component.__init__(self) + self.y = 110 + def foo(self, x): + print "bar", x + + a = A() + b = B() + a.comps["person"] = b + msg = ("foo", "person"), (10,) + msg = ("setValue", "person"), ("y", 4.5) + a.sendMessage(*msg) + print b.y Added: branches/notevenalpha/genkeys.py =================================================================== --- branches/notevenalpha/genkeys.py (rev 0) +++ branches/notevenalpha/genkeys.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +fout = open("keys.hpp","w") +fin = open("keys", "r") +for l in fin: + key = l[:-1] + fout.write("case %s:\n"%(key,)) + key = key.lower()[5:] + fout.write(" ev.add(\"str(\\\"%s\\\")\");\n"%(key,)) + fout.write(" break;\n") Added: branches/notevenalpha/harimau.py =================================================================== --- branches/notevenalpha/harimau.py (rev 0) +++ branches/notevenalpha/harimau.py 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +from OpenGL.GL import * +import engine as en +from bind import * +import math + +class Face: + def __init__(self): + self.v = [0] * 3 + self.tex = 0 + self.uvs = [(0,0)] * 3 + self.normal = [0] * 3 + +class Ship: + def __init__(self, evsys, updater): + f = open("models/harimau") + l = f.readline()[:-1] + if not "faces" in l: + print "errror" + faclen = int(l.split(" ")[1]) + l = f.readline()[:-1] + if not "verts" in l: + print "errror" + vertlen = int(l.split(" ")[1]) + self.texref = [] + self.faces = [] + self.verts = [] + for i in xrange(faclen): + ltex = f.readline()[:-1].split(" ")[0].strip() + ldat = f.readline()[:-1].split("|") + verts = ldat[0].split(" ")[:-1] + uvs = ldat[1].split(" ") + normal = f.readline()[:-1].split(" ") + face = Face() + face.v = [int(v) for v in verts] + face.normal = [float(v) for v in normal] + tmuvs = [float(uv) for uv in uvs] + face.uvs[0] = tmuvs[0], tmuvs[1] + face.uvs[1] = tmuvs[2], tmuvs[3] + face.uvs[2] = tmuvs[4], tmuvs[5] + if ltex not in self.texref: + self.texref.append(ltex) + face.tex = self.texref.index(ltex) + self.faces.append(face) + for i in xrange(vertlen): + normal = f.readline()[:-1].split(" ") + vert = [float(v) for v in normal] + self.verts.append(vert) + self.texglref = [] + for fname in self.texref: + self.texglref.append(en.loadTexture("textures/" + fname)) + evsys.signal("keydown_left").Connect(bind(self.startMove, 0, -1, 0)) + evsys.signal("keyup_left").Connect(bind(self.stopMove, 0, -1, 0)) + evsys.signal("keydown_right").Connect(bind(self.startMove, 0, 1, 0)) + evsys.signal("keyup_right").Connect(bind(self.stopMove, 0, 1, 0)) + evsys.signal("keydown_up").Connect(bind(self.startMove, 1, 0, 0)) + evsys.signal("keyup_up").Connect(bind(self.stopMove, 1, 0, 0)) + evsys.signal("keydown_down").Connect(bind(self.startMove, -1, 0, 0)) + evsys.signal("keyup_down").Connect(bind(self.stopMove, -1, 0, 0)) + evsys.signal("keydown_pageup").Connect(bind(self.startMove, 0, 0, 1)) + evsys.signal("keyup_pageup").Connect(bind(self.stopMove, 0, 0, 1)) + evsys.signal("keydown_pagedown").Connect(bind(self.startMove, 0, 0, -1)) + evsys.signal("keyup_pagedown").Connect(bind(self.stopMove, 0, 0, -1)) + updater.Connect(self.draw, 6000) + self.rot = en.Vector(0,0,0) + def startMove(self, x, y, z): + self.rot.x += x * 0.1 + self.rot.y += y * 0.1 + self.rot.z += z * 0.1 + def stopMove(self, x, y, z): + pass + def draw(self): + q = en.Quaternion() + axis = en.Vector(0,1,0) + q.SetAxisAngle(axis, self.rot.y) + + m = q.GetMatrix() + q2 = en.Quaternion() + axis = en.Vector(m.m11,m.m12,m.m13) + q2.SetAxisAngle(axis, self.rot.x) + + m = m * q2.GetMatrix() + q3 = en.Quaternion() + axis = en.Vector(m.m31,m.m32,m.m33) + q3.SetAxisAngle(axis, self.rot.z) + m = m * q3.GetMatrix() + #q = q2.__mull__(q) + #m = q.GetMatrix() + glPushMatrix() + #glRotatef(180, 0, 1, 0) + #glRotatef( -90, 1, 0, 0 ) + #en.setupMatrix(q3.GetMatrix()) + #en.setupMatrix(q2.GetMatrix()) + #en.setupMatrix(q.GetMatrix()) + glTranslatef( 0, 0, 3 ) + en.setupMatrix(m) + glTranslatef( 0, 0, 1 ) + + texbefore = self.texglref[0] + glBindTexture( GL_TEXTURE_2D, texbefore ) + glBegin( GL_TRIANGLES ) + for f in self.faces: + if texbefore != self.texglref[f.tex]: + glEnd() + texbefore = self.texglref[f.tex] + glBindTexture( GL_TEXTURE_2D, texbefore ) + glBegin( GL_TRIANGLES ) + glNormal3f(f.normal[0], f.normal[1], f.normal[2]) + for x in xrange(3): + glTexCoord2f(f.uvs[x][0], f.uvs[x][1]) + v1 = self.verts[f.v[x]] + glVertex3f(v1[0], v1[1], v1[2]) + glEnd( ) + glPopMatrix() + + +if __name__ == "__main__": + pass Added: branches/notevenalpha/hello.cpp =================================================================== --- branches/notevenalpha/hello.cpp (rev 0) +++ branches/notevenalpha/hello.cpp 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,405 @@ +// Copyright Joel de Guzman 2002-2004. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) +// Hello World Example from the tutorial +// [Joel de Guzman 10/9/2002] + +#include <boost/python/module.hpp> +#include <boost/python/def.hpp> +#include <boost/python/class.hpp> +#include <boost/python/operators.hpp> +#include <cssysdef.h> +#include <csgeom/transfrm.h> +#include <csgeom/quaternion.h> +#include <csgeom/matrix3.h> +#include <csplugincommon/opengl/glhelper.h> +#include <csgeom/vector3.h> +#include <string> +#include <boost/lexical_cast.hpp> +#include "videoplayer.h" +#include "evensys.h" +#include <SDL/SDL.h> +#include <SDL/SDL_image.h> +#include <GL/gl.h> +#include <GL/glu.h> +#include <lo/lo.h> + +void quit( int returnCode ) +{ + /* clean up the window */ + SDL_Quit( ); + + /* and exit appropriately */ + exit( returnCode ); +} +/* function to reset our viewport after a window resize */ +bool resizeWindow( int width, int height ) +{ + /* Height / width ration */ + GLfloat ratio; + + /* Protect against a divide by zero */ + if ( height == 0 ) + height = 1; + + ratio = ( GLfloat )width / ( GLfloat )height; + + /* Setup our viewport. */ + glViewport( 0, 0, ( GLsizei )width, ( GLsizei )height ); + + /* change to the projection matrix and set our viewing volume. */ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity( ); + + /* Set our perspective */ + gluPerspective( 45.0f, ratio, 0.1f, 100.0f ); + + /* Make sure we're chaning the model view and not the projection */ + glMatrixMode( GL_MODELVIEW ); + + /* Reset The View */ + glLoadIdentity( ); + + return true; +} +void appInit() +{ + if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) + { + fprintf( stderr, "Video initialization failed: %s\n", + SDL_GetError( ) ); + quit( 1 ); + } + /* Fetch the video info */ + const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo( ); + + if ( !videoInfo ) + { + fprintf( stderr, "Video query failed: %s\n", + SDL_GetError( ) ); + quit( 1 ); + } + + int videoFlags; + /* the flags to pass to SDL_SetVideoMode */ + videoFlags = SDL_OPENGL; /* Enable OpenGL in SDL */ + videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */ + videoFlags |= SDL_HWPALETTE; /* Store the palette in hardware */ + videoFlags |= SDL_RESIZABLE; /* Enable window resizing */ + + /* This checks to see if surfaces can be stored in memory */ + if ( videoInfo->hw_available ) + videoFlags |= SDL_HWSURFACE; + else + videoFlags |= SDL_SWSURFACE; + + /* This checks if hardware blits can be done */ + if ( videoInfo->blit_hw ) + videoFlags |= SDL_HWACCEL; + + /* Sets up OpenGL double buffering */ + SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); + + /* get a SDL surface */ + SDL_Surface* surface = SDL_SetVideoMode( 1024, 768, 32, + videoFlags ); + + /* Verify there is a surface */ + if ( !surface ) + { + fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError( ) ); + quit( 1 ); + } + /* Enable smooth shading */ + glShadeModel( GL_SMOOTH ); + + /* Set the background black */ + glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); + + /* Depth buffer setup */ + glClearDepth( 1.0f ); + + /* Enables Depth Testing */ + glEnable( GL_DEPTH_TEST ); + + /* The Type Of Depth Test To Do */ + glDepthFunc( GL_LEQUAL ); + + /* Really Nice Perspective Calculations */ + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); + + glEnable(GL_LIGHTING); + + glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); + glEnable(GL_LINE_SMOOTH); + resizeWindow(1024, 768); +} +GLuint LoadImage(const char* name) +{ + GLuint texture; // This is a handle to our texture object +SDL_Surface *surface; // This surface will tell us the details of the image +GLenum texture_format; +GLint nOfColors; + + SDL_Surface* Surf_Temp = NULL; + + if((Surf_Temp = IMG_Load(name)) == NULL) { + return 0; + } + + surface = SDL_DisplayFormatAlpha(Surf_Temp); + SDL_FreeSurface(Surf_Temp); + +if (surface) { + + // Check that the image's width is a power of 2 + if ( (surface->w & (surface->w - 1)) != 0 ) { + printf("warning: image.bmp's width is not a power of 2\n"); + } + + // Also check if the height is a power of 2 + if ( (surface->h & (surface->h - 1)) != 0 ) { + printf("warning: image.bmp's height is not a power of 2\n"); + } + + // get the number of channels in the SDL surface + nOfColors = surface->format->BytesPerPixel; + if (nOfColors == 4) // contains an alpha channel + { + if (surface->format->Rmask == 0x000000ff) + texture_format = GL_RGBA; + else + texture_format = GL_BGRA; + } else if (nOfColors == 3) // no alpha channel + { + if (surface->format->Rmask == 0x000000ff) + texture_format = GL_RGB; + else + texture_format = GL_BGR; + } else { + printf("warning: the image is not truecolor.. this will probably break\n"); + // this error should not go unhandled + } + + // Have OpenGL generate a texture object handle for us + glGenTextures( 1, &texture ); + + // Bind the texture object + glBindTexture( GL_TEXTURE_2D, texture ); + + // Set the texture's stretching properties + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + + // Edit the texture object's image data using the information SDL_Surface gives us + glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, + texture_format, GL_UNSIGNED_BYTE, surface->pixels ); +} +else { + printf("SDL could not load image.bmp: %s\n", SDL_GetError()); + SDL_Quit(); + return 0; +} +// Free the SDL_Surface only if it was successfully created +if ( surface ) { + SDL_FreeSurface( surface ); +} +return texture; +} + +void setupCamera(const csReversibleTransform& camtrans) +{ + float m[16]; + makeGLMatrix (camtrans, m); + glLoadMatrixf (m); +} +void setupMatrix(const csMatrix3& q) +{ + float m[16]; + makeGLMatrix(q, m); + glMultMatrixf (m); +} +std::string VecRepr(const csVector3& v) +{ + return std::string("(") + boost::lexical_cast<std::string>(v.x) + ", " + + boost::lexical_cast<std::string>(v.y) + ", " + + boost::lexical_cast<std::string>(v.z) + ")"; +} + +class OSC +{ + public: + bool connect(const char* serv, int port) + { + disconnect(); + std::string portstr = boost::lexical_cast<std::string>(port); + t = lo_address_new(serv, portstr.c_str()); + return true; + } + bool disconnect() + { + lo_address_free(t); + return true; + } + int send(const char* path, boost::python::list params) + { + lo_message msg = lo_message_new(); + + boost::python::ssize_t n = boost::python::len(params); + for(boost::python::ssize_t i = 0; i < n; i++) + { + // the most evil piece of shit i ever typed in my life + boost::python::object elem = params[i]; + { + boost::python::extract<int> get(elem); + if(get.check()) { + lo_message_add_int32(msg, get()); + continue; + } + } + { + boost::python::extract<float> get(elem); + if(get.check()) { + lo_message_add_float(msg, get()); + continue; + } + } + { + boost::python::extract<const char*> get(elem); + if(get.check()) { + lo_message_add_string(msg, get()); + continue; + } + } + { + boost::python::extract<bool> get(elem); + if(get.check()) { + if(get()) + lo_message_add_true(msg); + else + lo_message_add_false(msg); + continue; + } + } + // oh no! + lo_message_add_nil(msg); + } + int ret = lo_send_message(t, path, msg); + lo_message_free(msg); + + return ret; + } + lo_address t; +}; + +static csVector3 TransformsOrigin(const csReversibleTransform& t) +{ + return t.GetOrigin(); +} +static csQuaternion MultipleyQuat(const csQuaternion& q1, const csQuaternion& q2) +{ + return q1 * q2; +} +static csMatrix3 MultiplyMatrix(const csMatrix3&m, const csMatrix3 &m1) +{ + return m * m1; +} +static csVector3 addVector(const csVector3&v, const csVector3&v1) +{ + return v + v1; +} +static csVector3 subVector(const csVector3&v, const csVector3&v1) +{ + return v - v1; +} +static csVector3 raddVector(csVector3&v, const csVector3&v1) +{ + v += v1; + return v; +} +static csVector3 rsubVector(csVector3&v, const csVector3&v1) +{ + v -= v1; + return v; +} + +BOOST_PYTHON_MODULE(engine) +{ + using namespace boost::python; + def("init", appInit); + def("quit", quit); + def("flipBuffers", SDL_GL_SwapBuffers); + def("delay", SDL_Delay); + def("loadTexture", LoadImage); + def("getTicks", SDL_GetTicks); + def("setupTransform", setupCamera); + def("setupMatrix", setupMatrix); + void (csVector3::*Set1)(float, float, float) = &csVector3::Set; + class_<csVector3>("Vector", init<>()) + .def(init<const csVector3&>()) + .def(init<float>()) + .def(init<float, float, float>()) + .def("Set", Set1) + .def_readwrite("x", &csVector3::x) + .def_readwrite("y", &csVector3::y) + .def_readwrite("z", &csVector3::z) + //.def(class_<csVector3>::self - other<csVector3>()) + .def("__repr__", &VecRepr) + .def("__add__", &addVector) + .def("__sub__", &subVector) + .def("__radd__", &raddVector) + .def("__rsub__", &rsubVector) + ; + class_<csMatrix3>("csMatrix3") + .def_readwrite("m11", &csMatrix3::m11) + .def_readwrite("m21", &csMatrix3::m21) + .def_readwrite("m31", &csMatrix3::m31) + .def_readwrite("m12", &csMatrix3::m12) + .def_readwrite("m22", &csMatrix3::m22) + .def_readwrite("m32", &csMatrix3::m32) + .def_readwrite("m13", &csMatrix3::m13) + .def_readwrite("m23", &csMatrix3::m23) + .def_readwrite("m33", &csMatrix3::m33) + .def("__mul__", &MultiplyMatrix) + ; + void (csReversibleTransform::*RotateThisVector)(const csVector3&, float) = + &csReversibleTransform::RotateThis; + class_<csReversibleTransform>("Transform") + .def("LookAt", &csReversibleTransform::LookAt) + .def("SetOrigin", &csReversibleTransform::SetOrigin) + .def("Translate", &csReversibleTransform::Translate) + .def("RotateThis", RotateThisVector) + .def("GetOrigin", &TransformsOrigin) + ; + class_<csQuaternion>("Quaternion", init<>()) + .def(init<const csVector3&, float>()) + .def(init<const csQuaternion &>()) + .def(init<float, float, float, float>()) + .def("SetAxisAngle", &csQuaternion::SetAxisAngle) + .def("GetMatrix", &csQuaternion::GetMatrix) + .def("__mul__", &MultipleyQuat) + .def_readwrite("v", &csQuaternion::v) + .def_readwrite("w", &csQuaternion::w) + ; + class_<VideoPlayer>("VideoPlayer") + .def("init", &VideoPlayer::init) + .def("run", &VideoPlayer::run) + .def_readwrite("die", &VideoPlayer::time2die) + .def("display", &VideoPlayer::display) + ; + class_<Event>("Event") + .def_readonly("type", &Event::type) + .def_readonly("params", &Event::params) + ; + class_<EventSystem>("EventSystem") + .def("pollEvents", &EventSystem::pollEvents) + .def("pop", &EventSystem::pop) + .def("empty", &EventSystem::empty) + .def("runOSCServer", &EventSystem::runOSCServer) + ; + class_<OSC>("OpenSoundControl") + .def("connect", &OSC::connect) + .def("disconnect", &OSC::disconnect) + .def("send", &OSC::send) + ; +} Added: branches/notevenalpha/keys =================================================================== --- branches/notevenalpha/keys (rev 0) +++ branches/notevenalpha/keys 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,231 @@ +SDLK_BACKSPACE +SDLK_TAB +SDLK_CLEAR +SDLK_RETURN +SDLK_PAUSE +SDLK_ESCAPE +SDLK_SPACE +SDLK_EXCLAIM +SDLK_QUOTEDBL +SDLK_HASH +SDLK_DOLLAR +SDLK_AMPERSAND +SDLK_QUOTE +SDLK_LEFTPAREN +SDLK_RIGHTPAREN +SDLK_ASTERISK +SDLK_PLUS +SDLK_COMMA +SDLK_MINUS +SDLK_PERIOD +SDLK_SLASH +SDLK_0 +SDLK_1 +SDLK_2 +SDLK_3 +SDLK_4 +SDLK_5 +SDLK_6 +SDLK_7 +SDLK_8 +SDLK_9 +SDLK_COLON +SDLK_SEMICOLON +SDLK_LESS +SDLK_EQUALS +SDLK_GREATER +SDLK_QUESTION +SDLK_AT +SDLK_LEFTBRACKET +SDLK_BACKSLASH +SDLK_RIGHTBRACKET +SDLK_CARET +SDLK_UNDERSCORE +SDLK_BACKQUOTE +SDLK_a +SDLK_b +SDLK_c +SDLK_d +SDLK_e +SDLK_f +SDLK_g +SDLK_h +SDLK_i +SDLK_j +SDLK_k +SDLK_l +SDLK_m +SDLK_n +SDLK_o +SDLK_p +SDLK_q +SDLK_r +SDLK_s +SDLK_t +SDLK_u +SDLK_v +SDLK_w +SDLK_x +SDLK_y +SDLK_z +SDLK_DELETE +SDLK_WORLD_0 +SDLK_WORLD_1 +SDLK_WORLD_2 +SDLK_WORLD_3 +SDLK_WORLD_4 +SDLK_WORLD_5 +SDLK_WORLD_6 +SDLK_WORLD_7 +SDLK_WORLD_8 +SDLK_WORLD_9 +SDLK_WORLD_10 +SDLK_WORLD_11 +SDLK_WORLD_12 +SDLK_WORLD_13 +SDLK_WORLD_14 +SDLK_WORLD_15 +SDLK_WORLD_16 +SDLK_WORLD_17 +SDLK_WORLD_18 +SDLK_WORLD_19 +SDLK_WORLD_20 +SDLK_WORLD_21 +SDLK_WORLD_22 +SDLK_WORLD_23 +SDLK_WORLD_24 +SDLK_WORLD_25 +SDLK_WORLD_26 +SDLK_WORLD_27 +SDLK_WORLD_28 +SDLK_WORLD_29 +SDLK_WORLD_30 +SDLK_WORLD_31 +SDLK_WORLD_32 +SDLK_WORLD_33 +SDLK_WORLD_34 +SDLK_WORLD_35 +SDLK_WORLD_36 +SDLK_WORLD_37 +SDLK_WORLD_38 +SDLK_WORLD_39 +SDLK_WORLD_40 +SDLK_WORLD_41 +SDLK_WORLD_42 +SDLK_WORLD_43 +SDLK_WORLD_44 +SDLK_WORLD_45 +SDLK_WORLD_46 +SDLK_WORLD_47 +SDLK_WORLD_48 +SDLK_WORLD_49 +SDLK_WORLD_50 +SDLK_WORLD_51 +SDLK_WORLD_52 +SDLK_WORLD_53 +SDLK_WORLD_54 +SDLK_WORLD_55 +SDLK_WORLD_56 +SDLK_WORLD_57 +SDLK_WORLD_58 +SDLK_WORLD_59 +SDLK_WORLD_60 +SDLK_WORLD_61 +SDLK_WORLD_62 +SDLK_WORLD_63 +SDLK_WORLD_64 +SDLK_WORLD_65 +SDLK_WORLD_66 +SDLK_WORLD_67 +SDLK_WORLD_68 +SDLK_WORLD_69 +SDLK_WORLD_70 +SDLK_WORLD_71 +SDLK_WORLD_72 +SDLK_WORLD_73 +SDLK_WORLD_74 +SDLK_WORLD_75 +SDLK_WORLD_76 +SDLK_WORLD_77 +SDLK_WORLD_78 +SDLK_WORLD_79 +SDLK_WORLD_80 +SDLK_WORLD_81 +SDLK_WORLD_82 +SDLK_WORLD_83 +SDLK_WORLD_84 +SDLK_WORLD_85 +SDLK_WORLD_86 +SDLK_WORLD_87 +SDLK_WORLD_88 +SDLK_WORLD_89 +SDLK_WORLD_90 +SDLK_WORLD_91 +SDLK_WORLD_92 +SDLK_WORLD_93 +SDLK_WORLD_94 +SDLK_WORLD_95 +SDLK_KP0 +SDLK_KP1 +SDLK_KP2 +SDLK_KP3 +SDLK_KP4 +SDLK_KP5 +SDLK_KP6 +SDLK_KP7 +SDLK_KP8 +SDLK_KP9 +SDLK_KP_PERIOD +SDLK_KP_DIVIDE +SDLK_KP_MULTIPLY +SDLK_KP_MINUS +SDLK_KP_PLUS +SDLK_KP_ENTER +SDLK_KP_EQUALS +SDLK_UP +SDLK_DOWN +SDLK_RIGHT +SDLK_LEFT +SDLK_INSERT +SDLK_HOME +SDLK_END +SDLK_PAGEUP +SDLK_PAGEDOWN +SDLK_F1 +SDLK_F2 +SDLK_F3 +SDLK_F4 +SDLK_F5 +SDLK_F6 +SDLK_F7 +SDLK_F8 +SDLK_F9 +SDLK_F10 +SDLK_F11 +SDLK_F12 +SDLK_F13 +SDLK_F14 +SDLK_F15 +SDLK_NUMLOCK +SDLK_CAPSLOCK +SDLK_SCROLLOCK +SDLK_RSHIFT +SDLK_LSHIFT +SDLK_RCTRL +SDLK_LCTRL +SDLK_RALT +SDLK_LALT +SDLK_RMETA +SDLK_LMETA +SDLK_LSUPER +SDLK_RSUPER +SDLK_MODE +SDLK_COMPOSE +SDLK_HELP +SDLK_PRINT +SDLK_SYSREQ +SDLK_BREAK +SDLK_MENU +SDLK_POWER +SDLK_EURO +SDLK_UNDO Added: branches/notevenalpha/keys.hpp =================================================================== --- branches/notevenalpha/keys.hpp (rev 0) +++ branches/notevenalpha/keys.hpp 2009-09-25 01:44:46 UTC (rev 792) @@ -0,0 +1,693 @@ +case SDLK_BACKSPACE: + evtype += "backspace"; + break; +case SDLK_TAB: + evtype += "tab"; + break; +case SDLK_CLEAR: + evtype += "clear"; + break; +case SDLK_RETURN: + evtype += "return"; + break; +case SDLK_PAUSE: + evtype += "pause"; + break; +case SDLK_ESCAPE: + evtype += "escape"; + break; +case SDLK_SPACE: + evtype += "space"; + break; +case SDLK_EXCLAIM: + evtype += "exclaim"; + break; +case SDLK_QUOTEDBL: + evtype += "quotedbl"; + break; +case SDLK_HASH: + evtype += "hash"; + break; +case SDLK_DOLLAR: + evtype += "dollar"; + break; +case SDLK_AMPERSAND: + evtype += "ampersand"; + break; +case SDLK_QUOTE: + evtype += "quote"; + break; +case SDLK_LEFTPAREN: + evtype += "leftparen"; + break; +case SDLK_RIGHTPAREN: + evtype += "rightparen"; + break; +case SDLK_ASTERISK: + evtype += "asterisk"; + break; +case SDLK_PLUS: + evtype += "plus"; + break; +case SDLK_COMMA: + evtype += "comma"; + break; +case SDLK_MINUS: + evtype += "minus"; + break; +case SDLK_PERIOD: + evtype += "period"; + break; +case SDLK_SLASH: + evtype += "slash"; + break; +case SDLK_0: + evtype += "0"; + break; +case SDLK_1: + evtype += "1"; + break; +case SDLK_2: + evtype += "2"; + break; +case SDLK_3: + evtype += "3"; + break; +case SDLK_4: + evtype += "4"; + break; +case SDLK_5: + evtype += "5"; + break; +case SDLK_6: + evtype += "6"; + break; +case SDLK_7: + evtype += "7"; + break; +case SDLK_8: + evtype += "8"; + break; +case SDLK_9: + evtype += "9"; + break; +case SDLK_COLON: + evtype += "colon"; + break; +case SDLK_SEMICOLON: + evtype += "semicolon"; + break; +case SDLK_LESS: + evtype += "less"; + break; +case SDLK_EQUALS: + evtype += "equals"; + break; +case SDLK_GREATER: + evtype += "greater"; + break; +case SDLK_QUESTION: + evtype += "question"; + break; +case SDLK_AT: + evtype += "at"; + break; +case SDLK_LEFTBRACKET: + evtype += "leftbracket"; + break; +case SDLK_BACKSLASH: + evtype += "backslash"; + break; +case SDLK_RIGHTBRACKET: + evtype += "rightbracket"; + break; +case SDLK_CARET: + evtype += "caret"; + break; +case SDLK_UNDERSCORE: + evtype += "underscore"; + break; +case SDLK_BACKQUOTE: + evtype += "backquote"; + break; +case SDLK_a: + evtype += "a"; + break; +case SDLK_b: + evtype += "b"; + break; +case SDLK_c: + evtype += "c"; + break; +case SDLK_d: + evtype += "d"; + break; +case SDLK_e: + evtype += "e"; + break; +case SDLK_f: + evtype += "f"; + break; +case SDLK_g: + evtype += "g"; + break; +case SDLK_h: + evtype += "h"; + break; +case SDLK_i: + evtype += "i"; + break; +case SDLK_j: + evtype += "j"; + break; +case SDLK_k: + evtype += "k"; + break; +case SDLK_l: + evtype += "l"; + break; +case SDLK_m: + evtype += "m"; + break; +case SDLK_n: + evtype += "n"; + break; +case SDLK_o: + evtype += "o"; + break; +case SDLK_p: + evtype += "p"; + break; +case SDLK_q: + evtype += "q"; + break; +case SDLK_r: + evtype += "r"; + break; +case SDLK_s: + evtype += "s"; + break; +case SDLK_t: + evtype += "t"; + break; +case SDLK_u: + evtype += "u"; + break; +case SDLK_v: + evtype += "v"; + break; +case SDLK_w: + evtype += "w"; + break; +case SDLK_x: + evtype += "x"; + break; +case SDLK_y: + evtype += "y"; + break; +case SDLK_z: + evtype += "z"; + break; +case SDLK_DELETE: + evtype += "delete"; + break; +case SDLK_WORLD_0: + evtype += "world_0"; + break; +case SDLK_WORLD_1: + evtype += "world_1"; + break; +case SDLK_WORLD_2: + evtype += "world_2"; + break; +case SDLK_WORLD_3: + evtype += "world_3"; + break; +case SDLK_WORLD_4: + evtype += "world_4"; + break; +case SDLK_WORLD_5: + evtype += "world_5"; + break; +case SDLK_WORLD_6: + evtype += "world_6"; + break; +case SDLK_WORLD_7: + evtype += "world_7"; + break; +case SDLK_WORLD_8: + evtype += "world_8"; + break; +case SDLK_WORLD_9: + evtype += "world_9"; + break; +case SDLK_WORLD_10: + evtype += "world_10"; + break; +case SDLK_WORLD_11: + evtype += "world_11"; + break; +case SDLK_WORLD_12: + evtype += "world_12"; + break; +case SDLK_WORLD_13: + evtype += "world_13"; + break; +case SDLK_WORLD_14: + evtype += "world_14"; + break; +case SDLK_WORLD_15: + evtype += "world_15"; + break; +case SDLK_WORLD_16: + evtype += "world_16"; + break; +case SDLK_WORLD_17: + evtype += "world_17"; + break; +case SDLK_WORLD_18: + evtype += "world_18"; + break; +case SDLK_WORLD_19: + evtype += "world_19"; + break; +case SDLK_WORLD_20: + evtype += "world_20"; + break; +case SDLK_WORLD_21: + evtype += "world_21"; + break; +case SDLK_WORLD_22: + evtype += "world_22"; + break; +case SDLK_WORLD_23: + evtype += "world_23"; + break; +case SDLK_WORLD_24: + evtype += "world_24"; + break; +case SDLK_WORLD_25: + evtype += "world_25"; + break; +case SDLK_WORLD_26: + evtype += "world_26"; + break; +case SDLK_WORLD_27: + evtype += "world_27"; + break; +case SDLK_WORLD_28: + evtype += "world_28"; + break; +case SDLK_WORLD_29: + evtype += "world_29"; + break; +case SDLK_WORLD_30: + evtype += "world_30"; + break; +case SDLK_WORLD_31: + evtype += "world_31"; + break; +case SDLK_WORLD_32: + evtype += "world_32"; + break; +case SDLK_WORLD_33: + evtype += "world_33"; + break; +case SDLK_WORLD_34: + evtype += "world_34"; + break; +case SDLK_WORLD_35: + evtype += "world_35"; + break; +case SDLK_WORLD_36: + evtype += "world_36"; + break; +case SDLK_WORLD_37: + evtype += "world_37"; + break; +case SDLK_WORLD_38: + evtype += "world_38"; + break; +case SDLK_WORLD_39: + evtype += "world_39"; + break; +case SDLK_WORLD_40: + evtype += "world_40"; + break; +case SDLK_WORLD_41: + evtype += "world_41"; + break; +case SDLK_WORLD_42: + evtype += "world_42"; + break; +case SDLK_WORLD_43: + evtype += "world_43"; + break; +case SDLK_WORLD_44: + evtype += "world_44"; + break; +case SDLK_WORLD_45: + evtype += "world_45"; + break; +case SDLK_WORLD_46: + evtype += "world_46"; + break; +case SDLK_WORLD_47: + evtype += "world_47"; + break; +case SDLK_WORLD_48: + evtype += "world_48"; + break; +case SDLK_WORLD_49: + evtype += "world_49"; + break; +case SDLK_WORLD_50: + evtype += "world_50"; + break; +case SDLK_WORLD_51: + evtype += "world_51"; + break; +case SDLK_WORLD_52: + evtype += "world_52"; + break; +case SDLK_WORLD_53: + evtype += "world_53"; + break; +case SDLK_WORLD_54: + evtype += "world_54"; + break; +case SDLK_WORLD_55: + evtype += "world_55"; + break; +case SDLK_WORLD_56: + evtype += "world_56"; + break; +case SDLK_WORLD_57: + evtype += "world_57"; + break; +case SDLK_WORLD_58: + evtype += "world_58"; + break; +case SDLK_WORLD_59: + evtype += "world_59"; + break; +case SDLK_WORLD_60: + evtype += "world_60"; + break; +case SDLK_WORLD_61: + evtype += "world_61"; + break; +case SDLK_WORLD_62: + evtype += "world_62"; + break; +case SDLK_WORLD_63: + evtype += "world_63"; + break; +case SDLK_WORLD_64: + evtype += "world_64"; + break; +case SDLK_WORLD_65: + evtype += "world_65"; + break; +case SDLK_WORLD_66: + evtype += "world_66"; + break; +case SDLK_WORLD_67: + evtype += "world_67"; + break; +case SDLK_WORLD_68: + evtype += "world_68"; + break; +case SDLK_WORLD_69: + evtype += "world_69"; + break; +case SDLK_WORLD_70: + evtype += "world_70"; + break; +case SDLK_WORLD_71: + evtype += "world_71"; + break; +case SDLK_WORLD_72: + evtype += "world_72"; + break; +case SDLK_WORLD_73: + evtype += "world_73"; + break; +case SDLK_WORLD_74: + evtype += "world_74"; + break; +case SDLK_WORLD_75: + evtype += "world_75"; + break; +case SDLK_WORLD_76: + evtype += "world_76"; + break; +case SDLK_WORLD_77: + evtype += "world_77"; + break; +case SDLK_WORLD_78: + evtype += "world_78"; + break; +case SDLK_WORLD_79: + evtype += "world_79"; + break; +case SDLK_WORLD_80: + evtype += "world_80"; + break; +case SDLK_WORLD_81: + evtype += "world_81"; + break; +case SDLK_WORLD_82: + evtype += "world_82"; + break; +case SDLK_WORLD_83: + evtype += "world_83"; + break; +case SDLK_WORLD_84: + evtype += "world_84"; + break; +case SDLK_WORLD_85: + evtype += "world_85"; + break; +case SDLK_WORLD_86: + evtype += "world_86"; + break; +case SDLK_WORLD_87: + evtype += "world_87"; + break; +case SDLK_WORLD_88: + evtype += "world_88"; + break; +case SDLK_WORLD_89: + evtype += "world_89"; + break; +case SDLK_WORLD_90: + evtype += "world_90"; + break; +case SDLK_WORLD_91: + evtype += "world_91"; + break; +case SDLK_WORLD_92: + evtype += "world_92"; + break; +case SDLK_WORLD_93: + evtype += "world_93"; + break; +case SDLK_WORLD_94: + evtype += "world_94"; + break; +case SDLK_WORLD_95: + evtype += "world_95"; + break; +case SDLK_KP0: + evtype += "kp0"; + break; +case SDLK_KP1: + evtype += "kp1"; + break; +case SDLK_KP2: + evtype += "kp2"; + break; +case SDLK_KP3: + evtype += "kp3"; + break; +case SDLK_KP4: + evtype += "kp4"; + break; +case SDLK_KP5: + evtype += "kp5"; + break; +case SDLK_KP6: + evtype += "kp6"; + break; +case SDLK_KP7: + evtype += "kp7"; + break; +case SDLK_KP8: + evtype += "kp8"; + break; +case SDLK_KP9: + evtype += "kp9"; + break; +case SDLK_KP_PERIOD: + evtype += "kp_period"; + break; +case SDLK_KP_DIVIDE: + evtype += "kp_divide"; + break; +case SDLK_KP_MULTIPLY: + evtype += "kp_multiply"; + break; +case SDLK_KP_MINUS: + evtype += "kp_minus"; + break; +case SDLK_KP_PLUS: + ... [truncated message content] |
From: <vk...@us...> - 2009-02-09 17:06:44
|
Revision: 791 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=791&view=rev Author: vknecht Date: 2009-02-09 17:06:22 +0000 (Mon, 09 Feb 2009) Log Message: ----------- - Vincent fixed Host & Join buttons from ioServerSelect not being cleared when it's cleared. Modified Paths: -------------- trunk/ecksdee/data/menus/ioGameSelect.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/ioGameSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioGameSelect.py 2009-02-08 19:31:07 UTC (rev 790) +++ trunk/ecksdee/data/menus/ioGameSelect.py 2009-02-09 17:06:22 UTC (rev 791) @@ -60,10 +60,10 @@ self.menu = celMenu.celMenu(self.entity) self.menu.addElement('<<', 'Back_click', [42500, 42500], [6000, 6000], self.fconst * 0.7, 'back-bg') - self.hostbutton = self.menu.addElement('Host', 'Host_click', [44000, 187000], [16000, 8000], self.fconst, 'button-bg') - self.hostbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) - self.joinbutton = self.menu.addElement('Join', 'Join_click', [61000, 187000], [16000, 8000], self.fconst, 'button-bg') - self.joinbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) + hostbutton = self.menu.addElement('Host', 'Host_click', [44000, 187000], [16000, 8000], self.fconst, 'button-bg') + hostbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) + joinbutton = self.menu.addElement('Join', 'Join_click', [61000, 187000], [16000, 8000], self.fconst, 'button-bg') + joinbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) self.menu.addElement('Garage', 'Garage_click', [137000, 187000], [20000, 8000], self.fconst, 'button-bg') self.menu.addElement('Refresh', 'Refresh_click', [158000, 187000], [22000, 8000], self.fconst, 'button-bg') @@ -123,14 +123,16 @@ def r_noservers(self, pc, items): self.scroller.clear() self.scroller.additem('No Games on this lobby', '') - self.hostbutton.Behaviour.SendMessage('setactive', None, celGenericParameterBlock(0)) + hostbutton = Entities['Host'] + hostbutton.Behaviour.SendMessage('setactive', None, celGenericParameterBlock(0)) def r_addserver(self, pc, args): #Is this our first server? if len(self.scroller.items) is 1: self.scroller.clear() pars = celGenericParameterBlock(0) - self.hostbutton.Behaviour.SendMessage('setactive', None, pars) + hostbutton = Entities['Host'] + hostbutton.Behaviour.SendMessage('setactive', None, pars) serveraddr, data = self.net.getNetData(args) #Convert back into a tuple, as json converted it into a list serveraddr = (serveraddr[0], serveraddr[1]) @@ -183,12 +185,13 @@ self.labels.addElement('Notes: %s' % data[7], '', [0, 0], [0, 0], self.fconst, '') compatversion = data[8] versionname = data[9] + joinbutton = Entities['Join'] if compatversion == self.compatversion: compatibility = '(Compatibile)' - self.joinbutton.Behaviour.SendMessage('setactive', None, celGenericParameterBlock(0)) + joinbutton.Behaviour.SendMessage('setactive', None, celGenericParameterBlock(0)) else: compatibility = '(Incompatibile)' - self.joinbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) + joinbutton.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) self.labels.addElement('Version: %s %s' % (versionname, compatibility), '', [0, 0], [0, 0], self.fconst, '') self.labels.align([184000, 62000], [0, 8000]) @@ -207,8 +210,10 @@ self.servers = [] self.servernames = [] pars = celGenericParameterBlock(0) - self.hostbutton.Behaviour.SendMessage('setinactive', None, pars) - self.joinbutton.Behaviour.SendMessage('setinactive', None, pars) + hostbutton = Entities['Host'] + hostbutton.Behaviour.SendMessage('setinactive', None, pars) + joinbutton = Entities['Join'] + joinbutton.Behaviour.SendMessage('setinactive', None, pars) self.scroller.clear() self.scroller.additem('Getting list of game servers...', '') if self.lobbyserver: Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2009-02-08 19:31:07 UTC (rev 790) +++ trunk/ecksdee/doc/history.txt 2009-02-09 17:06:22 UTC (rev 791) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +09-Feb-2009 + - Vincent fixed Host & Join buttons from ioServerSelect not being + cleared when it's cleared. 08-Feb-2009 - Vincent fixed a typo/bug which prevented connection to lobby server in ioServerSelect.py. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2009-02-08 19:31:11
|
Revision: 790 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=790&view=rev Author: vknecht Date: 2009-02-08 19:31:07 +0000 (Sun, 08 Feb 2009) Log Message: ----------- - Vincent changed the master server address, works better since ipcheck.php now gives a correct result instead of 127.0.0.1. Modified Paths: -------------- trunk/ecksdee/AppEcksdee.cfg trunk/ecksdee/data/server/lobby/celstart.cfg trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/AppEcksdee.cfg =================================================================== --- trunk/ecksdee/AppEcksdee.cfg 2009-02-08 19:08:26 UTC (rev 789) +++ trunk/ecksdee/AppEcksdee.cfg 2009-02-08 19:31:07 UTC (rev 790) @@ -128,7 +128,8 @@ ;Ecksdee.MasterServer.IP = 127.0.0.1 ;Ecksdee.MasterServer.Port = 1826 -Ecksdee.MasterServer.Address = http://ecksdee.sourceforge.net/masterserver +;Ecksdee.MasterServer.Address = http://ecksdee.sourceforge.net/masterserver +Ecksdee.MasterServer.Address = http://ecksdee.kicks-ass.net/masterserver Ecksdee.Updates.Address = http://ecksdee.sourceforge.net/updates Ecksdee.Updater.Enabled = false Modified: trunk/ecksdee/data/server/lobby/celstart.cfg =================================================================== --- trunk/ecksdee/data/server/lobby/celstart.cfg 2009-02-08 19:08:26 UTC (rev 789) +++ trunk/ecksdee/data/server/lobby/celstart.cfg 2009-02-08 19:31:07 UTC (rev 790) @@ -38,7 +38,8 @@ ;Ecksdee.MasterServer.IP = 127.0.0.1 ;Ecksdee.MasterServer.Port = 1826 -Ecksdee.MasterServer.Address = http://ecksdee.sourceforge.net/masterserver/ +;Ecksdee.MasterServer.Address = http://ecksdee.sourceforge.net/masterserver/ +Ecksdee.MasterServer.Address = http://ecksdee.kicks-ass.net/masterserver/ Ecksdee.LobbyServer.Name = Unnamed XD Lobby ;Max number of clients allowed to enter the lobby Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2009-02-08 19:08:26 UTC (rev 789) +++ trunk/ecksdee/doc/history.txt 2009-02-08 19:31:07 UTC (rev 790) @@ -6,6 +6,8 @@ 08-Feb-2009 - Vincent fixed a typo/bug which prevented connection to lobby server in ioServerSelect.py. + - Vincent changed the master server address, works better since + ipcheck.php now gives a correct result instead of 127.0.0.1. 17-Dec-2008 - Vincent fixed the 'resetpos' logic to not be fooled by entities with empty names, so that F5 works with levels without checkpoints. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2009-02-08 19:08:34
|
Revision: 789 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=789&view=rev Author: vknecht Date: 2009-02-08 19:08:26 +0000 (Sun, 08 Feb 2009) Log Message: ----------- - Vincent fixed a typo/bug which prevented connection to lobby server in ioServerSelect.py. Modified Paths: -------------- trunk/ecksdee/BUGS trunk/ecksdee/data/menus/ioServerSelect.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/BUGS =================================================================== --- trunk/ecksdee/BUGS 2008-12-17 21:44:09 UTC (rev 788) +++ trunk/ecksdee/BUGS 2009-02-08 19:08:26 UTC (rev 789) @@ -23,4 +23,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +19-Dec-2008: + - In deathmatch mode, the counter is displayed. + - In deathmatch mode, when the player is respawned, the counter/timer starts. Modified: trunk/ecksdee/data/menus/ioServerSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioServerSelect.py 2008-12-17 21:44:09 UTC (rev 788) +++ trunk/ecksdee/data/menus/ioServerSelect.py 2009-02-08 19:08:26 UTC (rev 789) @@ -76,7 +76,6 @@ #We want to refresh on creation self.Refresh_click(None, celGenericParameterBlock(0)) - print 'ioServerSelect: end of __init__' def pccommandinput_exit1(self, pc, args): ioInit.exitgame() @@ -88,14 +87,10 @@ pass def pctimer_wakeup(self, pc, args): - print 'ioServerSelect: pctimer_wakeup' self.entity.Behaviour.SendMessage('Refresh_click', None, celGenericParameterBlock(0)) - print 'ioServerSelect: pctimer_wakeup end' - def ctimer_wakeupframe(self, pc, args): - print 'ioServerSelect: pctimer_wakeupframe' + def pctimer_wakeupframe(self, pc, args): ioDownloader.dispatch(self, self.dl) - print 'ioServerSelect: pctimer_wakeupframe end' def downloader_read(self, pars): pass Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-12-17 21:44:09 UTC (rev 788) +++ trunk/ecksdee/doc/history.txt 2009-02-08 19:08:26 UTC (rev 789) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +08-Feb-2009 + - Vincent fixed a typo/bug which prevented connection to lobby server + in ioServerSelect.py. 17-Dec-2008 - Vincent fixed the 'resetpos' logic to not be fooled by entities with empty names, so that F5 works with levels without checkpoints. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-12-17 22:55:23
|
Revision: 788 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=788&view=rev Author: vknecht Date: 2008-12-17 21:44:09 +0000 (Wed, 17 Dec 2008) Log Message: ----------- - Vincent fixed the 'resetpos' logic to not be fooled by entities with empty names, so that F5 works with levels without checkpoints. Modified Paths: -------------- trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-12-04 19:33:02 UTC (rev 787) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-12-17 21:44:09 UTC (rev 788) @@ -290,7 +290,7 @@ pcmech.GetBody().MakeDynamic() lastcp = Entities[str(self.pcprop.lastcheckpoint)] # @FIXME@ Manage sector change if needed - if lastcp != None: + if lastcp != None and lastcp.Name != '': pcmesh = celGetMesh(lastcp) pos = pcmesh.fullposition # @TODO@ Compute Y offset from ground hitbeam, not CP position Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-12-04 19:33:02 UTC (rev 787) +++ trunk/ecksdee/doc/history.txt 2008-12-17 21:44:09 UTC (rev 788) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +17-Dec-2008 + - Vincent fixed the 'resetpos' logic to not be fooled by entities + with empty names, so that F5 works with levels without checkpoints. 04-Dec-2008 - Vincent augmented ambient lighting in Track1 and Track4. - Vincent made the following changes: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-12-04 19:33:12
|
Revision: 787 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=787&view=rev Author: vknecht Date: 2008-12-04 19:33:02 +0000 (Thu, 04 Dec 2008) Log Message: ----------- - Vincent made the following changes: - Removed/commented non working stuff related to displaying server-side position of the vehicle. - Commented sound rate change on acceleration. It causes crashes. Modified Paths: -------------- trunk/ecksdee/data/scripts/ioNetworkEntBase.py trunk/ecksdee/data/vehicles/Ekiben/entities_world trunk/ecksdee/data/vehicles/F2/entities_world trunk/ecksdee/data/vehicles/Speeder/entities_world trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/data/vehicles/ioVehicleCl.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/scripts/ioNetworkEntBase.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-12-04 19:33:02 UTC (rev 787) @@ -8,7 +8,6 @@ def __init__(self, celEntity): self.entity = celEntity self.mesh = celMesh(self.entity) - self.servermesh = celGetMesh(self.entity, 'ServerSide') self.mech = celMechanicsObject(self.entity) self.body = self.mech.Body self.inputs = [] @@ -44,10 +43,6 @@ elif distance > 0.1: correction = diff * 2.0 self.body.SetLinearVelocity(lvel + correction) - if self.servermesh is not None: # @TODO@ add visibility check - pars = parblock({'position': pos}) - ret = celData() - self.servermesh.PerformAction(actid('MoveMesh'), pars, ret) #Get quaternion from server. Work out some stuff in order to add a torque to our body to correct it. #This function took half a year of tweaking to make it sorta work. @@ -65,10 +60,6 @@ #Work out the differences error = (srvquat - clquat).Norm() - if self.servermesh != None: - servertransf = csOrthoTransform(srvquat.GetMatrix(), \ - self.servermesh.position) - self.servermesh.Mesh.GetMovable().SetTransform(servertransf) #If it goes more than 90 degrees the client risks aligning back to front if error > 0.7: ctrans = csOrthoTransform(srvquat.GetMatrix(), csVector3(self.body.GetPosition())) Modified: trunk/ecksdee/data/vehicles/Ekiben/entities_world =================================================================== --- trunk/ecksdee/data/vehicles/Ekiben/entities_world 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/vehicles/Ekiben/entities_world 2008-12-04 19:33:02 UTC (rev 787) @@ -26,7 +26,7 @@ </action> --> </propclass> - <!-- This tagged pcobject.mesh is used to show server side vehicle coords --> + <!-- This tagged pcobject.mesh is used to show server side vehicle coords <propclass name="pcobject.mesh" tag="ServerSide"> <action name="LoadMesh"> <par name="filename" string="world" /> @@ -42,6 +42,7 @@ </action> <property name="hitbeam" bool="false" /> </propclass> + --> <propclass name="pcphysics.object"> <action name="SetSystem"> Modified: trunk/ecksdee/data/vehicles/F2/entities_world =================================================================== --- trunk/ecksdee/data/vehicles/F2/entities_world 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/vehicles/F2/entities_world 2008-12-04 19:33:02 UTC (rev 787) @@ -27,7 +27,7 @@ <!-- --> </propclass> - <!-- This tagged pcobject.mesh is used to show server side vehicle coords --> + <!-- This tagged pcobject.mesh is used to show server side vehicle coords <propclass name="pcobject.mesh" tag="ServerSide"> <action name="LoadMesh"> <par name="filename" string="world" /> @@ -43,6 +43,7 @@ </action> <property name="hitbeam" bool="false" /> </propclass> + --> <!-- Thruster meshes --> <propclass name="pcobject.mesh" tag="Thruster1"> Modified: trunk/ecksdee/data/vehicles/Speeder/entities_world =================================================================== --- trunk/ecksdee/data/vehicles/Speeder/entities_world 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/vehicles/Speeder/entities_world 2008-12-04 19:33:02 UTC (rev 787) @@ -89,7 +89,7 @@ <par name="rotation" vector="0,0,0" /> </action> </propclass> - <!-- This tagged pcmesh is used to show server side vehicle coords --> + <!-- This tagged pcmesh is used to show server side vehicle coords <propclass name="pcobject.mesh" tag="ServerSide"> <action name="LoadMesh"> <par name="filename" string="world" /> @@ -105,6 +105,7 @@ </action> <property name="hitbeam" bool="false" /> </propclass> + --> <!-- Thruster mesh --> <propclass name="pcobject.mesh" tag="Thruster1"> Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-12-04 19:33:02 UTC (rev 787) @@ -537,14 +537,15 @@ pass def pccommandinput_servermesh1(self, pc, args): - smesh = celGetMesh(self.entity, 'ServerSide') - if smesh is not None: - self.smeshvisible = not self.smeshvisible - if self.smeshvisible: - smesh.Show() - else: - smesh.Hide() - smesh.hitbeam = False # (vk) property reset when set visible ? + pass + #smesh = celGetMesh(self.entity, 'ServerSide') + #if smesh is not None: + # self.smeshvisible = not self.smeshvisible + # if self.smeshvisible: + # smesh.Show() + # else: + # smesh.Hide() + # smesh.hitbeam = False # (vk) property reset when set visible ? def pccommandinput_servermesh0(self, pc, args): pass Modified: trunk/ecksdee/data/vehicles/ioVehicleCl.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-12-04 19:33:02 UTC (rev 787) @@ -310,8 +310,9 @@ pitch_idle = int(100 - pitch_accel) if pitch_idle < 8: # 5 pitch_idle = 8 # 5 - self.snd_accel.SoundSource.GetStream().SetPlayRatePercent( \ - pitch_accel) + ### (vk) disable sound rate change, causes crash ? + ###self.snd_accel.SoundSource.GetStream().SetPlayRatePercent( \ + ###pitch_accel) if speed_ratio > self.clipping_volume: self.snd_accel.SoundSource.SetVolume(self.clipping_volume) self.snd_idle.SoundSource.SetVolume(0.0) Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-12-04 16:28:55 UTC (rev 786) +++ trunk/ecksdee/doc/history.txt 2008-12-04 19:33:02 UTC (rev 787) @@ -5,6 +5,10 @@ 04-Dec-2008 - Vincent augmented ambient lighting in Track1 and Track4. + - Vincent made the following changes: + - Removed/commented non working stuff related to displaying + server-side position of the vehicle. + - Commented sound rate change on acceleration. It causes crashes. 02-Dec-2008 - Vincent applied missing updates. Fixes crash when going in garage. 30-Nov-2008 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-12-04 16:29:03
|
Revision: 786 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=786&view=rev Author: vknecht Date: 2008-12-04 16:28:55 +0000 (Thu, 04 Dec 2008) Log Message: ----------- - Vincent augmented ambient lighting in Track1 and Track4. Modified Paths: -------------- trunk/ecksdee/data/levels/tracks/Track1/world trunk/ecksdee/data/levels/tracks/Track4/world trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/levels/tracks/Track1/world =================================================================== --- trunk/ecksdee/data/levels/tracks/Track1/world 2008-12-02 16:59:52 UTC (rev 785) +++ trunk/ecksdee/data/levels/tracks/Track1/world 2008-12-04 16:28:55 UTC (rev 786) @@ -138,7 +138,7 @@ <sector name="Scene"> - <ambient red="0.2" green="0.2" blue="0.2" /> + <ambient red="0.6" green="0.6" blue="0.6" /> <light name="sun"> <center x="-50000" y="86030" z="0" /> Modified: trunk/ecksdee/data/levels/tracks/Track4/world =================================================================== --- trunk/ecksdee/data/levels/tracks/Track4/world 2008-12-02 16:59:52 UTC (rev 785) +++ trunk/ecksdee/data/levels/tracks/Track4/world 2008-12-04 16:28:55 UTC (rev 786) @@ -129,7 +129,7 @@ <sector name="Scene"> - <ambient red="0.2" green="0.2" blue="0.2"/> + <ambient red="0.6" green="0.6" blue="0.6"/> <light name="sun"> <center x="-50000" y="86030" z="0" /> Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-12-02 16:59:52 UTC (rev 785) +++ trunk/ecksdee/doc/history.txt 2008-12-04 16:28:55 UTC (rev 786) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +04-Dec-2008 + - Vincent augmented ambient lighting in Track1 and Track4. 02-Dec-2008 - Vincent applied missing updates. Fixes crash when going in garage. 30-Nov-2008 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-12-02 17:00:30
|
Revision: 785 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=785&view=rev Author: vknecht Date: 2008-12-02 16:59:52 +0000 (Tue, 02 Dec 2008) Log Message: ----------- - Vincent applied missing updates. Fixes crash when going in garage. Modified Paths: -------------- trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-11-30 20:11:33 UTC (rev 784) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-12-02 16:59:52 UTC (rev 785) @@ -17,15 +17,15 @@ self.timer = celTimer(self.entity) self.timer.WakeUpFrame(2) self.frames = 0 + self.databin = Entities['ioDataBin'].Behaviour #Now we start loading, and delete the splash screen. it will clear when loading is finished def pctimer_wakeupframe(self, pc, args): self.frames += 1 if self.frames == 2: self.timer.Clear() - timer = celTimer(Entities['ioSplashScreen']) - timer.WakeUp(50, False) self.startLoading() + RemoveEntity(Entities['ioSplashScreen']) def startLoading(self): print 'making garage' @@ -352,14 +352,15 @@ for mount, weapon in self.weapons.items(): Config.SetStr('Ecksdee.Player.' + mount, weapon) Config.Save() + + returnname, returnbehaviour = self.databin.get('lastmenu') + #Recreate the entity which called the garage + CreateEntity(returnname, self.blpython, returnbehaviour) if self.selectedvehicle: RemoveEntity(self.selectedvehicle) - ioLoader.unloadGameWorld() - #Recreate the entity which called the garage - returnname, returnbehaviour = self.databin.get('lastmenu') - CreateEntity(returnname, self.blpython, returnbehaviour) - #RemoveEntity(Entities['ioGarage']) + ### (vk) this removal seems really needed, after all... + RemoveEntity(Entities['ioGarage']) def destruct(self, pc, args): self.buttons.clear() Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-11-30 20:11:33 UTC (rev 784) +++ trunk/ecksdee/doc/history.txt 2008-12-02 16:59:52 UTC (rev 785) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +02-Dec-2008 + - Vincent applied missing updates. Fixes crash when going in garage. 30-Nov-2008 - Vincent applied mods from IO up to r1173 (latest rev), except for a few art things (like sounds and shader fixes). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-11-30 20:11:49
|
Revision: 784 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=784&view=rev Author: vknecht Date: 2008-11-30 20:11:33 +0000 (Sun, 30 Nov 2008) Log Message: ----------- - Vincent applied mods from IO up to r1173 (latest rev), except for a few art things (like sounds and shader fixes). Modified Paths: -------------- trunk/ecksdee/data/menus/StartMenu.py trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/data/menus/ioJoinGame.py trunk/ecksdee/data/menus/ioOptionsScreen.py trunk/ecksdee/data/menus/ioServerSelect.py trunk/ecksdee/data/menus/ioVideoOptions.py trunk/ecksdee/data/scripts/ioInit.py trunk/ecksdee/data/scripts/ioLoader.py trunk/ecksdee/data/vehicles/F2/world trunk/ecksdee/data/vehicles/ioVehicleCl.py trunk/ecksdee/data/weapons/browning/ioBullet.py trunk/ecksdee/data/weapons/ffar/ioRocket.py trunk/ecksdee/data/weapons/ioWeapon.py trunk/ecksdee/data/weapons/minelayer/ioMine.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/StartMenu.py =================================================================== --- trunk/ecksdee/data/menus/StartMenu.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/StartMenu.py 2008-11-30 20:11:33 UTC (rev 784) @@ -109,4 +109,3 @@ def destruct(self, pc, args): self.menu.clear() - ###self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-11-30 20:11:33 UTC (rev 784) @@ -310,7 +310,7 @@ vehiclemesh.MoveMesh(sector, vehiclemesh.Mesh.GetMovable().GetPosition()) else: #print 'ioGarage: found Empty node for ship placement' - shipcenternode = SCF_QUERY_INTERFACE(shipcenter, iMapNode) + shipcenternode = shipcenter.QueryInterface(iMapNode) centerpos = shipcenternode.GetPosition() vehiclemesh.MoveMesh(sector, centerpos) yvec = shipcenternode.GetYVector() @@ -359,10 +359,9 @@ #Recreate the entity which called the garage returnname, returnbehaviour = self.databin.get('lastmenu') CreateEntity(returnname, self.blpython, returnbehaviour) - RemoveEntity(Entities['ioGarage']) + #RemoveEntity(Entities['ioGarage']) def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() self.buttons.clear() self.inputs.clear() self.vehiclescroller.destruct() Modified: trunk/ecksdee/data/menus/ioJoinGame.py =================================================================== --- trunk/ecksdee/data/menus/ioJoinGame.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/ioJoinGame.py 2008-11-30 20:11:33 UTC (rev 784) @@ -102,8 +102,6 @@ gamename, self.gameserver = self.databin.get('gameserver') self.net = Entities['ioNetHelper'].Behaviour - ### (vk) forgotten ? - ###netcl = Entities[ioDataBin.Get('socketent')] netcl = Entities[self.databin.get('socketent')] pars = parblock({'server' : cPickle.dumps(self.gameserver, 0)}) netcl.Behaviour.SendMessage('setserver', None, pars) Modified: trunk/ecksdee/data/menus/ioOptionsScreen.py =================================================================== --- trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-11-30 20:11:33 UTC (rev 784) @@ -89,7 +89,6 @@ def destruct(self, pc, args): self.scroller.destruct() self.menu.clear() - self.entity.PropertyClassList.RemoveAll() if self.currentscreen: RemoveEntity(self.currentscreen) Modified: trunk/ecksdee/data/menus/ioServerSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioServerSelect.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/ioServerSelect.py 2008-11-30 20:11:33 UTC (rev 784) @@ -181,13 +181,11 @@ self.databin.store('lobbyserver', (name, server)) print name, server gamesel = CreateEntity('ioGameSelect', self.blpython, 'ioGameSelect') - self.entity.PropertyClassList.RemoveAll() RemoveEntity(self.entity) def destruct(self, pc, args): self.scroller.destruct() self.menu.clear() - self.entity.PropertyClassList.RemoveAll() def Back_click(self, pc, args): CreateEntity('StartMenu', self.blpython, 'StartMenu') Modified: trunk/ecksdee/data/menus/ioVideoOptions.py =================================================================== --- trunk/ecksdee/data/menus/ioVideoOptions.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/menus/ioVideoOptions.py 2008-11-30 20:11:33 UTC (rev 784) @@ -173,15 +173,14 @@ def destruct(self, pc, args): self.menu.clear() if self.fsbutton: - self.fsbutton.PropertyClassList.RemoveAll() + #self.fsbutton.PropertyClassList.RemoveAll() RemoveEntity(self.fsbutton) else: print 'no self.fsbutton...' if self.dtbutton: - self.dtbutton.PropertyClassList.RemoveAll() + #self.dtbutton.PropertyClassList.RemoveAll() RemoveEntity(self.dtbutton) else: print 'no self.dtbutton...' self.resscroller.destruct() self.foliagescroller.destruct() - self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/scripts/ioInit.py =================================================================== --- trunk/ecksdee/data/scripts/ioInit.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/scripts/ioInit.py 2008-11-30 20:11:33 UTC (rev 784) @@ -69,9 +69,6 @@ self.timer.WakeUpFrame(2) self.frames = 0 - def pctimer_wakeup(self, pc, args): - print 'ioInit.py: timer' - #This is only started after a frame def maininit(self): Engine.PrecacheDraw() @@ -95,13 +92,6 @@ else: CreateEntity('StartMenu', self.blpython, 'StartMenu') - #Creates the splash screen while we precache, then deletes it - #def precache(self): - - #self.frames = 0 - #self.timer = celTimer(self.entity) - #self.timer.WakeUpFrame(2) - # This hack makes sure the splashscreen is drawn before we start precachedraw () def pctimer_wakeupframe(self, pc, args): self.frames += 1 @@ -109,6 +99,3 @@ self.frames = 0 self.timer.Clear() self.maininit() - - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/scripts/ioLoader.py =================================================================== --- trunk/ecksdee/data/scripts/ioLoader.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/scripts/ioLoader.py 2008-11-30 20:11:33 UTC (rev 784) @@ -73,7 +73,6 @@ gameworld = pl.FindEntity('ioGameWorld') if gameworld: #zonemgr = celZoneManager(gameworld) - gameworld.PropertyClassList.RemoveAll() RemoveEntity(gameworld) #This function scans a directory and loads all subfolders with world files Modified: trunk/ecksdee/data/vehicles/F2/world =================================================================== --- trunk/ecksdee/data/vehicles/F2/world 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/vehicles/F2/world 2008-11-30 20:11:33 UTC (rev 784) @@ -4,7 +4,13 @@ <plugin name="genmesh">crystalspace.mesh.loader.genmesh</plugin> <plugin name="genmeshfact">crystalspace.mesh.loader.factory.genmesh</plugin> </plugins> - <shaders/> + <shaders> + + <shader> <file>/shader/ambient.xml</file> </shader> + <shader> <file>/shader/std_lighting.xml</file> </shader> + <shader> <file>/shader/light_bumpmap.xml</file> </shader> + + </shaders> <textures> <texture name="f2ship.png"> <file>textures/f2ship.png</file> Modified: trunk/ecksdee/data/vehicles/ioVehicleCl.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-11-30 20:11:33 UTC (rev 784) @@ -68,8 +68,7 @@ for i in range(4): thruster = celGetMesh(self.entity, 'Thruster' + str(i)) if thruster is not None: - partsys = SCF_QUERY_INTERFACE(thruster.Mesh.GetMeshObject(), \ - iParticleSystemBase) + partsys = thruster.Mesh.GetMeshObject().QueryInterface(iParticleSystemBase) if partsys is not None: for idx in range(partsys.GetEmitterCount()): self.emitters[self.entity.Name].append(partsys.GetEmitter(idx)) @@ -77,8 +76,7 @@ matw = thruster.Mesh.GetMeshObject().GetFactory().\ GetMaterialWrapper() mat = matw.GetMaterial() - strings = CS_QUERY_REGISTRY_TAG_INTERFACE(oreg, \ - 'crystalspace.shared.stringset', iStringSet) + strings = oreg.Get('crystalspace.shared.stringset', iStringSet) self.shaderVars[self.entity.Name].append(mat.GetVariable(strings.Request( \ 'glow alpha'))) Modified: trunk/ecksdee/data/weapons/browning/ioBullet.py =================================================================== --- trunk/ecksdee/data/weapons/browning/ioBullet.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/weapons/browning/ioBullet.py 2008-11-30 20:11:33 UTC (rev 784) @@ -35,6 +35,3 @@ def pcdamage_hurt(self, pc, args): pass - - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/weapons/ffar/ioRocket.py =================================================================== --- trunk/ecksdee/data/weapons/ffar/ioRocket.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/weapons/ffar/ioRocket.py 2008-11-30 20:11:33 UTC (rev 784) @@ -68,10 +68,5 @@ def pcdamage_hurt(self, pc, args): pass - def destruct(self, pc, args): - ### (vk) causes crash in pcprojectile_hit - ###self.entity.PropertyClassList.RemoveAll() - pass - def setclient(self, pc, args): self.client = args[parid('client')] Modified: trunk/ecksdee/data/weapons/ioWeapon.py =================================================================== --- trunk/ecksdee/data/weapons/ioWeapon.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/weapons/ioWeapon.py 2008-11-30 20:11:33 UTC (rev 784) @@ -100,8 +100,8 @@ #Set our parent vehicle def setparent(self, pc, args): - self.parent = Entities[args[getid('cel.parameter.name')]] - self.player = int(args[getid('cel.parameter.player')]) + self.parent = Entities[args[parid('name')]] + self.player = int(args[parid('player')]) self.parentmesh = celMesh(self.parent) self.parentmech = celMechanicsObject(self.parent) if self.player: Modified: trunk/ecksdee/data/weapons/minelayer/ioMine.py =================================================================== --- trunk/ecksdee/data/weapons/minelayer/ioMine.py 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/data/weapons/minelayer/ioMine.py 2008-11-30 20:11:33 UTC (rev 784) @@ -67,8 +67,5 @@ def pcdynamicbody_collision(self, pc, args): pass - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() - def setclient(self, pc, args): self.client = args[parid('client')] Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-11-29 16:07:08 UTC (rev 783) +++ trunk/ecksdee/doc/history.txt 2008-11-30 20:11:33 UTC (rev 784) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +30-Nov-2008 + - Vincent applied mods from IO up to r1173 (latest rev), except for + a few art things (like sounds and shader fixes). 29-Nov-2008 - Vincent applied mods from IO r1159, r1162, r1164, r1165, r1166 and 1167. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-11-29 16:07:20
|
Revision: 783 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=783&view=rev Author: vknecht Date: 2008-11-29 16:07:08 +0000 (Sat, 29 Nov 2008) Log Message: ----------- - Vincent applied mods from IO r1159, r1162, r1164, r1165, r1166 and 1167. Modified Paths: -------------- trunk/ecksdee/data/client/ioClient.py trunk/ecksdee/data/client/ioEntityManagerClient.py trunk/ecksdee/data/client/ioNetClient.py trunk/ecksdee/data/client/ioNetGameClient.py trunk/ecksdee/data/effects/dusttrail.xml trunk/ecksdee/data/effects/exhaust.xml trunk/ecksdee/data/entities/ioMapBase.py trunk/ecksdee/data/gametypes/dm/ioDmStats.py trunk/ecksdee/data/gametypes/dm/ioGameDm.py trunk/ecksdee/data/gametypes/dm/ioGameDmCl.py trunk/ecksdee/data/gametypes/ioGameBase.py trunk/ecksdee/data/gametypes/ioGameBaseCl.py trunk/ecksdee/data/gametypes/ioStatsBase.py trunk/ecksdee/data/hud/ioHUD.py trunk/ecksdee/data/menus/StartMenu.py trunk/ecksdee/data/menus/ioAutoUpdater.py trunk/ecksdee/data/menus/ioGameMenu.py trunk/ecksdee/data/menus/ioGameSelect.py trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/data/menus/ioHostGame.py trunk/ecksdee/data/menus/ioJoinGame.py trunk/ecksdee/data/menus/ioLobbyChat.py trunk/ecksdee/data/menus/ioOptionsScreen.py trunk/ecksdee/data/menus/ioServerScreen.py trunk/ecksdee/data/menus/ioServerSelect.py trunk/ecksdee/data/scripts/ioDataBin.py trunk/ecksdee/data/scripts/ioDispatcher.py trunk/ecksdee/data/scripts/ioInit.py trunk/ecksdee/data/scripts/ioLoader.py trunk/ecksdee/data/scripts/ioNetHelper.py trunk/ecksdee/data/scripts/ioNetworkEnt.py trunk/ecksdee/data/scripts/ioNetworkEntBase.py trunk/ecksdee/data/scripts/ioNetworkEntCl.py trunk/ecksdee/data/server/game/ioEntityManager.py trunk/ecksdee/data/server/ioServerBase.py trunk/ecksdee/data/vehicles/ioVehicle.py trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/data/vehicles/ioVehicleCl.py trunk/ecksdee/data/weapons/ffar/ioFFAR.py trunk/ecksdee/data/weapons/ffar/rocketdirtfly.xml trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/client/ioClient.py =================================================================== --- trunk/ecksdee/data/client/ioClient.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/client/ioClient.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,9 +1,7 @@ from pycel import * -import ioDataBin import cPickle import ioLoader -import ioNetHelper #client loads the map, and runs its own physics world. class ioClient: @@ -15,7 +13,7 @@ self.idData = getid('cel.parameter.data') self.netclient = Entities['ioNetClient'] - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour self.playername = Config.GetStr('Ecksdee.Player.Name') #The password will actually be set properly through setpassword message @@ -70,10 +68,10 @@ #Get the servers sending info to us def serverInit(self): - self.lobbyname, self.lobbyserver = ioDataBin.Get('lobbyserver', True) - self.gamename, self.gameserver = ioDataBin.Get('gameserver', True) + databin = Entities['ioDataBin'] + self.lobbyname, self.lobbyserver = databin.Behaviour.get('lobbyserver') + self.gamename, self.gameserver = databin.Behaviour.get('gameserver') - #Make the connecting screen serverscr = CreateEntity('ioServerScreen', self.blpython, \ 'ioServerScreen') Modified: trunk/ecksdee/data/client/ioEntityManagerClient.py =================================================================== --- trunk/ecksdee/data/client/ioEntityManagerClient.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/client/ioEntityManagerClient.py 2008-11-29 16:07:08 UTC (rev 783) @@ -5,7 +5,6 @@ import ioNetworkEntCl import ioLoader -import ioNetHelper #an entity which keeps track of the positions of managed entities, #plus anything extra they need. this is the client version. @@ -15,9 +14,10 @@ def __init__(self, celEntity): self.entity = celEntity self.entities = [] - self.numbots = 0 + self.maxbots = 0 + self.bots = 0 - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour def authok(self, pc, args): pass @@ -84,11 +84,10 @@ pars = parblock({'player' : True}) vehicle.Behaviour.SendMessage('setplayer', None, pars) - #pars = celGenericParameterBlock(0) - #for mount in ['Front1', 'Front2', 'Roof1', 'Roof2', 'Side1', 'Side2', 'Rear1', 'Rear2']: - # weapon = Config.GetStr('Ecksdee.Player.' + mount, 'BRWNG') - # pars = parblock({'mount' : mount, 'weapon' : weapon}) - # vehicle.Behaviour.SendMessage('addweapon', None, pars) + #Add the weapons (depending on gametype) + ### (vk) we don't want that, weapons are gained during the race + ###pars = parblock({'vehicle': vehicle}) + ###gmtp.Behaviour.SendMessage('equipplayer', None, pars) #Finally Register it to the network pars = parblock({'registered' : True}) @@ -97,44 +96,44 @@ self.entities.append(vehicle.Name) def fillbots(self, pc, args): + if self.bots < self.maxbots: + celTimer(self.entity).WakeUp(5000, False, 'addbot') + + def pctimer_addbot(self, pc, args): vehicles = ioLoader.scanDir('vehicles') - for i in xrange(self.numbots): - #Pick a random vehicle, and extract its template - vehicleinfo = random.choice(vehicles) - vehicle = ioNetworkEntCl.makeEntity(vehicleinfo['Codename'], 'ioBot' + str(i)) - mesh = celMesh(vehicle) - mesh.MoveMesh(Engine.GetSectors().Get(0), mesh.Mesh.GetMovable().GetPosition()) + #Pick a random vehicle, and extract its template + #vehicleinfo = random.choice(vehicles) + vname = random.choice(['Speeder']) + vehicleinfo = filter(lambda v: v['codename'] == vname, vehicles)[0] + vehicle = ioNetworkEntCl.makeEntity(vehicleinfo['Codename'], 'Bot' + str(self.bots)) + mesh = celMesh(vehicle) + mesh.MoveMesh(Engine.GetSectors().Get(0), mesh.Mesh.GetMovable().GetPosition()) - if vehicle: - gmtp = Entities['ioGmTpCl'] - pars = parblock({'entity' : vehicle}) - gmtp.Behaviour.SendMessage('positionplayer', None, pars) + if vehicle: + gmtp = Entities['ioGmTpCl'] + pars = parblock({'entity' : vehicle}) + gmtp.Behaviour.SendMessage('positionplayer', None, pars) - #Equip random model for weapons - models = ioLoader.scanModels(vehicleinfo['Path']) - if len(models) > 0: - model = random.choice(models) - weapons = model['Weapons'] - for mount, weapon in weapons.items(): - pars = parblock({'mount' : mount, 'weapon' : weapon}) - vehicle.Behaviour.SendMessage('addweapon', None, pars) - - pars = parblock({'player' : False}) - vehicle.Behaviour.SendMessage('setplayer', None, pars) + #Add the weapons (depending on gametype) + pars = parblock({'vehicle': vehicle, 'path': vehicleinfo['Path']}) + gmtp.Behaviour.SendMessage('equipbot', None, pars) - print 'registering bot' - #Finally Register it to the network - pars = parblock({'registered' : True}) - vehicle.Behaviour.SendMessage('setregistered', None, pars) + pars = parblock({'player' : False}) + vehicle.Behaviour.SendMessage('setplayer', None, pars) - pars = parblock({'bot' : True}) - vehicle.Behaviour.SendMessage('setbot', None, pars) - - self.entities.append(vehicle.Name) - + print 'registering bot' + #Finally Register it to the network + pars = parblock({'registered' : True}) + vehicle.Behaviour.SendMessage('setregistered', None, pars) + + pars = parblock({'bot' : True}) + vehicle.Behaviour.SendMessage('setbot', None, pars) + + self.entities.append(vehicle.Name) + self.bots += 1 + self.entity.Behaviour.SendMessage('fillbots', pc, args) + def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() - for entname in self.entities: ent = Entities[entname] if ent: @@ -142,3 +141,6 @@ def makespectator(self, pc, args): pass + + def getEntities(self): + return self.entities Modified: trunk/ecksdee/data/client/ioNetClient.py =================================================================== --- trunk/ecksdee/data/client/ioNetClient.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/client/ioNetClient.py 2008-11-29 16:07:08 UTC (rev 783) @@ -7,7 +7,6 @@ import ioDispatcher import ioNetPacket import ioNetHelper -import ioDataBin #Is the transport entity to the server for clients. class ioNetClient: @@ -16,11 +15,12 @@ self.dispatcher = ioDispatcher.ioDispatcher() self.entity = celEntity self.blpython = BehaviourLayers['blpython'] + self.databin = Entities['ioDataBin'].Behaviour self.timer = celTimer(self.entity) self.timer.WakeUpFrame(0) self.timer.WakeUp(500, True) self.server = None - ioDataBin.Store('socketent', self.entity.Name) + self.databin.store('socketent', self.entity.Name) self.dispatcher.exceptions = ['gameinfo','discover','dldata','dldone'] #We test lag this way, by waiting for a timer event @@ -32,12 +32,7 @@ self.dispatcher.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1) #An entity requested to send something - def senddata(self, pc, args): - entity = args[parid('entity')] - message = args[parid('message')] - data = cPickle.loads(args[parid('data')]) - destination = cPickle.loads(args[parid('destination')]) - important = args[parid('important')] + def sendData(self, entity, message, data, destination, important): if destination is None: destination = self.server packet = ioNetPacket.ioNetPacket() Modified: trunk/ecksdee/data/client/ioNetGameClient.py =================================================================== --- trunk/ecksdee/data/client/ioNetGameClient.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/client/ioNetGameClient.py 2008-11-29 16:07:08 UTC (rev 783) @@ -2,10 +2,8 @@ import random import celMenu -import ioDataBin import ioLoader import ioNetworkEnt -import ioNetHelper import celScroller #Handles miscellaneous network/gameplay stuff like chat and loading the map @@ -15,6 +13,7 @@ def __init__(self, celEntity): self.entity = celEntity self.blpython = BehaviourLayers['blpython'] + self.databin = Entities['ioDataBin'].Behaviour self.playername = Config.GetStr('Ecksdee.Player.Name') self.playerinp = None self.fconst = celMenu.GetFontConstant() @@ -22,7 +21,7 @@ self.client = Entities['ioCl'] self.mapname = '' self.frames = 0 - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour ioLoader.unloadMenuWorld() @@ -136,8 +135,8 @@ self.timer.Clear() mapinfo = ioLoader.findSubfolderCfgString('levels/tracks', self.mapname) ioLoader.loadLibraryFolder('effects') - ioLoader.loadWorldFolder('weapons', True) ioLoader.loadWorldFolder('vehicles', True) + ioLoader.loadWorldFolder('weapons', True) ##ioLoader.loadWorldFolder('entities', True) ioLoader.loadLibraryFolder('models') ioLoader.loadLibraryFolder('entities/templates') @@ -161,7 +160,7 @@ self.net.sendData('ioEntMgr', 'fillents', [], None) - if not ioDataBin.Get('mpgame'): + if not self.databin.get('mpgame'): #Used for debugging damage system entmgr = Entities['ioEntMgrCl'] #entmgr.Behaviour.SendMessage('fillbots', None, args) @@ -212,7 +211,6 @@ RemoveEntity(self.entity) def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() self.menu.clear() self.buttons.clear() if self.logs: Modified: trunk/ecksdee/data/effects/dusttrail.xml =================================================================== --- trunk/ecksdee/data/effects/dusttrail.xml 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/effects/dusttrail.xml 2008-11-29 16:07:08 UTC (rev 783) @@ -11,7 +11,8 @@ <materials> <material name='dot.png'> <texture>dot.png</texture> - <shader type="standard">particle_basic2</shader> + <shader type="diffuse">particle_basic2</shader> + <shader type="ambient">*null</shader> </material> </materials> <meshfact name="dustTrail"> Modified: trunk/ecksdee/data/effects/exhaust.xml =================================================================== --- trunk/ecksdee/data/effects/exhaust.xml 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/effects/exhaust.xml 2008-11-29 16:07:08 UTC (rev 783) @@ -15,7 +15,8 @@ <material name='smoke-normed-dark.png'> <texture>smoke-normed.png</texture> <!-- <shader type="standard">particle_basic_dark</shader> --> - <shader type="standard">particle_basic2</shader> + <shader type="diffuse">particle_basic2</shader> + <shader type="ambient">*null</shader> </material> </materials> <meshfact name="exhaustSmoke"> Modified: trunk/ecksdee/data/entities/ioMapBase.py =================================================================== --- trunk/ecksdee/data/entities/ioMapBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/entities/ioMapBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -23,6 +23,3 @@ def pcdamage_hurt(self, pc, args): pass - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() - Modified: trunk/ecksdee/data/gametypes/dm/ioDmStats.py =================================================================== --- trunk/ecksdee/data/gametypes/dm/ioDmStats.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/dm/ioDmStats.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,11 +1,9 @@ from pycel import * -import cPickle from ioStatsBase import * import ioLoader import celMenu import celScroller -import ioDataBin #DM gameover screen class ioDmStats (ioStatsBase): Modified: trunk/ecksdee/data/gametypes/dm/ioGameDm.py =================================================================== --- trunk/ecksdee/data/gametypes/dm/ioGameDm.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/dm/ioGameDm.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,6 +1,5 @@ from pycel import * from ioGameBase import * -import ioNetHelper class ioGameDm (ioGameBase): api_version = 2 Modified: trunk/ecksdee/data/gametypes/dm/ioGameDmCl.py =================================================================== --- trunk/ecksdee/data/gametypes/dm/ioGameDmCl.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/dm/ioGameDmCl.py 2008-11-29 16:07:08 UTC (rev 783) @@ -55,6 +55,8 @@ self.killmessage('Killed by', killedby) self.players[killedby][0] = score self.pdisps[killedby].text = '%s %d' % (killedby, score) + if killedby == 'map' or killedby == '0': + killedby = 'himself' pars = parblock({'message' : '%s was killed by %s' % (killed, killedby)}) self.netgamecl.Behaviour.SendMessage('logevent', None, pars) self.sortDisps() Modified: trunk/ecksdee/data/gametypes/ioGameBase.py =================================================================== --- trunk/ecksdee/data/gametypes/ioGameBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/ioGameBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,6 +1,5 @@ from pycel import * import cPickle -import ioNetHelper class ioGameBase: api_version = 2 @@ -20,7 +19,7 @@ self.ticks = Clock.GetCurrentTicks() self.spawnwatches = {} - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour #Run through all watched dead players, and see if they are able to respawn def pctimer_wakeup(self, pc, args): Modified: trunk/ecksdee/data/gametypes/ioGameBaseCl.py =================================================================== --- trunk/ecksdee/data/gametypes/ioGameBaseCl.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/ioGameBaseCl.py 2008-11-29 16:07:08 UTC (rev 783) @@ -3,7 +3,7 @@ import cPickle import celMenu -import ioNetHelper +import ioLoader class ioGameBaseCl: api_version = 2 @@ -19,7 +19,7 @@ #We don't want to show until asked self.visible = False - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour self.net.sendData('ioGmTp', 'getplayers', []) @@ -154,3 +154,28 @@ #Destroy the killed message def pctimer_wakeup(self, pc, args): self.kmessage.Billboard.MoveToPosition(1000, -200000, 80000) + + #Most gametypes will have the vehicle mounted with weapons + #If you want to make a gametype without weapons, just override this with pass + #This one equips weapons as saved in config + def equipplayer(self, pc, args): + player = args[parid('vehicle')] + for mount in ['Front1', 'Front2', 'Roof1', 'Roof2', 'Side1', 'Side2', 'Rear1', 'Rear2']: + weapon = Config.GetStr('Ecksdee.Player.' + mount, 'BRWNG') + pars = parblock({'mount' : mount, 'weapon' : weapon}) + player.Behaviour.SendMessage('addweapon', None, pars) + + #Equip weapons for the bots. + #Takes random weapons and adds them. + def equipbot(self, pc, args): + vehicle = args[parid('vehicle')] + path = args[parid('path')] + #Equip random model for weapons + models = ioLoader.scanModels(path) + if len(models) > 0: + model = random.choice(models) + weapons = model['Weapons'] + for mount, weapon in weapons.items(): + pars = parblock({'mount' : mount, 'weapon' : weapon}) + vehicle.Behaviour.SendMessage('addweapon', None, pars) + Modified: trunk/ecksdee/data/gametypes/ioStatsBase.py =================================================================== --- trunk/ecksdee/data/gametypes/ioStatsBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/gametypes/ioStatsBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,7 +4,6 @@ import ioLoader import celMenu import celScroller -import ioDataBin #The base stats screen which is shown when a game is finished class ioStatsBase: @@ -16,6 +15,7 @@ self.blpython = BehaviourLayers['blpython'] self.fconst = celMenu.GetFontConstant() self.fcolor = celMenu.GetFontColor() + self.databin = Entities['iodataBin'].Behaviour frame = celAddBillboard(self.entity).Billboard frame.SetMaterialName('window-frame') @@ -35,7 +35,7 @@ self.buttons = celMenu.celMenu(self.entity) #self.buttons.addElement('<<', 'Back_click', [42500, 42500], [6000, 6000], self.fconst * 0.7, 'back-bg') - mpgame = ioDataBin.Get('mpgame') + mpgame = self.dataBin.get('mpgame') if mpgame: txt = 'Return to Lobby' msg = 'Lobby_Click' @@ -47,7 +47,7 @@ def leave(self): netgameclient = Entities['ioNetMgrCl'] if netgameclient: - netgameclient.Behaviour.SendMessage('leavegame', None, args) + netgameclient.Behaviour.SendMessage('leavegame', None, celGenericParameterBlock(0)) RemoveEntity(self.entity) def Lobby_Click(self, pc, args): @@ -68,6 +68,6 @@ def Back_click(self, pc, args): netgame = Entities['ioNetMgrCl'] netgame.Behaviour.SendMessage('leavegame', None, celGenericParameterBlock(0)) - name, behaviour = ioDataBin.Get('lastmenu', True) + name, behaviour = self.dataBin.get('lastmenu', True) gamesel = CreateEntity(name, self.blpython, behaviour) RemoveEntity(self.entity) Modified: trunk/ecksdee/data/hud/ioHUD.py =================================================================== --- trunk/ecksdee/data/hud/ioHUD.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/hud/ioHUD.py 2008-11-29 16:07:08 UTC (rev 783) @@ -245,9 +245,6 @@ for i in group: self.hardpoints[i - 1].materialnamefast = 'selection' - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() - #Hide or show the hud def setvisible(self, pc, args): self.visible = args[parid('visible')] Modified: trunk/ecksdee/data/menus/StartMenu.py =================================================================== --- trunk/ecksdee/data/menus/StartMenu.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/StartMenu.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,7 +4,6 @@ import celMenu import ioInit import ioLoader -import ioDataBin class StartMenu: #The main menu @@ -13,6 +12,7 @@ print 'StartMenu: __init__()' self.entity = celEntity self.blpython = BehaviourLayers['blpython'] + self.databin = Entities['ioDataBin'].Behaviour ioLoader.loadMenuWorld() @@ -38,7 +38,7 @@ #Don't let them play multi melee if they haven't updated # (vk) ... unless the updater is disabled... if Config.GetBool('Ecksdee.Updater.Enabled', False): - if ioDataBin.Get('updateskipped'): + if self.databin.get('updateskipped'): mmat = '' else: mmat = 'unselection' @@ -69,9 +69,7 @@ self.soundsource.PerformAction(actid('Unpause'), pars, ignored) def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass @@ -81,23 +79,23 @@ def Host_click(self, pc, args): #Set the properties on the databin so the hostgame screen knows - ioDataBin.Store('lastmenu', (self.entity.Name, \ - self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, \ + self.entity.Behaviour.Name)) #Set the properties on the databin so the hostgame screen knows - ioDataBin.Store('mpgame', False) + self.databin.store('mpgame', False) hg = CreateEntity('ioHostGame', self.blpython, 'ioHostGame') RemoveEntity(self.entity) def Join_click(self, pc, args): #Set the properties on the databin so the hostgame screen knows - ioDataBin.Store('mpgame', True) + self.databin.store('mpgame', True) hg = CreateEntity('ioServerSelect', self.blpython, 'ioServerSelect') RemoveEntity(self.entity) def Garage_click(self, pc, args): #Now the garage knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, \ - self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, \ + self.entity.Behaviour.Name)) garage = CreateEntity('ioGarage', self.blpython, 'ioGarage') RemoveEntity(self.entity) Modified: trunk/ecksdee/data/menus/ioAutoUpdater.py =================================================================== --- trunk/ecksdee/data/menus/ioAutoUpdater.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioAutoUpdater.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,7 +4,6 @@ import sys import ioInit -import ioDataBin import ioLoader import ioBaseInit import celMenu @@ -96,7 +95,7 @@ def downloader_error(self, pars): error = pars[0] - self.completeupdate('Error getting %s, %s' % (self.dl.url, error), 4000) + self.completeupdate('Error getting %s, %s' % (self.dl.url, error), 2000) def downloader_complete(self, pars): if self.state == 'gettingversions': @@ -123,7 +122,7 @@ self.menu.addElement('Skip', 'Abort_clicked', (115000, 235000), (18000, 9000), self.fconst, 'button-bg') self.menu.addElement('Update', 'Update_clicked', (155000, 235000), (18000, 9000), self.fconst, 'button-bg') else: - self.completeupdate('No updates available', 2000) + self.completeupdate('No updates available', 1000) #Show the popup window thingy with info def makedescwindow(self): @@ -257,7 +256,7 @@ self.desc.scrollup() def destruct(self, pc, args): - ioDataBin.Store('updateskipped', self.updateskipped) + Entities['ioDataBin'].Behaviour.store('updateskipped', self.updateskipped) self.killdescwindow() self.menu.clear() ioinit = Entities['ent_gamemanager'] #['ioInit'] Modified: trunk/ecksdee/data/menus/ioGameMenu.py =================================================================== --- trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-29 16:07:08 UTC (rev 783) @@ -2,9 +2,8 @@ import celMenu import os +import ioInit import ioLoader -import ioDataBin -import ioNetHelper #The menu that is opened when the user presses esc ingame class ioGameMenu: @@ -15,7 +14,8 @@ self.blpython = BehaviourLayers['blpython'] self.fconst = celMenu.GetFontConstant() self.fcolor = celMenu.GetFontColor() - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour + self.databin = Entities['ioDataBin'].Behaviour self.bg = celCreateBillboard(pl, self.entity).Billboard self.bg.SetMaterialName('half-black') @@ -32,7 +32,7 @@ def makeButtons(self): self.menu = celMenu.celMenu(self.entity) self.menu.addElement('Return to Game', 'Back_click', [0, 0], [60000,10000], self.fconst, 'button-bg') - if ioDataBin.Get('mpgame'): + if self.databin.get('mpgame'): self.menu.addElement('Return to Lobby', 'Lobby_click', [0, 0], [60000,10000], self.fconst, 'button-bg') self.menu.addElement('Exit to Menu', 'Menu_click', [0, 0], [60000,10000], self.fconst, 'button-bg') self.menu.addElement('Exit Ecksdee', 'Exit_click', [0, 0], [60000,10000], self.fconst, 'button-bg') @@ -65,7 +65,6 @@ pass def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() self.menu.clear() #Polls for a running game server. if found, asks user if they want to quit. @@ -80,7 +79,7 @@ def pctimer_poll_wait(self, pc, args): self.timer.Clear() if self.serverfound: - if ioDataBin.Get('mpgame'): + if self.databin.get('mpgame'): self.menu.clear() label1 = 'You are currently hosting a game' label2 = 'Would you like to stop it?' @@ -113,9 +112,7 @@ def quitgame(self): netgame = Entities['ioNetMgrCl'] netgame.Behaviour.SendMessage('leavegame', None,celGenericParameterBlock(0)) - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pctimer_quit(self, pc, args): self.afterpoll() Modified: trunk/ecksdee/data/menus/ioGameSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioGameSelect.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioGameSelect.py 2008-11-29 16:07:08 UTC (rev 783) @@ -2,9 +2,8 @@ import cPickle import celMenu +import ioInit import celScroller -import ioDataBin -import ioNetHelper import ioLoader class ioGameSelect: @@ -17,6 +16,7 @@ self.fcolor = celMenu.GetFontColor() self.playername = Config.GetStr('Ecksdee.Player.Name') self.chatent = 'ioGameChat' + self.databin = Entities['ioDataBin'].Behaviour #Used for compatibility testing self.compatversion = Config.GetStr('Ecksdee.Version.Compat') @@ -75,13 +75,13 @@ pcinput = celCommandInput(self.entity) pcinput.Bind('esc', 'exit') - lobbyname, self.lobbyserver = ioDataBin.Get('lobbyserver', True) + lobbyname, self.lobbyserver = self.databin.get('lobbyserver') self.servers = [] self.servernames = [] - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour - netcl = Entities[ioDataBin.Get('socketent')] + netcl = Entities[self.databin.get('socketent')] pars = parblock({'server' : cPickle.dumps(self.lobbyserver, 0)}) netcl.Behaviour.SendMessage('setserver', None, pars) @@ -100,9 +100,7 @@ self.chatcl = CreateEntity('ioLobbyChat', self.blpython, 'ioLobbyChat') def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass @@ -230,19 +228,19 @@ def Garage_click(self, pc, args): #Now the garage knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name)) garage = CreateEntity('ioGarage', self.blpython, 'ioGarage') RemoveEntity(self.entity) def Host_click(self, pc, args): #Now the hostgame knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name)) hg = CreateEntity('ioHostGame', self.blpython, 'ioHostGame') RemoveEntity(self.entity) def Join_click(self, pc, args): server = self.servers[self.scroller.selectedindex] name = self.servernames[self.scroller.selectedindex] - ioDataBin.Store('gameserver', (name, server), True) + self.databin.store('gameserver', (name, server)) jg = CreateEntity('ioJoinGame', self.blpython, 'ioJoinGame') RemoveEntity(self.entity) Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,7 +4,6 @@ import ioLoader import ioNetworkEntCl import celScroller -import ioDataBin import os class ioGarage: @@ -358,7 +357,7 @@ ioLoader.unloadGameWorld() #Recreate the entity which called the garage - returnname, returnbehaviour = ioDataBin.Get('lastmenu', True) + returnname, returnbehaviour = self.databin.get('lastmenu') CreateEntity(returnname, self.blpython, returnbehaviour) RemoveEntity(Entities['ioGarage']) Modified: trunk/ecksdee/data/menus/ioHostGame.py =================================================================== --- trunk/ecksdee/data/menus/ioHostGame.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioHostGame.py 2008-11-29 16:07:08 UTC (rev 783) @@ -3,8 +3,8 @@ import os import subprocess +import ioInit import ioBaseInit -import ioDataBin import ioLoader import celMenu #import celScroller @@ -22,6 +22,7 @@ self.mapinfo = ioLoader.scanDir('levels/tracks') self.gameinfo = ioLoader.scanDir('gametypes') + self.databin = Entities['ioDataBin'].Behaviour ##bg = celAddBillboard(self.entity).Billboard ##bg.SetMaterialName('hostjoin-bg') ##bg.SetPosition(0,0) @@ -120,20 +121,18 @@ pcinput.Bind('esc', 'exit') #Check if we are going single-player or multiplayer - self.mp = ioDataBin.Get('mpgame') + self.mp = self.databin.get('mpgame') if not self.mp: self.lobbyserver = (None, None) self.lobbyname = None - ioDataBin.Store('lobbyserver', (self.lobbyname, self.lobbyserver), True) + self.databin.store('lobbyserver', (self.lobbyname, self.lobbyserver)) else: - self.lobbyname, self.lobbyserver = ioDataBin.Get('lobbyserver', True) + self.lobbyname, self.lobbyserver = self.databin.get('lobbyserver') ioLoader.loadMenuWorld() def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass @@ -197,9 +196,9 @@ #else: #Jump straight into the game data = (name, ('127.0.0.1', 1828)) - ioDataBin.Store('gameserver', data, True) + self.databin.store('gameserver', data) #Now the server screen knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name)) #check we don't have an old client still hanging around, first client = pl.FindEntity('ioCl') if client: Modified: trunk/ecksdee/data/menus/ioJoinGame.py =================================================================== --- trunk/ecksdee/data/menus/ioJoinGame.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioJoinGame.py 2008-11-29 16:07:08 UTC (rev 783) @@ -2,10 +2,10 @@ import cPickle import os +import ioInit import ioLoader import celMenu import celScroller -import ioDataBin import ioNetHelper #The screen which lets you choose if you want to join a game before actually doing it. @@ -20,6 +20,7 @@ self.lobbyserver = None self.gameserver = [None, None] self.gamedata = None + self.databin = Entities['ioDataBin'].Behaviour ##bg = celAddBillboard(self.entity).Billboard ##bg.SetMaterialName('hostjoin-bg') @@ -97,11 +98,13 @@ pcinput = celCommandInput(self.entity) pcinput.Bind('esc', 'exit') - lobbyname, self.lobbyserver = ioDataBin.Get('lobbyserver', True) - gamename, self.gameserver = ioDataBin.Get('gameserver', True) + lobbyname, self.lobbyserver = self.databin.get('lobbyserver') + gamename, self.gameserver = self.databin.get('gameserver') - self.net = ioNetHelper.ioNetHelper() - netcl = Entities[ioDataBin.Get('socketent')] + self.net = Entities['ioNetHelper'].Behaviour + ### (vk) forgotten ? + ###netcl = Entities[ioDataBin.Get('socketent')] + netcl = Entities[self.databin.get('socketent')] pars = parblock({'server' : cPickle.dumps(self.gameserver, 0)}) netcl.Behaviour.SendMessage('setserver', None, pars) @@ -110,9 +113,7 @@ ioLoader.loadMenuWorld() def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass @@ -149,14 +150,14 @@ def Garage_click(self, pc, args): #Now the garage knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name)) garage = CreateEntity('ioGarage', self.blpython, 'ioGarage') RemoveEntity(self.entity) #Join the game! def Launch_click(self, pc, args): #Now the server screen knows where to return to if we click here - ioDataBin.Store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name), True) + self.databin.store('lastmenu', (self.entity.Name, self.entity.Behaviour.Name)) client = CreateEntity('ioCl', self.blpython, 'ioClient') self.inputs.deactivateAll() name = celBillboard(self.nameinp).text Modified: trunk/ecksdee/data/menus/ioLobbyChat.py =================================================================== --- trunk/ecksdee/data/menus/ioLobbyChat.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioLobbyChat.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,8 +1,6 @@ from pycel import * import cPickle -import ioNetHelper -import ioDataBin import celScroller import celMenu @@ -12,8 +10,9 @@ def __init__(self, celEntity): self.entity = celEntity - self.net = ioNetHelper.ioNetHelper() - lobbyname, self.lobbyserver = ioDataBin.Get('lobbyserver', True) + self.net = Entities['ioNetHelper'].Behaviour + self.databin = Entities['ioDataBin'].Behaviour + lobbyname, self.lobbyserver = self.databin.get('lobbyserver') #The list of messages on the left self.msgscroller = celScroller.celScroller(self.entity, (43000, 196000), (163900, 57500), '_msg') #The list of clients on the right Modified: trunk/ecksdee/data/menus/ioOptionsScreen.py =================================================================== --- trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,8 +4,8 @@ import socket import celMenu +import ioInit import celScroller -import ioDataBin #The options screen which containers video options + others (later, anyway) class ioOptionsScreen: @@ -73,9 +73,7 @@ self.currentscreen = CreateEntity('ioVideoOptions', self.blpython, 'ioVideoOptions') def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass Modified: trunk/ecksdee/data/menus/ioServerScreen.py =================================================================== --- trunk/ecksdee/data/menus/ioServerScreen.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioServerScreen.py 2008-11-29 16:07:08 UTC (rev 783) @@ -4,7 +4,6 @@ import ioLoader import celMenu #import celScroller -import ioDataBin class ioServerScreen: api_version = 2 @@ -68,7 +67,7 @@ def Back_click(self, pc, args): netgame = Entities['ioNetMgrCl'] netgame.Behaviour.SendMessage('leavegame', None, celGenericParameterBlock(0)) - name, behaviour = ioDataBin.Get('lastmenu', True) + name, behaviour = self.databin.get('lastmenu') gamesel = CreateEntity(name, self.blpython, behaviour) RemoveEntity(self.entity) Modified: trunk/ecksdee/data/menus/ioServerSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioServerSelect.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/menus/ioServerSelect.py 2008-11-29 16:07:08 UTC (rev 783) @@ -3,11 +3,11 @@ import urllib2 import socket -import ioNetHelper +import ioInit import ioDownloader import celMenu import celScroller -import ioDataBin +import ioNetHelper class ioServerSelect: api_version = 2 @@ -19,8 +19,9 @@ self.blpython = BehaviourLayers['blpython'] self.fconst = celMenu.GetFontConstant() self.fcolor = celMenu.GetFontColor() + self.databin = Entities['ioDataBin'].Behaviour - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour ##bg = celAddBillboard(self.entity).Billboard ##bg.SetMaterialName('server-bg') @@ -78,9 +79,7 @@ print 'ioServerSelect: end of __init__' def pccommandinput_exit1(self, pc, args): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() def pccommandinput_exit_(self, pc, args): pass @@ -179,7 +178,7 @@ name = self.servernames[self.scroller.selectedindex] #Write out the selected settings - ioDataBin.Store('lobbyserver', (name, server), True) + self.databin.store('lobbyserver', (name, server)) print name, server gamesel = CreateEntity('ioGameSelect', self.blpython, 'ioGameSelect') self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/scripts/ioDataBin.py =================================================================== --- trunk/ecksdee/data/scripts/ioDataBin.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioDataBin.py 2008-11-29 16:07:08 UTC (rev 783) @@ -3,37 +3,17 @@ #This behaviour holds to store data between entities. It is used especially by the menus. # It optionally stores its values pickled. It is only to be used with the helper functions -def Store (key, data, pickle = False): - databin = pl.FindEntity('ioDataBin') - if not databin: - databin = CreateEntity('ioDataBin', BehaviourLayers['blpython'], 'ioDataBin') - if pickle: - data = cPickle.dumps(data, 0) - pars = parblock({'key' : key, 'value' : data}) - databin.Behaviour.SendMessage('setdata', None, pars) - -def Get(key, unpickle = False): - databin = pl.FindEntity('ioDataBin') - - if not databin: - databin = CreateEntity('ioDataBin', BehaviourLayers['blpython'], 'ioDataBin') - pars = parblock({'key' : key}) - data = databin.Behaviour.SendMessage('getdata', None, pars) - if unpickle: - data = cPickle.loads(data) - return data - class ioDataBin: api_version = 2 def __init__(self, celEntity): self.entity = celEntity self.data = {} - def getdata(self, pc, args): - key = args[parid('key')] - return self.data[key] - - def setdata(self, pc, args): - key = args[parid('key')] - value = args[parid('value')] + def get(self, key): + if self.data.has_key(key): + return self.data[key] + else: + return None + + def store(self, key, value): self.data[key] = value Modified: trunk/ecksdee/data/scripts/ioDispatcher.py =================================================================== --- trunk/ecksdee/data/scripts/ioDispatcher.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioDispatcher.py 2008-11-29 16:07:08 UTC (rev 783) @@ -37,8 +37,6 @@ if packet.ip in self.clients or packet.message in self.exceptions: reciever = pl.FindEntity(packet.entity) if reciever is not None: - if 'tgt' in packet.message: - print packet.message, packet.data reciever.Behaviour.SendMessage('r_%s' % packet.message, None, packet.toPars()) else: #print 'no entity', packet.entity Modified: trunk/ecksdee/data/scripts/ioInit.py =================================================================== --- trunk/ecksdee/data/scripts/ioInit.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioInit.py 2008-11-29 16:07:08 UTC (rev 783) @@ -3,14 +3,13 @@ import os import socket -import ioDataBin #Any celstart app importing ioInit will now quit on control + C def exitapp(signal, frame): exitgame() def exitgame(): - q = CS_QUERY_REGISTRY (oreg, iEventQueue) + q = oreg.Get(iEventQueue) if q: q.GetEventOutlet().Broadcast (csevQuit (oreg)) @@ -49,9 +48,15 @@ # Initialize app entity registerclasses() + #Our data bin + self.databin = CreateEntity('ioDataBin', self.blpython, 'ioDataBin').Behaviour + #Make the net client which contains our socket CreateEntity('ioNetClient', self.blpython, 'ioNetClient') + #The interface to the net client + CreateEntity('ioNetHelper', self.blpython, 'ioNetHelper') + #Stop the app from hanging too long if the network is down socket.setdefaulttimeout(10) @@ -75,7 +80,7 @@ if Config.GetBool('Ecksdee.Updater.Enabled', False): CreateEntity('ioAutoUpdater', self.blpython, 'ioAutoUpdater') else: - ioDataBin.Store('updateskipped', True) + self.databin.store('updateskipped', True) #CreateEntity('StartMenu', self.blpython, 'StartMenu') self.updatecomplete(None, None) @@ -85,7 +90,7 @@ #If we haven't visited the garage before, do it now. visitedgarage = Config.GetBool('Ecksdee.Garage.Visited', False) if not visitedgarage: - ioDataBin.Store('lastmenu', ('StartMenu', 'StartMenu'), True) + self.databin.store('lastmenu', ('StartMenu', 'StartMenu')) CreateEntity('ioGarage', self.blpython, 'ioGarage') else: CreateEntity('StartMenu', self.blpython, 'StartMenu') Modified: trunk/ecksdee/data/scripts/ioLoader.py =================================================================== --- trunk/ecksdee/data/scripts/ioLoader.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioLoader.py 2008-11-29 16:07:08 UTC (rev 783) @@ -14,7 +14,7 @@ mechsysent = CreateEntity('ent_physics', blpython, None) mechsys = celCreateMechanicsSystem(physicallayer_ptr, mechsysent, 'ent_physics') ###dyn = mechsys.DynamicSystem - ###osys = SCF_QUERY_INTERFACE (dyn, iODEDynamicSystemState) + ###osys = dyn.QueryInterface(iODEDynamicSystemState) ###osys.SetContactMaxCorrectingVel(0.5) mechsys.EnableQuickStep () mechsys.SetStepTime (0.015) # 0.003 @@ -23,8 +23,6 @@ #Recreate the gameworld if it already exists. Easiest way to unload a map. gameworld = Entities['ioGameWorld'] if gameworld: - zonemgr = celZoneManager(gameworld) - gameworld.PropertyClassList.RemoveAll() RemoveEntity(gameworld) gameworld = CreateEntity('ioGameWorld', blpython, None) @@ -211,10 +209,10 @@ path = '/xd/%s/%s' % (root, file) name = file.split('.')[0] #print 'loading sound %s' % name - smgr = CS_QUERY_REGISTRY(oreg, iSndSysManager) - sloader = CS_QUERY_REGISTRY(oreg, iSndSysLoader) + smgr = oreg.Get(iSndSysManager) + sloader = oreg.Get(iSndSysLoader) if not sloader: - sloader = CS_LOAD_PLUGIN(PluginManager, "crystalspace.sndsys.element.loader", iSndSysLoader) + sloader = PluginManager.LoadPlugin("crystalspace.sndsys.element.loader", iSndSysLoader) if sloader: dbuf = Vfs.ReadFile(path) sdata = sloader.LoadSound(dbuf) Modified: trunk/ecksdee/data/scripts/ioNetHelper.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetHelper.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioNetHelper.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,43 +1,29 @@ from pycel import * import cPickle -import simplejson -import ioDataBin multicastip = '225.100.100.100' #(vk) maybe change that for XD #A helper class which makes it easy to send data over the network through #an entity holding an ioDispatcher. class ioNetHelper: - def __init__(self): + api_version = 2 + def __init__(self, celEntity): + self.entity = celEntity + self.databin = Entities['ioDataBin'].Behaviour #The transport entity is the entity which holds our dispatcher. #We require that it is stored in the data bin - self.transportent = Entities[ioDataBin.Get('socketent')] - self.clientaddrs = None - + ### (vk) mmm + ###self.transportent = Entities[self.databin.get('socketent')] + self.transportent = pl.FindEntity(self.databin.get('socketent')) + #Sends a message to our transport to send data def sendData(self, entity, message, data, dest = None, important = True): - msgblock = {} - msgblock['entity'] = entity - msgblock['message'] = message - msgblock['data'] = cPickle.dumps(data, 0) - msgblock['destination'] = cPickle.dumps(dest, 0) - msgblock['important'] = important - pars = parblock(msgblock) if not self.transportent: - self.transportent = Entities[ioDataBin.Get('socketent')] - self.transportent.Behaviour.SendMessage('senddata', None, pars) - - #Fetch and store the list of client addresses from the transport entity - def updateClientAddrs(self): - pars = celGenericParameterBlock(0) - clients = self.transportent.Behaviour.SendMessage('getclientaddrs', None, pars) - self.clientaddrs = cPickle.loads(clients) - + self.transportent = Entities[self.databin.get('socketent')] + self.transportent.Behaviour.sendData(entity, message,data, dest, important) #for use by server entities, send a message to all clients, except for one optional one def sendToClients(self, entity, message, data, source = None, important = True): - #if not self.clientaddrs: - self.updateClientAddrs() - for client in self.clientaddrs: + for client in self.transportent.Behaviour.getClientAddrs(): if source != client: self.sendData(entity, message, data, client, important) Modified: trunk/ecksdee/data/scripts/ioNetworkEnt.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEnt.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioNetworkEnt.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,7 +1,6 @@ from pycel import * import cPickle -import ioNetHelper from ioNetworkEntBase import * #Make the server version of an entity Modified: trunk/ecksdee/data/scripts/ioNetworkEntBase.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,9 +1,6 @@ from pycel import * import cPickle -import ioNetHelper - - #Behaviour for a networked object class ioNetworkEntBase: api_version = 2 @@ -20,7 +17,7 @@ self.ticks = 0 self.front = csVector3(0, 0, -1) self.codename = '' - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour self.timer = celTimer(self.entity) ##Interpolate our rotation for 150ms Modified: trunk/ecksdee/data/scripts/ioNetworkEntCl.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-29 16:07:08 UTC (rev 783) @@ -1,7 +1,6 @@ from pycel import * import cPickle -import ioNetHelper from ioNetworkEntBase import * def makeEntity(codename, name): Modified: trunk/ecksdee/data/server/game/ioEntityManager.py =================================================================== --- trunk/ecksdee/data/server/game/ioEntityManager.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/server/game/ioEntityManager.py 2008-11-29 16:07:08 UTC (rev 783) @@ -2,7 +2,6 @@ import ioLoader import random import cPickle -import ioNetHelper import ioNetworkEnt #an entity which keeps track of the positions of managed entities, @@ -17,7 +16,7 @@ self.ents = {} self.gsrv = Entities['ioGSrv'] - self.net = ioNetHelper.ioNetHelper() + self.net = Entities['ioNetHelper'].Behaviour #A client is registering an entity def r_newent(self, pc, args): @@ -82,9 +81,7 @@ return cPickle.dumps(self.ents[ent][0]) #Get the next entity from a current one in our entity dict, for a given entity. Used for targetting systems - def getnextentity(self, pc, args): - source = args[getid('cel.parameter.source')] - current = args[getid('cel.parameter.current')] + def getNextEntity(self, source, current): entities = self.ents.keys() if len(entities) > 1: try: Modified: trunk/ecksdee/data/server/ioServerBase.py =================================================================== --- trunk/ecksdee/data/server/ioServerBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/server/ioServerBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -7,8 +7,6 @@ import ioDispatcher import ioInit import ioNetPacket -import ioNetHelper -import ioDataBin class ioReportingClient: def __init__(self, addr, name, ent): @@ -34,6 +32,8 @@ #This needs to be overridden in specific implementations. self.chatent = '' blpython = BehaviourLayers['blpython'] + self.databin = CreateEntity('ioDataBin', blpython, 'ioDataBin').Behaviour + self.net = CreateEntity('ioNetHelper', blpython, 'ioNetHelper').Behaviour self.timer = celTimer(self.entity) self.timer.WakeUpFrame(0) @@ -55,12 +55,11 @@ timer.WakeUp(500, True, 'packethandle') timer.WakeUp(3000, True, 'ping') - ioDataBin.Store('socketent', self.entity.Name) + self.databin.store('socketent', self.entity.Name) #We test lag this way, by waiting for a timer event self.fakelag = False self.lagsend = [] - self.net = ioNetHelper.ioNetHelper() #Handle the network que. also sleep to reduce cpu usage def pctimer_wakeupframe(self, pc, args): @@ -126,7 +125,6 @@ print 'New ' + typename + ' -', addr, name client = ioReportingClient(addr, name, entity) connectedlist.append(client) - self.net.updateClientAddrs() self.dispatcher.clients.append(addr) pars = parblock({typename : cPickle.dumps(addr), 'name' : name}) self.entity.Behaviour.SendMessage(typename + 'add', None, pars) @@ -157,7 +155,6 @@ for client in self.clients[:]: if client.addr == addr: self.clients.remove(client) - self.net.updateClientAddrs() self.dispatcher.clients.remove(addr) pars = parblock({'client' : cPickle.dumps(client.addr), 'name' : client.name}) self.entity.Behaviour.SendMessage('clientpop', None, pars) @@ -170,12 +167,7 @@ self.entity.Behaviour.SendMessage('serverpop', None, pars) #An entity requested to send something to somewhere. - def senddata(self, pc, args): - entity = args[parid('entity')] - message = args[parid('message')] - data = cPickle.loads(args[parid('data')]) - destination = cPickle.loads(args[parid('destination')]) - important = args[parid('important')] + def sendData(self, entity, message, data, destination, important): if not destination: print 'warning - no destination for packet', entity, message, data packet = ioNetPacket.ioNetPacket() @@ -249,8 +241,8 @@ self.net.sendToClients(self.chatent, 'msg', [name, msg]) #Return the list of our clients - def getclientaddrs(self, pc, args): - return cPickle.dumps([client.addr for client in self.clients], 0) + def getClientAddrs(self): + return [client.addr for client in self.clients] #Quit if sent by the local client def r_quit(self, pc, args): @@ -262,9 +254,7 @@ #Exit server process def killserver(self): print 'Server quit!' - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) + ioInit.exitgame() #Attempt to bind the dispatcher to a port def bindport(self, port): Modified: trunk/ecksdee/data/vehicles/ioVehicle.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicle.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/vehicles/ioVehicle.py 2008-11-29 16:07:08 UTC (rev 783) @@ -106,9 +106,8 @@ def r_nxtgt(self, pc, args): addr = self.net.getNetData(args)[0] if addr == self.owneraddr: - pars = parblock({'source' : self.entity.Name, 'current' : self.targetname}) entmgr = Entities['ioEntMgr'] - targetname = entmgr.Behaviour.SendMessage('getnextentity', None, pars) + targetname = entmgr.Behaviour.getNextEntity(self.entity.Name, self.targetname) if targetname != '': self.targetname = targetname self.targetUpdate() Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-28 16:50:18 UTC (rev 782) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-29 16:07:08 UTC (rev 783) @@ -119,16 +119,17 @@ def makeShadow(self): self.decal_mgr = CS_QUERY_REGISTRY_TAG_INTERFACE (oreg, "crystalspace.decal.manager", iDecalManager) if not self.decal_mgr: - self.decal_mgr = CS_LOAD_PLUGIN(PluginManager, "crystalspace.decal.manager", iDecalManager) + self.decal_mgr = PluginManager.LoadPlugin("crystalspace.decal.manager", iDecalManager) mat = Engine.FindMaterial('shadow') if not mat: Loader.LoadTexture ('shadow', '/xd/textures/shadow.png') mat = Engine.FindMaterial('shadow') self.dt = self.decal_mgr.CreateDecalTemplate(mat) #self.dt.SetDecalOffset(0.02) - self.dt.SetPolygonNormalThreshold(0.25) - self.dt.SetTimeToLive(0.5) - self.dt.SetTopClipping(False) + #self.dt.SetPolygonNormalThreshold(0.25) + #self.dt.SetTimeToLive(0.5) + #self.dt.SetTopClipping(False) + self.timer.WakeUp(100, True, 'shadowupdate') # Save timing in player's properties, and apply afterburner health pernalty def pctimer_wakeupframe(self, pc, args): @@ -143,6 +144,15 @@ 'position': csVector3(0, 0, 0)}) self.entity.Behaviour.SendMessage('pcdamage_hurt', None, pars) + #update the position of our shadow at most every 30ms + def pctimer_shadowupdate(self, pc, args): + m = self.mesh.Mesh.GetMovable() + t = m.GetTransform() + p = self.wheeled.GetWheelBody(0).GetPosition() + #result = self.scene.HitBeam(m.GetPosition() + csVector3(0, 0.5, 0), m.GetPosition() - csVector3(0, 10, 0)) + result = m.GetPosition() - csVector3(0,0.5,0) + self.shadow = self.decal_mgr.CreateDecal(self.dt, self.scene, result, t.GetFront(), t.GetUp(), self.width, self.height, self.shadow) + def pcproperties_setproperty(self, pc, args): pass @@ -575,14 +585,14 @@ if weapon.strip() != '': #print 'addweapon', str(weapon), 'at', str(mount) bodyMesh = celMesh(self.entity) - nodeob = self.scene.QueryObject().GetChild(self.codename + '-' + mount) + nodeob = self.scene.QueryObject().GetChildByName('%s-%s' % (self.codename, mount)) if self.weapons[mount]: oldweapon = self.weapons[mount] self.hardpoints.remove(oldweapon) RemoveEntity(oldweapon) #Make sure vehi... [truncated message content] |
From: <vk...@us...> - 2008-11-28 16:50:26
|
Revision: 782 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=782&view=rev Author: vknecht Date: 2008-11-28 16:50:18 +0000 (Fri, 28 Nov 2008) Log Message: ----------- - Vincent applied mods from IO r1152, r1153, r1154, r1156 and r1157. Modified Paths: -------------- trunk/ecksdee/data/client/ioClient.py trunk/ecksdee/data/client/ioEntityManagerClient.py trunk/ecksdee/data/client/ioNetClient.py trunk/ecksdee/data/menus/ioGameMenu.py trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/data/scripts/ioDispatcher.py trunk/ecksdee/data/scripts/ioNetworkEntBase.py trunk/ecksdee/data/scripts/ioNetworkEntCl.py trunk/ecksdee/data/server/ioServerBase.py trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/client/ioClient.py =================================================================== --- trunk/ecksdee/data/client/ioClient.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/client/ioClient.py 2008-11-28 16:50:18 UTC (rev 782) @@ -63,10 +63,9 @@ self.net.sendData('ioGSrv', msg, data, self.gameserver) def r_resp(self, pc, args): - if self.servertime >= 2: - hud = Entities['ioHUD'] - if hud: - hud.Behaviour.SendMessage('unlag', None, celGenericParameterBlock(0)) + hud = Entities['ioHUD'] + if hud: + hud.Behaviour.SendMessage('unlag', None, celGenericParameterBlock(0)) self.servertime = 0 #Get the servers sending info to us Modified: trunk/ecksdee/data/client/ioEntityManagerClient.py =================================================================== --- trunk/ecksdee/data/client/ioEntityManagerClient.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/client/ioEntityManagerClient.py 2008-11-28 16:50:18 UTC (rev 782) @@ -112,11 +112,12 @@ #Equip random model for weapons models = ioLoader.scanModels(vehicleinfo['Path']) - model = random.choice(models) - weapons = model['Weapons'] - for mount, weapon in weapons.items(): - pars = parblock({'mount' : mount, 'weapon' : weapon}) - vehicle.Behaviour.SendMessage('addweapon', None, pars) + if len(models) > 0: + model = random.choice(models) + weapons = model['Weapons'] + for mount, weapon in weapons.items(): + pars = parblock({'mount' : mount, 'weapon' : weapon}) + vehicle.Behaviour.SendMessage('addweapon', None, pars) pars = parblock({'player' : False}) vehicle.Behaviour.SendMessage('setplayer', None, pars) Modified: trunk/ecksdee/data/client/ioNetClient.py =================================================================== --- trunk/ecksdee/data/client/ioNetClient.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/client/ioNetClient.py 2008-11-28 16:50:18 UTC (rev 782) @@ -49,7 +49,7 @@ def pctimer_wakeup(self, pc, args): self.dispatcher.packethandler.checkStored() - asyncore.loop(0, True, asyncore.socket_map, 1) + if self.fakelag: for data in self.lagsend[:]: packet, mtime = data @@ -57,7 +57,8 @@ self.dispatcher.sendData(packet) self.lagsend.remove(data) - # def pctimer_wakeup(self, pc, args): + def pctimer_wakeupframe(self, pc, args): + asyncore.loop(0, True, asyncore.socket_map, 1) #A child entity needs to add more network client messages def addexceptions(self, pc, args): Modified: trunk/ecksdee/data/menus/ioGameMenu.py =================================================================== --- trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-28 16:50:18 UTC (rev 782) @@ -78,6 +78,7 @@ #Now ask the user if they want to quit the server if it exists def pctimer_poll_wait(self, pc, args): + self.timer.Clear() if self.serverfound: if ioDataBin.Get('mpgame'): self.menu.clear() @@ -110,6 +111,8 @@ self.afterpoll() def quitgame(self): + netgame = Entities['ioNetMgrCl'] + netgame.Behaviour.SendMessage('leavegame', None,celGenericParameterBlock(0)) q = CS_QUERY_REGISTRY (oreg, iEventQueue) if q: q.GetEventOutlet().Broadcast (csevQuit (oreg)) Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-11-28 16:50:18 UTC (rev 782) @@ -85,8 +85,8 @@ modellabel.SetTextFgColor(csColor(1, 1, 1)) modellabel.SetText('Model Preset') - self.vehiclescroller = celScroller.celScroller(self.entity, [00000, 65000], [80000, 150000]) - self.modelscroller = celScroller.celScroller(self.entity, [00000, 140000], [80000, 150000]) + self.vehiclescroller = celScroller.celScroller(self.entity, [00000, 65000], [80000, 150000], '_vehicles') + self.modelscroller = celScroller.celScroller(self.entity, [00000, 140000], [80000, 150000], 'models') self.buttons = celMenu.celMenu(self.entity) self.buttons.addElement('Continue','Continue_click', [280000, 0], [30000,10000], self.fconst,'half-black') @@ -165,6 +165,18 @@ pcinput.Bind('Up', 'camup') pcinput.Bind('Down', 'camdown') + def scroller_up_vehicles(self, pc, args): + self.vehiclescroller.scrollup() + + def scroller_down_vehicles(self, pc, args): + self.vehiclescroller.scrolldown() + + def scroller_up_models(self, pc, args): + self.modelscroller.scrollup() + + def scroller_down_models(self, pc, args): + self.modelscroller.scrolldown() + def pccommandinput_camleft1(self, pc, args): celGetDefaultCamera(Entities['ioGameWorld']).SetYawVelocity(0.6) Modified: trunk/ecksdee/data/scripts/ioDispatcher.py =================================================================== --- trunk/ecksdee/data/scripts/ioDispatcher.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/scripts/ioDispatcher.py 2008-11-28 16:50:18 UTC (rev 782) @@ -37,6 +37,8 @@ if packet.ip in self.clients or packet.message in self.exceptions: reciever = pl.FindEntity(packet.entity) if reciever is not None: + if 'tgt' in packet.message: + print packet.message, packet.data reciever.Behaviour.SendMessage('r_%s' % packet.message, None, packet.toPars()) else: #print 'no entity', packet.entity Modified: trunk/ecksdee/data/scripts/ioNetworkEntBase.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-28 16:50:18 UTC (rev 782) @@ -21,6 +21,7 @@ self.front = csVector3(0, 0, -1) self.codename = '' self.net = ioNetHelper.ioNetHelper() + self.timer = celTimer(self.entity) ##Interpolate our rotation for 150ms def pctimer_wakeupframe(self, pc, args): @@ -41,10 +42,10 @@ if distance > 5.0: print 'setting position' self.body.SetPosition(pos) - self.unstuck(False) + #self.unstuck(False) #Otherwise do a little correction elif distance > 0.1: - correction = diff * 5.0 # (vk) was 2.0 + correction = diff * 2.0 self.body.SetLinearVelocity(lvel + correction) if self.servermesh is not None: # @TODO@ add visibility check pars = parblock({'position': pos}) Modified: trunk/ecksdee/data/scripts/ioNetworkEntCl.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-28 16:50:18 UTC (rev 782) @@ -26,6 +26,8 @@ def __init__(self, celEntity): ioNetworkEntBase.__init__(self, celEntity) + self.timer.WakeUp(33, True, 'send_rot') + self.timer.WakeUp(66, True, 'send_pos') #Register or unregister from the network. def setregistered(self, pc, args): Modified: trunk/ecksdee/data/server/ioServerBase.py =================================================================== --- trunk/ecksdee/data/server/ioServerBase.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/server/ioServerBase.py 2008-11-28 16:50:18 UTC (rev 782) @@ -53,7 +53,7 @@ #Every 10 secs we check for dead clients, and send a ping to all. timer = celTimer(self.entity) timer.WakeUp(500, True, 'packethandle') - timer.WakeUp(5000, True, 'ping') + timer.WakeUp(3000, True, 'ping') ioDataBin.Store('socketent', self.entity.Name) Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-28 16:50:18 UTC (rev 782) @@ -94,10 +94,7 @@ self.shatterfact = Engine.FindMeshFactory('windowShatter') #When subclassed by ioVehicle, has to be kept in sync with the timer time in ioNetworkEnt - self.timer = celTimer(self.entity) self.timer.WakeUp(50, True, 'update') - self.timer.WakeUp(25, True, 'send_rot') - self.timer.WakeUp(50, True, 'send_pos') # (vk) process timing and afterburner penalty self.timer.WakeUpFrame(0) @@ -782,6 +779,7 @@ partmech = celMechanicsObject(part) partmech.SetMass(10) partmech.SetFriction(0.4) + partmech.AddToGroup('weapongroup') partmech.AttachColliderBoundingBox() self.randomThrow(partmech.GetBody()) ##dmgfname = 'gen' + self.codename + 'Body-exp' @@ -970,7 +968,7 @@ # self.sendinput('fh' + str(hardpoint) + '0') def unstuck(self, resetorientation): - self.mech.AddForceDuration(csVector3(0, 25.0 * self.mech.GetMass() ,0), False, csVector3(0), 0.25) + self.mech.AddForceDuration(csVector3(0, 50.0 * self.mech.GetMass() ,0), False, csVector3(0), 0.1) if resetorientation: self.mech.Body.SetTransform(csOrthoTransform(csMatrix3(), self.mech.Body.GetPosition())) Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-11-27 18:37:53 UTC (rev 781) +++ trunk/ecksdee/doc/history.txt 2008-11-28 16:50:18 UTC (rev 782) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +28-Nov-2008 + - Vincent applied mods from IO r1152, r1153, r1154, r1156 and r1157. 27-Nov-2008 - Vincent applied mods from IO r1146 & r1151. 26-Nov-2008 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-11-27 18:38:00
|
Revision: 781 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=781&view=rev Author: vknecht Date: 2008-11-27 18:37:53 +0000 (Thu, 27 Nov 2008) Log Message: ----------- - Vincent applied mods from IO r1146 & r1151. Modified Paths: -------------- trunk/ecksdee/data/client/ioNetClient.py trunk/ecksdee/data/menus/StartMenu.py trunk/ecksdee/data/menus/ioAutoUpdater.py trunk/ecksdee/data/menus/ioGameMenu.py trunk/ecksdee/data/scripts/ioBaseInit.py trunk/ecksdee/data/scripts/ioInit.py trunk/ecksdee/data/scripts/ioNetworkEnt.py trunk/ecksdee/data/scripts/ioNetworkEntBase.py trunk/ecksdee/data/scripts/ioNetworkEntCl.py trunk/ecksdee/data/server/game/ioGameServer.py trunk/ecksdee/data/server/ioServerBase.py trunk/ecksdee/data/server/lobby/ioLobbyServer.py trunk/ecksdee/data/vehicles/ioVehicle.py trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/data/vehicles/ioVehicleCl.py trunk/ecksdee/data/weapons/ffar/ioFFAR.py trunk/ecksdee/data/weapons/ioWeapon.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/client/ioNetClient.py =================================================================== --- trunk/ecksdee/data/client/ioNetClient.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/client/ioNetClient.py 2008-11-27 18:37:53 UTC (rev 781) @@ -47,7 +47,8 @@ else: self.dispatcher.sendData(packet) - def pctimer_wakeupframe(self, pc, args): + def pctimer_wakeup(self, pc, args): + self.dispatcher.packethandler.checkStored() asyncore.loop(0, True, asyncore.socket_map, 1) if self.fakelag: for data in self.lagsend[:]: @@ -56,8 +57,7 @@ self.dispatcher.sendData(packet) self.lagsend.remove(data) - def pctimer_wakeup(self, pc, args): - self.dispatcher.packethandler.checkStored() + # def pctimer_wakeup(self, pc, args): #A child entity needs to add more network client messages def addexceptions(self, pc, args): Modified: trunk/ecksdee/data/menus/StartMenu.py =================================================================== --- trunk/ecksdee/data/menus/StartMenu.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/menus/StartMenu.py 2008-11-27 18:37:53 UTC (rev 781) @@ -111,4 +111,4 @@ def destruct(self, pc, args): self.menu.clear() - self.entity.PropertyClassList.RemoveAll() + ###self.entity.PropertyClassList.RemoveAll() Modified: trunk/ecksdee/data/menus/ioAutoUpdater.py =================================================================== --- trunk/ecksdee/data/menus/ioAutoUpdater.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/menus/ioAutoUpdater.py 2008-11-27 18:37:53 UTC (rev 781) @@ -246,7 +246,6 @@ #Now we really leave def pctimer_wakeup(self, pc, args): timer = celTimer(self.entity) - timer.Clear() RemoveEntity(self.entity) def scroller_down(self, pc, args): @@ -261,6 +260,5 @@ ioDataBin.Store('updateskipped', self.updateskipped) self.killdescwindow() self.menu.clear() - self.entity.PropertyClassList.RemoveAll() ioinit = Entities['ent_gamemanager'] #['ioInit'] ioinit.Behaviour.SendMessage('updatecomplete', None, celGenericParameterBlock(0)) Modified: trunk/ecksdee/data/menus/ioGameMenu.py =================================================================== --- trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/menus/ioGameMenu.py 2008-11-27 18:37:53 UTC (rev 781) @@ -73,11 +73,11 @@ def pollserver(self): self.serverfound = False self.net.sendData('ioGSrv', 'poll', [self.entity.Name]) - timer = celTimer(self.entity) - timer.WakeUp(250, False) + self.timer = celTimer(self.entity) + self.timer.WakeUp(1000, False, 'poll_wait') #Now ask the user if they want to quit the server if it exists - def pctimer_wakeup(self, pc, args): + def pctimer_poll_wait(self, pc, args): if self.serverfound: if ioDataBin.Get('mpgame'): self.menu.clear() @@ -90,14 +90,14 @@ #If its a single player game just quit else: self.net.sendData('ioGSrv', 'quit', []) - self.afterpoll() + self.timer.WakeUp(1000, False, 'quit_wait') else: - self.afterpoll() + self.timer.WakeUp(1000, False, 'quit_wait') #The user wants to quit the server def yes_click(self, pc, args): self.net.sendData('ioGSrv', 'quit', []) - self.afterpoll() + self.timer.WakeUp(1000, False, 'quit_wait') #Just do the rest def no_click(self, pc, args): @@ -106,12 +106,17 @@ #There is a local server def r_pollreply(self, pc, args): self.serverfound = True + self.timer.Clear() + self.afterpoll() def quitgame(self): q = CS_QUERY_REGISTRY (oreg, iEventQueue) if q: q.GetEventOutlet().Broadcast (csevQuit (oreg)) + def pctimer_quit(self, pc, args): + self.afterpoll() + def returntomenu(self): netgame = Entities['ioNetMgrCl'] netgame.Behaviour.SendMessage('leavegame', None, celGenericParameterBlock(0)) Modified: trunk/ecksdee/data/scripts/ioBaseInit.py =================================================================== --- trunk/ecksdee/data/scripts/ioBaseInit.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/scripts/ioBaseInit.py 2008-11-27 18:37:53 UTC (rev 781) @@ -47,6 +47,8 @@ os.environ['PYTHONPATH'] += os.path.pathsep + path for path in paths: addPath(path) + print 'PYTHONPATH value:' + print os.environ['PYTHONPATH'] #Add a folder and all it's subfolders to PYTHONPATH def addPath(path): Modified: trunk/ecksdee/data/scripts/ioInit.py =================================================================== --- trunk/ecksdee/data/scripts/ioInit.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/scripts/ioInit.py 2008-11-27 18:37:53 UTC (rev 781) @@ -64,6 +64,9 @@ self.timer.WakeUpFrame(2) self.frames = 0 + def pctimer_wakeup(self, pc, args): + print 'ioInit.py: timer' + #This is only started after a frame def maininit(self): Engine.PrecacheDraw() Modified: trunk/ecksdee/data/scripts/ioNetworkEnt.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEnt.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/scripts/ioNetworkEnt.py 2008-11-27 18:37:53 UTC (rev 781) @@ -29,24 +29,16 @@ pars = parblock({'entity' : self.entity.Name}) self.owneraddr = cPickle.loads(entmgr.Behaviour.SendMessage('getaddr', None, pars)) - #We send our state to the server to update it. - def pctimer_wakeup(self, pc, args): - self.ticks += 1 - #Send the quaternion more often as it tends to desync easier - if self.ticks == 2: - self.net.sendToClients(self.entity.Name, 'q', self.getQuat(), self.owneraddr, False) - if self.ticks == 4: - self.net.sendToClients(self.entity.Name, 'p', self.getPos(), self.owneraddr, False) - self.ticks = 0 - #We need to check that the correct client sent the update - def r_p(self, pc, args): + def r_q(self, pc, args): addr, data = self.net.getNetData(args) if addr == self.owneraddr: - ioNetworkEntBase.r_p(self, pc, args) + ioNetworkEntBase.r_q(self, pc, args) + self.net.sendToClients(self.entity.Name, 'q', data, self.owneraddr, False) #We need to check that the correct client sent the update - def r_q(self, pc, args): + def r_p(self, pc, args): addr, data = self.net.getNetData(args) if addr == self.owneraddr: - ioNetworkEntBase.r_q(self, pc, args) + ioNetworkEntBase.r_p(self, pc, args) + self.net.sendToClients(self.entity.Name, 'p', data, self.owneraddr, False) Modified: trunk/ecksdee/data/scripts/ioNetworkEntBase.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/scripts/ioNetworkEntBase.py 2008-11-27 18:37:53 UTC (rev 781) @@ -44,7 +44,7 @@ self.unstuck(False) #Otherwise do a little correction elif distance > 0.1: - correction = diff * 2.0 + correction = diff * 5.0 # (vk) was 2.0 self.body.SetLinearVelocity(lvel + correction) if self.servermesh is not None: # @TODO@ add visibility check pars = parblock({'position': pos}) Modified: trunk/ecksdee/data/scripts/ioNetworkEntCl.py =================================================================== --- trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/scripts/ioNetworkEntCl.py 2008-11-27 18:37:53 UTC (rev 781) @@ -41,12 +41,11 @@ self.net.sendData(self.entity.Name, 'inp', [inp]) #We send our state to the server to update it. - def pctimer_wakeup(self, pc, args): + def pctimer_send_rot(self, pc, args): if self.registered: - self.ticks += 1 - #Send the quaternion more often as it tends to desync easier - if self.ticks == 2: - self.net.sendData(self.entity.Name, 'q', self.getQuat(), None, False) - if self.ticks == 4: - self.net.sendData(self.entity.Name, 'p', self.getPos(), None, False) - self.ticks = 0 + self.net.sendData(self.entity.Name, 'q', self.getQuat(), None, False) + + #We send our state to the server to update it. + def pctimer_send_pos(self, pc, args): + if self.registered: + self.net.sendData(self.entity.Name, 'p', self.getPos(), None, False) Modified: trunk/ecksdee/data/server/game/ioGameServer.py =================================================================== --- trunk/ecksdee/data/server/game/ioGameServer.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/server/game/ioGameServer.py 2008-11-27 18:37:53 UTC (rev 781) @@ -56,8 +56,8 @@ data = cPickle.loads(data) self.initServer(data) - def fullTimer(self): - ioServerBase.fullTimer(self) + def pctimer_ping(self, pc, args): + ioServerBase.pctimer_ping(self, pc, args) if self.needauth and self.server != (None, None): #TODO, password data = ['', self.name, self.entity.Name, False] @@ -155,6 +155,12 @@ for ent in [self.gamebehave, self.netmgr, self.entmgr]: ent.Behaviour.SendMessage('clientpop', None, args) + #If it was a sp game and the client died, we kill ourselves + def dropaddr(self, addr): + ioServerBase.dropaddr(self, addr) + if self.server == (None, None) and addr[0] == '127.0.0.1': + self.killserver() + #A local client is polling for the server def r_poll(self, pc, args): addr, data = self.net.getNetData(args) Modified: trunk/ecksdee/data/server/ioServerBase.py =================================================================== --- trunk/ecksdee/data/server/ioServerBase.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/server/ioServerBase.py 2008-11-27 18:37:53 UTC (rev 781) @@ -44,17 +44,16 @@ #The messages that anyone is allowed to send self.dispatcher.exceptions = ['getinfo', 'auth'] - #Every 10 secs we check for dead clients, and send a ping to all. - self.timer.WakeUp(10000, True) - self.password = '' #The time to delay in between frames to save cpu usage. self.sleeptime = 0.05 #Wakeup the packethandler - self.lastmajorwakeup = Clock.GetCurrentTicks() + + #Every 10 secs we check for dead clients, and send a ping to all. timer = celTimer(self.entity) - timer.WakeUp(500, True) + timer.WakeUp(500, True, 'packethandle') + timer.WakeUp(5000, True, 'ping') ioDataBin.Store('socketent', self.entity.Name) @@ -137,16 +136,11 @@ self.net.sendData(entity, 'den', [reason], addr) #Check our packets - def pctimer_wakeup(self, pc, args): + def pctimer_packethandle(self, pc, args): self.dispatcher.packethandler.checkStored() - curtime = Clock.GetCurrentTicks() - if (curtime - self.lastmajorwakeup) >= 5000: - self.fullTimer() - self.lastmajorwakeup = curtime #Every 5 secs send a echo to all clients and servers, and time for dead ones - - def fullTimer(self): + def pctimer_ping(self, pc, args): pars = {} for connected in self.clients + self.childservers: self.net.sendData(connected.entity, 'resp', [], connected.addr) @@ -263,6 +257,7 @@ addr, data = self.net.getNetData(args) if addr[0] == '127.0.0.1': self.killserver() + print 'quitting!!' #Exit server process def killserver(self): Modified: trunk/ecksdee/data/server/lobby/ioLobbyServer.py =================================================================== --- trunk/ecksdee/data/server/lobby/ioLobbyServer.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/server/lobby/ioLobbyServer.py 2008-11-27 18:37:53 UTC (rev 781) @@ -31,7 +31,7 @@ mreq = struct.pack('4sl', socket.inet_aton(ioNetHelper.multicastip), socket.INADDR_ANY) self.dispatcher.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - self.lastcheckin = Clock.GetCurrentTicks() + self.timer.WakeUp(3600000, True, 'checkin') def downloader_complete(self, pars): pass @@ -43,12 +43,8 @@ pass #Refresh in the masterserver list - def pctimer_wakeup(self, pc, args): - ioServerBase.pctimer_wakeup(self, pc, args) - curtime = Clock.GetCurrentTicks() - if curtime - self.lastcheckin >= 3600000: - self.lastcheckin = curtime - self.checkIn() + def pctimer_checkin(self, pc, args): + self.checkIn() def pctimer_wakeupframe(self, pc, args): ioServerBase.pctimer_wakeupframe(self, pc, args) Modified: trunk/ecksdee/data/vehicles/ioVehicle.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicle.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/vehicles/ioVehicle.py 2008-11-27 18:37:53 UTC (rev 781) @@ -13,6 +13,7 @@ self.entity = celEntity ioNetworkEnt.__init__(self, self.entity) ioVehicleBase.__init__(self, self.entity) + self.timer.WakeUp(50, True, 'send_damage') #We batch send damage messages to send bandwidth #self.damages is our buffer. its keys are tuples of zones and indexes @@ -39,10 +40,6 @@ inpmethod = getattr(self, 'pccommandinput_' + inpstring) inpmethod(self.entity, celGenericParameterBlock(0)) self.net.sendToClients(self.entity.Name, 'inp', [inp], addr) - - def pctimer_wakeup(self, pc, args): - ioNetworkEnt.pctimer_wakeup(self, pc, args) - ioVehicleBase.pctimer_wakeup(self, pc, args) def setcodename(self, pc, args): ioNetworkEnt.setcodename(self, pc, args) @@ -163,9 +160,7 @@ ## (vk) for the additional trigger stuff in base to be done by server ioVehicleBase.pctimer_wakeupframe(self, pc, args) - def pctimer_wakeup(self, pc, args): - ioNetworkEnt.pctimer_wakeup(self, pc, args) - ioVehicleBase.pctimer_wakeup(self, pc, args) + def pctimer_send_damage(self, pc, args): #Send our batch of damage messages for type, damage in self.damages.iteritems(): zone, idx = type Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-11-27 18:37:53 UTC (rev 781) @@ -94,10 +94,12 @@ self.shatterfact = Engine.FindMeshFactory('windowShatter') #When subclassed by ioVehicle, has to be kept in sync with the timer time in ioNetworkEnt - timer = celTimer(self.entity) - timer.WakeUp(100, True) + self.timer = celTimer(self.entity) + self.timer.WakeUp(50, True, 'update') + self.timer.WakeUp(25, True, 'send_rot') + self.timer.WakeUp(50, True, 'send_pos') # (vk) process timing and afterburner penalty - timer.WakeUpFrame(0) + self.timer.WakeUpFrame(0) #This dict matches up sets of similar weapons. #eg {'FLMR' : [0,2,4], 'BRWNG' : [1,5]} @@ -829,7 +831,7 @@ #self.shadow = self.decal_mgr.CreateDecal(self.dt, self.scene, result.isect, t.GetFront(), t.GetUp(), self.width, self.height, self.shadow) #Add a drag force proportional to frame damage - def pctimer_wakeup(self, pc, args): + def pctimer_update(self, pc, args): ###vel = self.mech.GetLinearVelocity() ###drag = (100 - self.avgframe) * -vel ###self.mech.AddForceDuration(drag * 7.5, False, csVector3(0), 0.1) Modified: trunk/ecksdee/data/vehicles/ioVehicleCl.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/vehicles/ioVehicleCl.py 2008-11-27 18:37:53 UTC (rev 781) @@ -291,16 +291,6 @@ ioNetworkEntCl.setcodename(self, pc, args) ioVehicleBase.setcodename(self, pc, args) - def pctimer_wakeup(self, pc, args): - ioNetworkEntCl.pctimer_wakeup(self, pc, args) - ioVehicleBase.pctimer_wakeup(self, pc, args) - #Reset the vehicle 2 sec after creation - if self.resetticks >= 0 and self.registered: - self.resetticks += 1 - if self.resetticks >= 20: - self.resetticks = -1 - self.entity.Behaviour.SendMessage('pccommandinput_recover1', None, celGenericParameterBlock(0)) - def pctimer_wakeupframe(self, pc, args): ioNetworkEntCl.pctimer_wakeupframe(self, pc, args) ioVehicleBase.pctimer_wakeupframe(self, pc, args) Modified: trunk/ecksdee/data/weapons/ffar/ioFFAR.py =================================================================== --- trunk/ecksdee/data/weapons/ffar/ioFFAR.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/weapons/ffar/ioFFAR.py 2008-11-27 18:37:53 UTC (rev 781) @@ -6,7 +6,7 @@ api_version = 2 def __init__(self, celEntity): - self.reloadtime = 100 + self.reloadtime = 200 ioWeapon.__init__(self, celEntity) self.ammo = 10 #The FFAR will take 5 seconds to replenish rockets after depleting them @@ -22,25 +22,22 @@ self.emptiedtime = None self.refilling = False self.refillno = 1 - - #Slow down shooting a tad - self.wait = 1 - + def fillrockets(self): for i in xrange(self.ammo): self.rockets.append(self.makeRocket(i+1)) def shoot(self): if not self.refilling: - if len(self.rockets) > 0 and self.ammo > 0 and self.wait == 0: + if len(self.rockets) > 0 and self.ammo > 0: ioWeapon.shoot(self) self.shootRocket() if self.client: sounds = ['fox1', 'fox2', 'fox3', 'fox4', 'fox5'] sound = ioLoader.playSound(self.entity, random.choice(sounds)) - self.wait = 2 if len(self.rockets) == 0 and self.ammo > 0: self.refilling = True + self.timer.WakeUp(100, True, 'refill') #Make a rocket in a barrel. def makeRocket(self, barrel): @@ -82,19 +79,18 @@ #Fire! pcprojectile.Start(enddir, 20 + pspeed, 100, 10) - def pctimer_wakeup(self, pc, args): - if self.wait > 0: - self.wait -= 1 - ioWeapon.pctimer_wakeup(self, pc, args) + def pctimer_refill(self, pc, args): if self.ammo - len(self.rockets) <= 0: + self.timer.Clear('refill') self.refilling = False - elif self.refilling: + else: self.fillRocket() def fillRocket(self): self.rockets.append(self.makeRocket(self.refillno)) if self.refillno == self.ammo: self.refillno = 1 + self.timer.Clear('refill') self.refilling = False else: self.refillno += 1 Modified: trunk/ecksdee/data/weapons/ioWeapon.py =================================================================== --- trunk/ecksdee/data/weapons/ioWeapon.py 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/data/weapons/ioWeapon.py 2008-11-27 18:37:53 UTC (rev 781) @@ -37,7 +37,7 @@ #self.reloadtime must be set before this self.ready = False self.timer = celTimer(self.entity) - self.timer.WakeUp(self.reloadtime, True) + self.timer.WakeUp(self.reloadtime, False, 'reload') #Allowed angles, in radians, to adjust to our target self.yallowance = math.radians(5.0) @@ -147,7 +147,7 @@ self.firing = False #Start shooting - def pctimer_wakeup(self, pc, args): + def pctimer_reload(self, pc, args): self.ready = True if self.firing and self.canShoot(): self.shoot() @@ -160,7 +160,7 @@ self.entity.Behaviour.SendMessage('fire0', None, pars) if self.player: self.sendupdate() - self.timer.WakeUp(self.reloadtime, True) + self.timer.WakeUp(self.reloadtime, False, 'reload') self.ready = False def pcdynamicbody_collision(self, pc, args): Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-11-26 17:29:22 UTC (rev 780) +++ trunk/ecksdee/doc/history.txt 2008-11-27 18:37:53 UTC (rev 781) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +27-Nov-2008 + - Vincent applied mods from IO r1146 & r1151. 26-Nov-2008 - Vincent updated ioGarage to use GetChildByName(). 25-Nov-2008 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-11-26 17:29:27
|
Revision: 780 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=780&view=rev Author: vknecht Date: 2008-11-26 17:29:22 +0000 (Wed, 26 Nov 2008) Log Message: ----------- - Vincent updated ioGarage to use GetChildByName(). Modified Paths: -------------- trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-11-25 19:00:27 UTC (rev 779) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-11-26 17:29:22 UTC (rev 780) @@ -291,7 +291,7 @@ else: vehiclemesh = celMesh(self.selectedvehicle) sector = Engine.FindSector('Garage') - shipcenter = sector.QueryObject().GetChild('Empty') + shipcenter = sector.QueryObject().GetChildByName('Empty') centerpos = self.startpos yvec = csVector3(0, 1, 0) if shipcenter is None: Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-11-25 19:00:27 UTC (rev 779) +++ trunk/ecksdee/doc/history.txt 2008-11-26 17:29:22 UTC (rev 780) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +26-Nov-2008 + - Vincent updated ioGarage to use GetChildByName(). 25-Nov-2008 - Vincent fixed the race not starting. CS & CEL 1.4 are required, now ! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-11-25 19:00:45
|
Revision: 779 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=779&view=rev Author: vknecht Date: 2008-11-25 19:00:27 +0000 (Tue, 25 Nov 2008) Log Message: ----------- - Vincent fixed the race not starting. CS & CEL 1.4 are required, now ! Modified Paths: -------------- trunk/ecksdee/data/gametypes/race/ioGameRace.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/gametypes/race/ioGameRace.py =================================================================== --- trunk/ecksdee/data/gametypes/race/ioGameRace.py 2008-09-01 16:41:37 UTC (rev 778) +++ trunk/ecksdee/data/gametypes/race/ioGameRace.py 2008-11-25 19:00:27 UTC (rev 779) @@ -10,11 +10,10 @@ # (vk) Uncomment that to start race quests after fixed time # That's not the correct way, though... timer = celTimer(celEntity) - timer.WakeUp(25000, False) + timer.WakeUp(25000, False, 'startrace') - def pctimer_wakeup(self, pc, args): + def pctimer_startrace(self, pc, args): # We don't execute ioGameBase.pctimer_wakeup(), which respawns players - print 'ioGameRace: pctimer_wakeup' self.startRaceQuest(pc, None) def startRaceQuest(self, pc, args): Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-09-01 16:41:37 UTC (rev 778) +++ trunk/ecksdee/doc/history.txt 2008-11-25 19:00:27 UTC (rev 779) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +25-Nov-2008 + - Vincent fixed the race not starting. + CS & CEL 1.4 are required, now ! 01-Sep-2008 - Vincent updated python widgets from CEL. Better handling of font settings inheritance. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-09-01 16:41:41
|
Revision: 778 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=778&view=rev Author: vknecht Date: 2008-09-01 16:41:37 +0000 (Mon, 01 Sep 2008) Log Message: ----------- - Forgot to commit history.txt for r777. Modified Paths: -------------- trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-09-01 16:40:14 UTC (rev 777) +++ trunk/ecksdee/doc/history.txt 2008-09-01 16:41:37 UTC (rev 778) @@ -3,6 +3,9 @@ The history order is reversed so that new features are at the top. +01-Sep-2008 + - Vincent updated python widgets from CEL. Better handling of font + settings inheritance. 11-Jul-2008 - Vincent made the following changes: - Fixed time counter text alignment. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-09-01 16:40:16
|
Revision: 777 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=777&view=rev Author: vknecht Date: 2008-09-01 16:40:14 +0000 (Mon, 01 Sep 2008) Log Message: ----------- - Vincent updated python widgets from CEL. Better handling of font settings inheritance. Modified Paths: -------------- trunk/ecksdee/data/widgets/celDropDown.py trunk/ecksdee/data/widgets/celMenu.py trunk/ecksdee/data/widgets/celNumberInput.py Modified: trunk/ecksdee/data/widgets/celDropDown.py =================================================================== --- trunk/ecksdee/data/widgets/celDropDown.py 2008-07-11 15:32:05 UTC (rev 776) +++ trunk/ecksdee/data/widgets/celDropDown.py 2008-09-01 16:40:14 UTC (rev 777) @@ -2,7 +2,7 @@ import celMenu class celDropDown: api_version = 2 # use new version of message callbacks. - def __init__(self,celEntity): + def __init__(self, celEntity): self.message = '' self.owner = None self.entity = celEntity @@ -10,9 +10,13 @@ self.active = False self.bb = celBillboard(self.entity).Billboard self.bb.SetText('') + self.locked = False self.fconst = celMenu.GetFontConstant() self.menu = celMenu.celMenu(self.entity) - self.locked = False + #Properties of the subitems. You may want to change these. + #Changes will be reflected next time submenu is shown. + self.menufont = self.bb.GetTextFont() + self.menufontsize = self.bb.GetTextFontSize() def pcbillboard_select(self,pc,args): params = parblock({'sender':self.entity.Name}) @@ -37,7 +41,10 @@ if not self.locked: if not self.active: for item in self.items: - self.menu.addElement(item, 'item_clicked', [0, 0], [67000, 8000], self.fconst * 0.8, 'dropdown-bg') + newitem = self.menu.addElement(item, 'item_clicked', [0, 0], [67000, 8000], self.fconst * 0.8, 'dropdown-bg') + bb = celBillboard(newitem) + bb.text_font = self.menufont + bb.text_font_size = self.menufontsize x, y = self.bb.GetPosition() self.menu.align([x, y], [0, 7000]) self.active = True Modified: trunk/ecksdee/data/widgets/celMenu.py =================================================================== --- trunk/ecksdee/data/widgets/celMenu.py 2008-07-11 15:32:05 UTC (rev 776) +++ trunk/ecksdee/data/widgets/celMenu.py 2008-09-01 16:40:14 UTC (rev 777) @@ -39,10 +39,11 @@ else: pcbillboard.text_font = self.font pcbillboard.text = name - params=parblock({'message' : message, 'owner': self.owner}) - if message != '': - elementEntity.CreateBehaviour(self.blpython, behaviour) + elementEntity.CreateBehaviour(self.blpython, behaviour) + #Time to send a message if neccesary + if message != '': pcbillboard.clickable = True + params=parblock({'message' : message, 'owner': self.owner}) elementEntity.Behaviour.SendMessage('setparameters', None, params) self.elements.append(elementEntity) Modified: trunk/ecksdee/data/widgets/celNumberInput.py =================================================================== --- trunk/ecksdee/data/widgets/celNumberInput.py 2008-07-11 15:32:05 UTC (rev 776) +++ trunk/ecksdee/data/widgets/celNumberInput.py 2008-09-01 16:40:14 UTC (rev 777) @@ -24,6 +24,7 @@ self.bb.SetText('0') #Add the directional arrows self.arrows = celMenu.celMenu(self.entity) + self.arrows.font = self.bb.GetTextFont() self.arrows.addElement('<', 'left_click', pos, [6000, 6000], fconst * 0.8, 'unselection') self.arrows.addElement('>', 'right_click', [pos[0] + size[0] - 3000, pos[1]], [6000, 6000], fconst * 0.8, 'unselection') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-07-11 15:32:14
|
Revision: 776 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=776&view=rev Author: vknecht Date: 2008-07-11 08:32:05 -0700 (Fri, 11 Jul 2008) Log Message: ----------- - Vincent made the following changes: - Fixed time counter text alignment. - Added 'Ecksdee.Font.Weapon' kvp for weapon-related stuff in HUD. Modified Paths: -------------- trunk/ecksdee/AppEcksdee.cfg trunk/ecksdee/data/hud/ioHUD.py trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/AppEcksdee.cfg =================================================================== --- trunk/ecksdee/AppEcksdee.cfg 2008-05-25 20:56:05 UTC (rev 775) +++ trunk/ecksdee/AppEcksdee.cfg 2008-07-11 15:32:05 UTC (rev 776) @@ -136,5 +136,6 @@ Ecksdee.Font.Numbers = /xd/fonts/lcd2.ttf #Ecksdee.Font.Numbers = /xd/fonts/menu/f500.ttf Ecksdee.Font.Menu = /xd/fonts/crassroots.ttf +Ecksdee.Font.Weapon = /xd/fonts/crassroots.ttf ;Translator.Language = en Modified: trunk/ecksdee/data/hud/ioHUD.py =================================================================== --- trunk/ecksdee/data/hud/ioHUD.py 2008-05-25 20:56:05 UTC (rev 775) +++ trunk/ecksdee/data/hud/ioHUD.py 2008-07-11 15:32:05 UTC (rev 776) @@ -65,7 +65,7 @@ ##bb.width = 50000 ##bb.height = 5000 bb.text_font_size = self.fconst * 2 #0.9 - bb.text_font = '/xd/fonts/lcd2.ttf' + bb.text_font = Config.GetStr('Ecksdee.Font.Weapon') bb.text_fg_color = celMenu.GetFontColor() bb.clickable = True bb.materialnamefast = 'unselection' Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-05-25 20:56:05 UTC (rev 775) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-07-11 15:32:05 UTC (rev 776) @@ -945,7 +945,7 @@ tenths = int(floor(msec / 100)) sec = int(floor(tenths / 10)) min = int(floor(sec / 60)) - string = '%(min)2d:%(sec)02d.%(tenths)1d' % \ + string = '%(min)1d:%(sec)02d.%(tenths)1d' % \ {'min': min, 'sec': sec - min * 60, 'tenths': tenths - sec * 10} return string Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-05-25 20:56:05 UTC (rev 775) +++ trunk/ecksdee/doc/history.txt 2008-07-11 15:32:05 UTC (rev 776) @@ -3,6 +3,10 @@ The history order is reversed so that new features are at the top. +11-Jul-2008 + - Vincent made the following changes: + - Fixed time counter text alignment. + - Added 'Ecksdee.Font.Weapon' kvp for weapon-related stuff in HUD. 25-May-2008 - Vincent made changes related to fonts (still need work): - Added /xd/fonts/crassroots.ttf under Open Font License from This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-05-25 20:56:19
|
Revision: 775 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=775&view=rev Author: vknecht Date: 2008-05-25 13:56:05 -0700 (Sun, 25 May 2008) Log Message: ----------- - Vincent made changes related to fonts (still need work): - Added /xd/fonts/crassroots.ttf under Open Font License from http://openfontlibrary.org/media/reviews/ChozCunningham/30 - Added a copy of CEL python widgets in data/widgets/, enhanced to support setting a default font with celMenu.setFont(). - Added Ecksdee.Font.Menu and Ecksdee.Font.Number KVP pointing to font paths. - Changed some of the menus and the HUD to use the font KVPs. Modified Paths: -------------- trunk/ecksdee/AppEcksdee.cfg trunk/ecksdee/LICENSE trunk/ecksdee/data/hud/ioHUD.py trunk/ecksdee/data/menus/StartMenu.py trunk/ecksdee/data/menus/ioHostGame.py trunk/ecksdee/data/menus/ioOptionsScreen.py trunk/ecksdee/data/menus/ioServerSelect.py trunk/ecksdee/data/menus/ioVideoOptions.py trunk/ecksdee/doc/history.txt trunk/ecksdee/ecksdee.py Added Paths: ----------- trunk/ecksdee/data/fonts/crassroots.ttf trunk/ecksdee/data/widgets/ trunk/ecksdee/data/widgets/celButton.py trunk/ecksdee/data/widgets/celDropDown.py trunk/ecksdee/data/widgets/celMenu.py trunk/ecksdee/data/widgets/celNumberInput.py trunk/ecksdee/data/widgets/celScroller.py trunk/ecksdee/data/widgets/celTextInput.py Modified: trunk/ecksdee/AppEcksdee.cfg =================================================================== --- trunk/ecksdee/AppEcksdee.cfg 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/AppEcksdee.cfg 2008-05-25 20:56:05 UTC (rev 775) @@ -133,4 +133,8 @@ Ecksdee.Updater.Enabled = false +Ecksdee.Font.Numbers = /xd/fonts/lcd2.ttf +#Ecksdee.Font.Numbers = /xd/fonts/menu/f500.ttf +Ecksdee.Font.Menu = /xd/fonts/crassroots.ttf + ;Translator.Language = en Modified: trunk/ecksdee/LICENSE =================================================================== --- trunk/ecksdee/LICENSE 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/LICENSE 2008-05-25 20:56:05 UTC (rev 775) @@ -1,10 +1,13 @@ -Short version: there are 3 licenses used: +Short version: there are 4 licenses used: 1/ GPLv2 for the source code, models and textures http://www.gnu.org/licenses/gpl.txt 2/ Creative Commons by-nc v2.5 for sounds http://creativecommons.org/licenses/by-nc/2.5/ 3/ Creative Commons by-nc-nd v2.5 for music tracks (data/sounds/game/music/) http://creativecommons.org/licenses/by-nc-nd/2.5/ +4/ Open Font License 1.1 for the crassroots.ttf font + http://openfontlibrary.org/media/reviews/ChozCunningham/30 + http://scripts.sil.org/OFL ============================================================================== @@ -794,3 +797,104 @@ additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +============================================================================== + + +Copyright (c) <dates>, <Copyright Holder> (<URL|email>), +with Reserved Font Name <Reserved Font Name>. +Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>), +with Reserved Font Name <additional Reserved Font Name>. +Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. Added: trunk/ecksdee/data/fonts/crassroots.ttf =================================================================== (Binary files differ) Property changes on: trunk/ecksdee/data/fonts/crassroots.ttf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/ecksdee/data/hud/ioHUD.py =================================================================== --- trunk/ecksdee/data/hud/ioHUD.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/hud/ioHUD.py 2008-05-25 20:56:05 UTC (rev 775) @@ -31,11 +31,11 @@ self.timecounter = celAddBillboard(self.entity) self.timecounter.materialnamefast = '' self.timecounter.x = 210000 # 230000 - self.timecounter.y = 1000 + self.timecounter.y = 12000 self.timecounter.width = 307200/16 self.timecounter.height = 307200*25/1024 self.timecounter.text_font_size = self.fconst * 6 # 36.0 - self.timecounter.text_font = '/xd/fonts/menu/f500.ttf' + self.timecounter.text_font = Config.GetStr('Ecksdee.Font.Numbers') #We average the last 10 gathered speeds to smooth out the needle self.speeds = [] @@ -65,7 +65,7 @@ ##bb.width = 50000 ##bb.height = 5000 bb.text_font_size = self.fconst * 2 #0.9 - bb.text_font = '/xd/fonts/menu/f500.ttf' + bb.text_font = '/xd/fonts/lcd2.ttf' bb.text_fg_color = celMenu.GetFontColor() bb.clickable = True bb.materialnamefast = 'unselection' Modified: trunk/ecksdee/data/menus/StartMenu.py =================================================================== --- trunk/ecksdee/data/menus/StartMenu.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/menus/StartMenu.py 2008-05-25 20:56:05 UTC (rev 775) @@ -26,6 +26,7 @@ pcinput = celCommandInput(self.entity) pcinput.Bind('esc', 'exit') self.menu = celMenu.celMenu(self.entity) + self.menu.setFont(Config.GetStr('Ecksdee.Font.Menu')) fsize = celMenu.GetFontConstant() * 3 # font size was 18 xs = 30000 ys = 20000 Modified: trunk/ecksdee/data/menus/ioHostGame.py =================================================================== --- trunk/ecksdee/data/menus/ioHostGame.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/menus/ioHostGame.py 2008-05-25 20:56:05 UTC (rev 775) @@ -18,6 +18,7 @@ self.blpython = BehaviourLayers['blpython'] self.fconst = celMenu.GetFontConstant() self.fcolor = celMenu.GetFontColor() + fontpath = Config.GetStr('Ecksdee.Font.Menu') self.mapinfo = ioLoader.scanDir('levels/tracks') self.gameinfo = ioLoader.scanDir('gametypes') @@ -37,7 +38,7 @@ windowbg.SetSize(221200,212200) games = celAddBillboard(self.entity).Billboard - games.SetTextFont('/outlaws/fonts/lcd2.ttf', self.fconst * 1.25) + games.SetTextFont(fontpath, self.fconst * 1.25) games.SetText('Host') games.SetTextFgColor(self.fcolor) games.SetPosition(245000, 42000) @@ -68,16 +69,18 @@ for name, pos in labels.items(): bb = celAddBillboard(self.entity).Billboard - bb.SetTextFont('/outlaws/fonts/lcd2.ttf', self.fconst * 0.8) + bb.SetTextFont(fontpath, self.fconst * 0.8) bb.SetText(name) bb.SetTextFgColor(self.fcolor) bb.SetPosition(pos[0], pos[1]) self.buttons = celMenu.celMenu(self.entity) + self.buttons.setFont(fontpath) self.buttons.addElement('<<', 'Back_click', [42500, 42500], [6000, 6000], self.fconst * 0.7, 'back-bg') self.buttons.addElement('Launch', 'Launch_click', [244000, 186000], [19000, 8000], self.fconst, 'button-bg') self.inputs = celMenu.celMenu(self.entity) + self.inputs.setFont(fontpath) gamename = self.inputs.addElement('name', 'Input_click', [68000, 52000], [65000, 6000], self.fconst * 0.8, 'unselection', 'celTextInput') #Add a location dropdown, and fill it in with maps in the 'ioData/maps' folder. Modified: trunk/ecksdee/data/menus/ioOptionsScreen.py =================================================================== --- trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/menus/ioOptionsScreen.py 2008-05-25 20:56:05 UTC (rev 775) @@ -50,13 +50,15 @@ self.currentscreen = None self.menu = celMenu.celMenu(self.entity) + font = Config.GetStr('Ecksdee.Font.Menu') + self.menu.setFont(font) back = self.menu.addElement('<<', 'Back_click', (42500, 42500), (6000, 6000), self.fconst * 0.7, 'back-bg') saved = self.menu.addElement('Save Page', 'Save_clicked', (228500, 247500), (30000, 8000), self.fconst, 'button-bg') self.saved = celBillboard(saved) self.scroller = celScroller.celScroller(self.entity, [42500, 62500], \ [42000, 185000]) - self.scroller.additem('Video', 'Video_click') + self.scroller.additem('Video', 'Video_click', font) #This will kill the scroll buttons self.scroller.menu.clear() self.Video_click(None, None) Modified: trunk/ecksdee/data/menus/ioServerSelect.py =================================================================== --- trunk/ecksdee/data/menus/ioServerSelect.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/menus/ioServerSelect.py 2008-05-25 20:56:05 UTC (rev 775) @@ -75,6 +75,7 @@ #We want to refresh on creation self.Refresh_click(None, celGenericParameterBlock(0)) + print 'ioServerSelect: end of __init__' def pccommandinput_exit1(self, pc, args): q = CS_QUERY_REGISTRY (oreg, iEventQueue) @@ -88,10 +89,14 @@ pass def pctimer_wakeup(self, pc, args): + print 'ioServerSelect: pctimer_wakeup' self.entity.Behaviour.SendMessage('Refresh_click', None, celGenericParameterBlock(0)) + print 'ioServerSelect: pctimer_wakeup end' - def pctimer_wakeupframe(self, pc, args): + def ctimer_wakeupframe(self, pc, args): + print 'ioServerSelect: pctimer_wakeupframe' ioDownloader.dispatch(self, self.dl) + print 'ioServerSelect: pctimer_wakeupframe end' def downloader_read(self, pars): pass Modified: trunk/ecksdee/data/menus/ioVideoOptions.py =================================================================== --- trunk/ecksdee/data/menus/ioVideoOptions.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/data/menus/ioVideoOptions.py 2008-05-25 20:56:05 UTC (rev 775) @@ -19,10 +19,12 @@ self.x = 82500 self.y = 62500 self.menu = celMenu.celMenu(self.entity) - + font = Config.GetStr('Ecksdee.Font.Menu') + self.menu.setFont(font) + volabel = celCreateBillboard(pl, self.entity) volabel.text_font_size = self.fconst * 1.25 - volabel.text_font ='/outlaws/fonts/lcd2.ttf' + volabel.text_font = font volabel.text = 'Video Output (Applied on Restart)' volabel.text_fg_color = self.fcolor volabel.x = self.x @@ -33,7 +35,7 @@ res.y = self.y + 10000 res.text_font_size = self.fconst res.text_fg_color = self.fcolor - res.text_font = '/outlaws/fonts/lcd2.ttf' + res.text_font = font res.text = 'Resolution:' self.resscroller = celScroller.celScroller(self.entity, [self.x + 40000, self.y + 10000], [70000, 50000], '_resscroller') @@ -47,11 +49,11 @@ '1280x800', '1600x1024'] for res in reslist: - self.resscroller.additem(res, 'resscroller_select') + self.resscroller.additem(res, 'resscroller_select', font) fslabel = celCreateBillboard(pl, self.entity) fslabel.text_font_size = self.fconst - fslabel.text_font ='/outlaws/fonts/lcd2.ttf' + fslabel.text_font = font fslabel.text = 'Fullscreen:' fslabel.text_fg_color = self.fcolor fslabel.x = self.x @@ -63,7 +65,7 @@ fxlabel = celCreateBillboard(pl, self.entity) fxlabel.text_font_size = self.fconst * 1.25 - fxlabel.text_font ='/outlaws/fonts/lcd2.ttf' + fxlabel.text_font = font fxlabel.text = 'Effects' fxlabel.text_fg_color = self.fcolor fxlabel.x = self.x @@ -71,7 +73,7 @@ dustlabel = celCreateBillboard(pl, self.entity) dustlabel.text_font_size = self.fconst - dustlabel.text_font ='/outlaws/fonts/lcd2.ttf' + dustlabel.text_font = font dustlabel.text = 'Dust trails:' dustlabel.text_fg_color = self.fcolor dustlabel.x = self.x @@ -86,13 +88,13 @@ foliage.y = self.y + 120000 foliage.text_font_size = self.fconst foliage.text_fg_color = self.fcolor - foliage.text_font = '/outlaws/fonts/lcd2.ttf' + foliage.text_font = font foliage.text = 'Foliage:' self.foliagescroller = celScroller.celScroller(self.entity, [self.x + 40000, self.y + 120000], [70000, 40000], '_foliagescroller') self.foliagescroller.menu.clear() for level in ['High', 'Low', 'Off']: - self.foliagescroller.additem(level, 'foliagescroller_select') + self.foliagescroller.additem(level, 'foliagescroller_select', font) self.loadconfig() @@ -170,6 +172,16 @@ def destruct(self, pc, args): self.menu.clear() + if self.fsbutton: + self.fsbutton.PropertyClassList.RemoveAll() + RemoveEntity(self.fsbutton) + else: + print 'no self.fsbutton...' + if self.dtbutton: + self.dtbutton.PropertyClassList.RemoveAll() + RemoveEntity(self.dtbutton) + else: + print 'no self.dtbutton...' self.resscroller.destruct() self.foliagescroller.destruct() self.entity.PropertyClassList.RemoveAll() Added: trunk/ecksdee/data/widgets/celButton.py =================================================================== --- trunk/ecksdee/data/widgets/celButton.py (rev 0) +++ trunk/ecksdee/data/widgets/celButton.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,40 @@ +from pycel import * +import celMenu +class celButton: + api_version = 2 # use new version of message callbacks. + def __init__(self,celEntity): + self.message = '' + self.owner = None + self.entity = celEntity + self.active = True + + def pcbillboard_select(self,pc,args): + if self.active: + params = parblock({'sender':self.entity.Name}) + if self.owner: + self.owner.Behaviour.SendMessage(self.message, None, params) + + def pcbillboard_unselect(self,pc,args): + pass + + def pcbillboard_doubleclick(self, pc, args): + pass + + def setparameters(self,pc,args): + self.message = args[getid('cel.parameter.message')] + self.owner = args[getid('cel.parameter.owner')] + + def setactive(self, pc, args): + if not self.active: + self.active = True + bb = celBillboard(self.entity).Billboard + bb.SetTextFgColor(celMenu.GetFontColor()) + + def setinactive(self, pc, args): + if self.active: + self.active = False + bb = celBillboard(self.entity).Billboard + bb.SetTextFgColor(csColor(0, 0, 0)) + + def destruct(self, pc, args): + pass Added: trunk/ecksdee/data/widgets/celDropDown.py =================================================================== --- trunk/ecksdee/data/widgets/celDropDown.py (rev 0) +++ trunk/ecksdee/data/widgets/celDropDown.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,72 @@ +from pycel import * +import celMenu +class celDropDown: + api_version = 2 # use new version of message callbacks. + def __init__(self,celEntity): + self.message = '' + self.owner = None + self.entity = celEntity + self.items = [] + self.active = False + self.bb = celBillboard(self.entity).Billboard + self.bb.SetText('') + self.fconst = celMenu.GetFontConstant() + self.menu = celMenu.celMenu(self.entity) + self.locked = False + + def pcbillboard_select(self,pc,args): + params = parblock({'sender':self.entity.Name}) + if self.owner: + self.owner.Behaviour.SendMessage(self.message, None, params) + + def pcbillboard_unselect(self,pc,args): + pass + + def pcbillboard_doubleclick(self, pc, args): + pass + + def setparameters(self,pc,args): + self.message = args[getid('cel.parameter.message')] + self.owner = args[getid('cel.parameter.owner')] + + def additem(self, pc, args): + name = args[getid('cel.parameter.Name')] + self.items.append(name) + + def setactive(self, pc, args): + if not self.locked: + if not self.active: + for item in self.items: + self.menu.addElement(item, 'item_clicked', [0, 0], [67000, 8000], self.fconst * 0.8, 'dropdown-bg') + x, y = self.bb.GetPosition() + self.menu.align([x, y], [0, 7000]) + self.active = True + + def setinactive(self, pc, args): + self.active = False + self.menu.clear() + + def item_clicked(self, pc, args): + name = args[getid('cel.parameter.sender')] + self.active = False + self.menu.clear() + self.bb.SetText(name) + params = parblock({'sender':self.entity.Name}) + if self.owner: + self.owner.Behaviour.SendMessage(self.message + '_item', None, params) + + def selectindex(self, pc, args): + if not self.locked: + index = int(args[getid('cel.parameter.index')]) + self.active = False + self.menu.clear() + self.bb.SetText(self.items[index]) + + def destruct(self, pc, args): + self.menu.clear() + + def setlocked(self, pc, args): + self.locked = True + + def setunlocked(self, pc, args): + self.locked = False Property changes on: trunk/ecksdee/data/widgets/celDropDown.py ___________________________________________________________________ Name: svn:executable + * Added: trunk/ecksdee/data/widgets/celMenu.py =================================================================== --- trunk/ecksdee/data/widgets/celMenu.py (rev 0) +++ trunk/ecksdee/data/widgets/celMenu.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,104 @@ +from pycel import * + +#The glue module which abstracts the widgets into a menu. Allows one widget to have focus. +#You really want to use this module to use the widgets. + + +def GetFontConstant(): + return 1.0 + float(Graphics2D.GetHeight()) / 100.0 + +def GetFontColor(): + return csColor(0.9, 0.9, 0.9) + +class celMenu: + api_version = 2 # use new version of message callbacks. + def __init__(self, owner): + self.elements = [] + self.blpython = BehaviourLayers['blpython'] + self.owner = owner + self.active = None + self.font = '/fonts/unifont/unifont.csf' + + #Add a menu element. sends message to menu when clicked. the behaviour chooses the widget. + def addElement(self, name, message, position, sizes, fsize, material, behaviour = 'celButton', fpath = None): + elementEntity = CreateEntity(name, self.blpython, None) + pcbillboard = celBillboard(elementEntity) + pcbillboard.materialnamefast = material + pcbillboard.width = sizes[0] + pcbillboard.height = sizes[1] + pcbillboard.x = position[0] + pcbillboard.y = position[1] + pcbillboard.text_offset = csVector2(1500, 1500) + pcbillboard.text_fg_color = GetFontColor() + pcbillboard.text_font_size = fsize + if fpath is not None: + oldfont = self.font + self.setFont(fpath) + pcbillboard.text_font = self.font + self.font = oldfont + else: + pcbillboard.text_font = self.font + pcbillboard.text = name + params=parblock({'message' : message, 'owner': self.owner}) + if message != '': + elementEntity.CreateBehaviour(self.blpython, behaviour) + pcbillboard.clickable = True + elementEntity.Behaviour.SendMessage('setparameters', None, params) + self.elements.append(elementEntity) + + return elementEntity + + #Given an [x,y] list for position, and spacing, arrange elements + def align(self, position, spacing): + for i, element in enumerate(self.elements): + bb = celBillboard(element).Billboard + bb.SetPosition(position[0] + (spacing[0]*i),position[1]+(spacing[1]*i)) + + #Remove all elements from menu + def clear(self): + for i in xrange(len(self.elements)): + element = self.elements.pop(0) + RemoveEntity(element) + + #make one selected + def updateSelect(self, selected): + index = 0 + for i, element in enumerate(self.elements): + if element.Name == selected: + index = i + bb = celBillboard(element).Billboard + bb.SetMaterialName('button-bg') + + bb = celBillboard(self.elements[index]).Billboard + bb.SetMaterialName('button-bg') + return index + + #Activate an item in the menu + def activate(self, name): + self.active = None + for element in self.elements: + if element.Name == name: + if element.Behaviour: + self.active = element + element.Behaviour.SendMessage('setactive', None, celGenericParameterBlock(0)) + else: + if element.Behaviour: + element.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) + + #Deactivate all elements + def deactivateAll(self): + self.active = None + for element in self.elements: + if element.Behaviour: + element.Behaviour.SendMessage('setinactive', None, celGenericParameterBlock(0)) + + #Get the current font's VFS path + def getFont(self): + return self.font + + #Set the font's VFS path + def setFont(self, vfspath): + if Vfs.Exists(vfspath): + self.font = vfspath + else: + print 'celMenu: can''t find %s' % vfspath Added: trunk/ecksdee/data/widgets/celNumberInput.py =================================================================== --- trunk/ecksdee/data/widgets/celNumberInput.py (rev 0) +++ trunk/ecksdee/data/widgets/celNumberInput.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,142 @@ +from pycel import * +import celMenu +class celNumberInput: + api_version = 2 # use new version of message callbacks. + def __init__(self,celEntity): + self.message = '' + self.owner = None + self.entity = celEntity + self.active = False + self.index = 0 + self.bb = celBillboard(self.entity).Billboard + self.bb.SetText('') + #Keep the text in a list so we can do insertion at cursor position + self.text = ['0'] + self.pcinput = celCommandInput(self.entity) + self.pcinput.Bind('key', 'keypress') + self.pcinput.SetCookedMode(True) + self.pcinput.SetSendTrigger(True) + + fconst = celMenu.GetFontConstant() + pos = self.bb.GetPosition() + size = self.bb.GetSize() + self.bb.SetTextOffset(size[0] / 2 - 2000, 1000) + self.bb.SetText('0') + #Add the directional arrows + self.arrows = celMenu.celMenu(self.entity) + self.arrows.addElement('<', 'left_click', pos, [6000, 6000], fconst * 0.8, 'unselection') + self.arrows.addElement('>', 'right_click', [pos[0] + size[0] - 3000, pos[1]], [6000, 6000], fconst * 0.8, 'unselection') + + def pcbillboard_select(self,pc,args): + params = parblock({'sender':self.entity.Name}) + if self.owner: + self.owner.Behaviour.SendMessage(self.message, None, params) + + def pcbillboard_unselect(self,pc,args): + pass + + def pcbillboard_doubleclick(self, pc, args): + pass + + def setactive(self, pc, args): + if not self.active: + self.active = True + text = self.bb.GetText() + if text: + if len(text) > 0: + self.text = list(text) + self.index = len(text) + else: + self.text = [] + + #Insert the cursor + newtext = '' + for i, letter in enumerate(self.text): + #Insert the cursor at right position + if i is self.index: + newtext += '|' + newtext += letter + #Also allow cursor to be at the end + if self.index is len(newtext): + newtext += '|' + self.bb.SetText(newtext) + + def setinactive(self, pc, args): + if self.active: + self.active = False + #Remove the cursor + newtext = '' + for i, letter in enumerate(self.text): + newtext += letter + self.bb.SetText(newtext) + + def setparameters(self,pc,args): + self.message = args[getid('cel.parameter.message')] + self.owner = args[getid('cel.parameter.owner')] + + def pccommandinput_keypress1(self, pc, args): + trigger = args[getid('cel.parameter.trigger')] + if self.active: + self.handlekey(trigger) + + def handlekey(self, trigger): + #Move the cursor + if trigger == 'Left' and self.index > 0: + self.index -= 1 + if trigger == 'Right' and self.index < len(self.text): + self.index += 1 + + #Insert a character + elif trigger in '1234567890': + self.text.insert(self.index, trigger) + self.index += 1 + + #Delete a character + elif trigger == 'Back': + if len(self.text) > 0: + self.index -= 1 + self.text.pop(self.index) + newtext = '' + for i, letter in enumerate(self.text): + #Insert the cursor at right position + if i is self.index: + newtext += '|' + newtext += letter + #Also allow cursor to be at the end + if self.index is len(newtext): + newtext += '|' + self.bb.SetText(newtext) + + def pccommandinput_keypress0(self, pc, args): + pass + + def pccommandinput_keypress_(self, pc, args): + trigger = args[getid('cel.parameter.trigger')] + if self.active: + self.handlekey(trigger) + + def destruct(self, pc, args): + self.arrows.clear() + self.entity.PropertyClassList.RemoveAll() + + def left_click(self, pc, args): + newtext = '' + for i, letter in enumerate(self.text): + newtext += letter + newint = int(newtext) - 1 + self.text = list(str(newint)) + self.bb.SetText(str(newint)) + + def right_click(self, pc, args): + newtext = '' + for i, letter in enumerate(self.text): + newtext += letter + newint = int(newtext) + 1 + self.text = list(str(newint)) + self.bb.SetText(str(newint)) + + #This message allows to change our value that we store and display + def set_value(self, pc, args): + text = str(args[parid('value')]) + self.text = list(text) + self.bb.SetText(text) Property changes on: trunk/ecksdee/data/widgets/celNumberInput.py ___________________________________________________________________ Name: svn:executable + * Added: trunk/ecksdee/data/widgets/celScroller.py =================================================================== --- trunk/ecksdee/data/widgets/celScroller.py (rev 0) +++ trunk/ecksdee/data/widgets/celScroller.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,162 @@ +from pycel import * +import celMenu + +#The scroller is not meant to be used as part of a menu. +class celScroller: + api_version = 2 # use new version of message callbacks. + def __init__(self, owner, pos, dims, name = ''): + self.items = [] + self.names = [] + self.name = name + self.blpython = BehaviourLayers['blpython'] + self.pos = pos + self.dims = dims + self.owner = owner + self.fconst = celMenu.GetFontConstant() + self.fcolor = celMenu.GetFontColor() + self.selectedname = '' + self.selectedindex = 0 + self.spacing = 10000 + #The amount from 0 to 1 which we have scrolled. + self.scrolled = 0.0 + #The index of our topmost item + self.topindex = 0 + + #If false, we don't let two items with same name/text to be added + self.allowdoubles = False + + #We use an celMenu to store our buttons + self.menu = celMenu.celMenu(owner) + self.bsize = (7500, 7500) + bx = self.pos[0] + self.dims[0] - self.bsize[0] + bposup = (bx, self.pos[1]) + bposdown = (bx, self.pos[1] + self.dims[1] - self.bsize[1]) + fc = celMenu.GetFontConstant() + #The name is appended to the messages + self.menu.addElement('', 'scroller_up' + name, bposup, self.bsize, fc, 'scroller-up') + self.menu.addElement('', 'scroller_down' + name, bposdown, self.bsize, fc, 'scroller-down') + + #Add an item to the scroller + def additem(self, name, message, vfsfontpath = None): + #Check that its not a dupe + if (name not in self.names) or self.allowdoubles: + button = pl.CreateEntity(name, self.blpython, 'celButton') + pars = parblock({'owner' : self.owner, 'message' : message}) + button.Behaviour.SendMessage('setparameters', None, pars) + pcbb = celBillboard(button) + pcbb.EnableEvents(True) + buttonbb = pcbb.Billboard + pcbb.x = self.pos[0] + pcbb.width = self.dims[0] - self.bsize[0] + pcbb.height = self.spacing + pcbb.text_offset = csVector2(3000, 2000) + pcbb.text_fg_color = self.fcolor + pcbb.text_font_size = self.fconst + if vfsfontpath is not None: + oldfont = self.menu.getFont() + self.menu.setFont(vfsfontpath) + pcbb.text_font = self.menu.getFont() + self.menu.setFont(oldfont) + else: + pcbb.text_font = self.menu.getFont() + self.items.append(button) + self.names.append(name) + index = len(self.names) - 1 + self.isvisible(index) + if self.isvisible(index): + self.showitem(index) + self.scrolled = self.topindex / len(self.items) + + #Show an item + def showitem(self, index): + pcbb = celBillboard(self.items[index]) + buttonbb = pcbb.Billboard + pcbb.y = self.getyposition(index) + if index is self.selectedindex: + mat = 'selection' + else: + mat = 'unselection' + pcbb.materialnamefast = mat + pcbb.text = self.names[index] + + #The most items our scroller can show at once + def getmaxvisible(self): + maxvisible = int(self.dims[1] / self.spacing) - 1 + if maxvisible < 1: + maxvisible = 1 + return maxvisible + + #Hide an item + def hideitem(self, index): + pcbb = celBillboard(self.items[index]) + buttonbb = pcbb.Billboard + pcbb.materialnamefast = '' + pcbb.text = '' + + def destruct(self): + self.menu.clear() + self.clear() + + def clear(self): + self.names = [] + for i in xrange(len(self.items)): + item = self.items.pop(0) + RemoveEntity(item) + + #Select an item by its name. + def selectname(self, name): + self.selectedname = name + for i, item in enumerate(self.items): + bb = celBillboard(item).Billboard + if bb.GetText() == name: + self.selectedindex = i + bb.SetMaterialName('selection') + else: + bb.SetMaterialName('unselection') + + #Select an item by its index. + def selectindex(self, index): + self.selectedindex = index + for i, item in enumerate(self.items): + bb = celBillboard(item).Billboard + if index == i: + bb.SetMaterialName('selection') + self.selectedname = bb.GetText() + else: + bb.SetMaterialName('unselection') + + #Change the amount the scroller is scrolled, from 0 - 1 + def setscrolled(self, amount): + if amount >= 0.0 and amount <= 1.0: + self.scrolled = amount + self.topindex = int(self.scrolled * len(self.items)) + self.update() + + #Show all items that can be shown within our boundaries + def update(self): + for i in xrange(len(self.items)): + if self.isvisible(i): + self.showitem(i) + else: + self.hideitem(i) + + #Scroll down by 1 item + def scrolldown(self): + if self.topindex + self.getmaxvisible() < len(self.items) - 1: + self.topindex += 1 + self.update() + + #Scroll up by 1 item + def scrollup(self): + if self.topindex > 0: + self.topindex -= 1 + self.update() + + #Work out the y coordinate of an item, taking into account our scrollage + def getyposition(self, index): + return int(self.pos[1] + ((index - self.topindex ) * self.spacing)) + + #Work out whether an item is able to be seen in this scroller. + def isvisible(self, index): + return (index >= self.topindex) and (index <= self.topindex + self.getmaxvisible()) + Added: trunk/ecksdee/data/widgets/celTextInput.py =================================================================== --- trunk/ecksdee/data/widgets/celTextInput.py (rev 0) +++ trunk/ecksdee/data/widgets/celTextInput.py 2008-05-25 20:56:05 UTC (rev 775) @@ -0,0 +1,160 @@ +from pycel import * +import celMenu +class celTextInput: + api_version = 2 # use new version of message callbacks. + def __init__(self,celEntity): + self.message = '' + self.owner = None + self.entity = celEntity + self.active = False + self.index = 0 + self.bb = celBillboard(self.entity).Billboard + self.bb.SetText('') + #Keep the text in a list so we can do insertion at cursor position + self.text = [] + self.pcinput = celCommandInput(self.entity) + self.pcinput.Bind('key', 'keypress') + self.pcinput.SetCookedMode(True) + self.pcinput.SetSendTrigger(True) + #Maps shift + letter to cap(letter) and other symbols + self.shiftmap = { + '`' : '~', + '1' : '!', + '2' : '@', + '3' : '#', + '4' : '$', + '5' : '%', + '6' : '^', + '7' : '&', + '8' : '*', + '9' : '(', + '0' : ')', + '-' : '_', + '=' : '+', + '[' : '{', + ']' : '}', + ';' : ':', + "'" : '"', + ',' : '<', + '.' : '.', + '/' : '?' + } + for letter in 'abcdefghijklmnopqrstuvwxyz': + self.shiftmap[letter] = letter.upper() + + #Used for the skipnext message + self.skip = False + + #If a keypress was used to activate the input, that key will also + #get triggered. We ignore that here + def skipnext(self, pc, args): + self.skip = True + + def pcbillboard_select(self,pc,args): + params = parblock({'sender':self.entity.Name}) + if self.owner: + self.owner.Behaviour.SendMessage(self.message, None, params) + + def pcbillboard_unselect(self,pc,args): + pass + + def pcbillboard_doubleclick(self, pc, args): + pass + + def setactive(self, pc, args): + if not self.active: + self.active = True + text = self.bb.GetText() + if text: + if len(text) > 0: + self.text = list(text) + self.index = len(text) + else: + self.text = [] + self.updatebb() + + def setinactive(self, pc, args): + if self.active: + self.active = False + #Remove the cursor + newtext = '' + self.bb.SetText(newtext.join(self.text)) + + def setparameters(self,pc,args): + self.message = args[getid('cel.parameter.message')] + self.owner = args[getid('cel.parameter.owner')] + + def pccommandinput_keypress1(self, pc, args): + trigger = args[getid('cel.parameter.trigger')] + if self.active and not self.skip: + self.handlekey(trigger) + else: + self.skip = False + + def handlekey(self, trigger): + #Check if shift is pressed + shifttest = trigger[1:] + if shifttest.startswith('Shift'): + key = trigger[7:] + if len(key) == 1: + trigger = self.shiftmap.get(key) + + if trigger: + #Move the cursor + if trigger == 'Left' and self.index > 0: + self.index -= 1 + if trigger == 'Right' and self.index < len(self.text): + self.index += 1 + + allowed = 'abcdefghijklmnopqrstuvwxyz' + allowed += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + allowed += '0123456789' + allowed += '`~!@#$%^&*()-_=+\{[}];:",<.>/?' + + #Insert a character + if trigger in allowed: + self.text.insert(self.index, trigger) + self.index += 1 + #Insert a space + elif trigger == 'Space': + self.text.insert(self.index, ' ') + self.index += 1 + #Delete a character + elif trigger == 'Back': + if len(self.text) > 0: + self.index -= 1 + self.text.pop(self.index) + #Enter was pressed, tell our owner + elif trigger == 'Enter': + params = parblock({'sender':self.entity.Name}) + self.owner.Behaviour.SendMessage('textinput_enter', None, params) + self.updatebb() + + def updatebb(self): + newtext = '' + for i, letter in enumerate(self.text): + #Insert the cursor at right position + if self.active and (i is self.index): + newtext += '|' + newtext += letter + #Also allow cursor to be at the end + if self.active and (self.index is len(newtext)): + newtext += '|' + self.bb.SetText(newtext) + + #Clear our text + def clear(self, pc, args): + self.text = [] + self.index = 0 + self.bb.SetText('') + + def pccommandinput_keypress0(self, pc, args): + pass + + def pccommandinput_keypress_(self, pc, args): + trigger = args[getid('cel.parameter.trigger')] + if self.active: + self.handlekey(trigger) + + def destruct(self, pc, args): + self.entity.PropertyClassList.RemoveAll() Property changes on: trunk/ecksdee/data/widgets/celTextInput.py ___________________________________________________________________ Name: svn:executable + * Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/doc/history.txt 2008-05-25 20:56:05 UTC (rev 775) @@ -3,6 +3,15 @@ The history order is reversed so that new features are at the top. +25-May-2008 + - Vincent made changes related to fonts (still need work): + - Added /xd/fonts/crassroots.ttf under Open Font License from + http://openfontlibrary.org/media/reviews/ChozCunningham/30 + - Added a copy of CEL python widgets in data/widgets/, enhanced to + support setting a default font with celMenu.setFont(). + - Added Ecksdee.Font.Menu and Ecksdee.Font.Number KVP pointing to + font paths. + - Changed some of the menus and the HUD to use the font KVPs. 21-May-2008 - Vincent made a few changes related to mines: - Removed reference to inexistent 'eject9' sound. Modified: trunk/ecksdee/ecksdee.py =================================================================== --- trunk/ecksdee/ecksdee.py 2008-05-21 18:42:27 UTC (rev 774) +++ trunk/ecksdee/ecksdee.py 2008-05-25 20:56:05 UTC (rev 775) @@ -9,10 +9,11 @@ paths = ['data/menus', 'data/entities', 'data/gametypes', \ 'data/scripts', 'data/client', 'data/vehicles', 'data/server', \ - 'data/server/game', 'data/hud', 'data/weapons'] + 'data/server/game', 'data/hud', 'data/weapons', 'data/widgets'] -if os.environ.has_key('CEL'): - paths.append(os.environ['CEL'] + '/data/library/blpython/widgets/') +# (vk) That's not needed since we have a widget library copy in Ecksdee +#if os.environ.has_key('CEL'): +# paths.append(os.environ['CEL'] + '/data/library/blpython/widgets/') ioBaseInit.pathInit(paths) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-05-21 18:42:30
|
Revision: 774 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=774&view=rev Author: vknecht Date: 2008-05-21 11:42:27 -0700 (Wed, 21 May 2008) Log Message: ----------- - Vincent updated Track1 to not use deprecated propclass names. Modified Paths: -------------- trunk/ecksdee/data/levels/tracks/Track1/entities_world trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/levels/tracks/Track1/entities_world =================================================================== --- trunk/ecksdee/data/levels/tracks/Track1/entities_world 2008-05-21 18:29:36 UTC (rev 773) +++ trunk/ecksdee/data/levels/tracks/Track1/entities_world 2008-05-21 18:42:27 UTC (rev 774) @@ -2,12 +2,12 @@ <world> <sector name="Scene"> <addon entityname="ent_scene" plugin="cel.addons.celentity"> - <propclass name="pcmesh"> + <propclass name="pcobject.mesh"> <action name="SetMesh"> <par string="ent_scene" name="name"/> </action> </propclass> - <propclass name="pcmechobject"> + <propclass name="pcphysics.object"> <action name="SetSystem"> <par string="ent_physics" name="systempcent"/> <par string="ent_physics" name="systempctag"/> @@ -38,7 +38,7 @@ <par name="position" value="70,0,-100" /> <par name="rotation" value="0,-0.86,0" /> <!-- -0.7 --> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="racestarttime" long="16000" /> <property name="checktime" long="5000" /> </propclass> @@ -53,7 +53,7 @@ <par name="position" value="64,0,-204" /> <par name="rotation" value="0,2.94,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="12000" /> </propclass> </addon> @@ -67,7 +67,7 @@ <par name="position" value="-210,0,-123" /> <par name="rotation" value="0,3.14,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="13000" /> </propclass> </addon> @@ -81,7 +81,7 @@ <par name="position" value="-168,0,170" /> <par name="rotation" value="0,2.94,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="8000" /> </propclass> </addon> @@ -95,7 +95,7 @@ <par name="position" value="60,0,205" /> <par name="rotation" value="0,-0.2,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="6000" /> </propclass> </addon> @@ -109,7 +109,7 @@ <par name="position" value="64,0,0" /> <par name="rotation" value="0,-0.2,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="10000" /> </propclass> </addon> @@ -123,7 +123,7 @@ <par name="position" value="210,0,0" /> <par name="rotation" value="0,2.94,0" /> </params> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="13000" /> </propclass> </addon> @@ -140,7 +140,7 @@ <propclass name="pccharacteristics"> <property name="LastCheckpoint" float="1.0" /> </propclass> - <propclass name="pcproperties"> + <propclass name="pctools.properties"> <property name="checktime" long="8000" /> </propclass> </addon> Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-05-21 18:29:36 UTC (rev 773) +++ trunk/ecksdee/doc/history.txt 2008-05-21 18:42:27 UTC (rev 774) @@ -9,6 +9,7 @@ - Added 'Rear1' weapon mount point to the ships. - Added <nohitbeam/> to genMine and genMineLayer, to avoid pchover correcting angular position of the ship due to MINE weapon. + - Vincent updated Track1 to not use deprecated propclass names. 15-May-2008 - Vincent expanded menu level zip file, and converted it to genmeshes. - Vincent added support for an 'Empty' CS node in garage, for initial This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-05-21 18:29:43
|
Revision: 773 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=773&view=rev Author: vknecht Date: 2008-05-21 11:29:36 -0700 (Wed, 21 May 2008) Log Message: ----------- - Vincent made a few changes related to mines: - Removed reference to inexistent 'eject9' sound. - Added 'Rear1' weapon mount point to the ships. - Added <nohitbeam/> to genMine and genMineLayer, to avoid pchover correcting angular position of the ship due to MINE weapon. Modified Paths: -------------- trunk/ecksdee/data/vehicles/Ekiben/world trunk/ecksdee/data/vehicles/F2/world trunk/ecksdee/data/vehicles/Speeder/world trunk/ecksdee/data/vehicles/ioVehicleBase.py trunk/ecksdee/data/weapons/minelayer/factories/genMine trunk/ecksdee/data/weapons/minelayer/factories/genMineLayer trunk/ecksdee/data/weapons/minelayer/ioMine.py trunk/ecksdee/data/weapons/minelayer/ioMineLayer.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/vehicles/Ekiben/world =================================================================== --- trunk/ecksdee/data/vehicles/Ekiben/world 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/vehicles/Ekiben/world 2008-05-21 18:29:36 UTC (rev 773) @@ -32,6 +32,12 @@ <yvector y="0" x="0" z="1"/> <zvector y="1" x="0" z="0"/> </node> + <node name="Ekiben-Rear1"> + <position y="-0.1" x="0" z="2" /> + <xvector y="0" x="-1" z="0"/> + <yvector y="0" x="0" z="1"/> + <zvector y="-1" x="0" z="0"/> + </node> </sector> </world> Modified: trunk/ecksdee/data/vehicles/F2/world =================================================================== --- trunk/ecksdee/data/vehicles/F2/world 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/vehicles/F2/world 2008-05-21 18:29:36 UTC (rev 773) @@ -32,6 +32,12 @@ <yvector y="0" x="0" z="1"/> <zvector y="1" x="0" z="0"/> </node> + <node name="F2-Rear1"> + <position y="-0.1" x="0" z="0.60902" /> + <xvector y="0" x="-1" z="0"/> + <yvector y="0" x="0" z="1"/> + <zvector y="-1" x="0" z="0"/> + </node> </sector> </world> Modified: trunk/ecksdee/data/vehicles/Speeder/world =================================================================== --- trunk/ecksdee/data/vehicles/Speeder/world 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/vehicles/Speeder/world 2008-05-21 18:29:36 UTC (rev 773) @@ -61,6 +61,12 @@ <yvector y="0" x="0" z="1"/> <zvector y="1" x="0" z="0"/> </node> + <node name="Speeder-Rear1"> + <position y="-0.1" x="0" z="0.60902" /> + <xvector y="0" x="-1" z="0"/> + <yvector y="0" x="0" z="1"/> + <zvector y="-1" x="0" z="0"/> + </node> </sector> </world> Modified: trunk/ecksdee/data/vehicles/ioVehicleBase.py =================================================================== --- trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/vehicles/ioVehicleBase.py 2008-05-21 18:29:36 UTC (rev 773) @@ -206,12 +206,16 @@ # # Player already has that weapon # pass #elif pcprop.object =='booster': - if pcprop.object =='booster': - pcm = celGetMechanicsObject(self.entity).AddForceDuration( \ + if pcprop.object == 'booster': + pcm = celGetMechanicsObject(self.entity).AddForceDuration( csVector3(0, 0, -80), True, csVector3(0,0,0), 0.5) else: + if pcprop.object == 'MINE': + mountpoint = 'Rear1' + else: + mountpoint = 'Front1' pars = parblock({'weapon': pcprop.object, \ - 'mount': 'Front1'}) + 'mount': mountpoint}) res = self.addweapon(self.entity, pars) if res > 0: print '*** Unable to add weapon (' + str(res) + ') ***' Modified: trunk/ecksdee/data/weapons/minelayer/factories/genMine =================================================================== --- trunk/ecksdee/data/weapons/minelayer/factories/genMine 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/weapons/minelayer/factories/genMine 2008-05-21 18:29:36 UTC (rev 773) @@ -2,6 +2,7 @@ <meshfact name='genMine'> <plugin>genmeshfact</plugin> <zuse/> +<nohitbeam /> <params> <material>Color_E16mine.jpg</material> <v x="-0.069308" y="0.0321459" z="-0.0678293" u="0.435718" v="-0.649224" nx="-0" ny="1" nz="0"/> Modified: trunk/ecksdee/data/weapons/minelayer/factories/genMineLayer =================================================================== --- trunk/ecksdee/data/weapons/minelayer/factories/genMineLayer 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/weapons/minelayer/factories/genMineLayer 2008-05-21 18:29:36 UTC (rev 773) @@ -2,6 +2,7 @@ <meshfact name='genMineLayer'> <plugin>genmeshfact</plugin> <zuse/> +<nohitbeam /> <params> <material>Color_006dropper.jpg</material> <v x="-0.0998321" y="-0.0512975" z="-0.0571893" u="0.987185" v="-0.555198" nx="0" ny="-1" nz="0"/> Modified: trunk/ecksdee/data/weapons/minelayer/ioMine.py =================================================================== --- trunk/ecksdee/data/weapons/minelayer/ioMine.py 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/weapons/minelayer/ioMine.py 2008-05-21 18:29:36 UTC (rev 773) @@ -71,4 +71,4 @@ self.entity.PropertyClassList.RemoveAll() def setclient(self, pc, args): - self.client = args[parid('client')] \ No newline at end of file + self.client = args[parid('client')] Modified: trunk/ecksdee/data/weapons/minelayer/ioMineLayer.py =================================================================== --- trunk/ecksdee/data/weapons/minelayer/ioMineLayer.py 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/data/weapons/minelayer/ioMineLayer.py 2008-05-21 18:29:36 UTC (rev 773) @@ -26,9 +26,9 @@ def releaseMine(self): if self.client: - sounds = ['eject1', 'eject2', 'eject3', 'eject4', 'eject5', 'eject6', 'eject7', 'eject8', 'eject9'] + sounds = ['eject1', 'eject2', 'eject3', 'eject4', 'eject5', 'eject6', 'eject7', 'eject8'] sound = ioLoader.playSound(self.entity, random.choice(sounds)) - print 'make sound' + #print 'make sound' mesh = celMesh(self.mine) if mesh.Mesh: movable = mesh.Mesh.GetMovable() Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-05-15 20:01:23 UTC (rev 772) +++ trunk/ecksdee/doc/history.txt 2008-05-21 18:29:36 UTC (rev 773) @@ -3,6 +3,12 @@ The history order is reversed so that new features are at the top. +21-May-2008 + - Vincent made a few changes related to mines: + - Removed reference to inexistent 'eject9' sound. + - Added 'Rear1' weapon mount point to the ships. + - Added <nohitbeam/> to genMine and genMineLayer, to avoid pchover + correcting angular position of the ship due to MINE weapon. 15-May-2008 - Vincent expanded menu level zip file, and converted it to genmeshes. - Vincent added support for an 'Empty' CS node in garage, for initial This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-05-15 20:02:04
|
Revision: 772 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=772&view=rev Author: vknecht Date: 2008-05-15 13:01:23 -0700 (Thu, 15 May 2008) Log Message: ----------- - Vincent added support for an 'Empty' CS node in garage, for initial setting of position and orientation of the ship mesh. Modified Paths: -------------- trunk/ecksdee/data/menus/ioGarage.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/ioGarage.py =================================================================== --- trunk/ecksdee/data/menus/ioGarage.py 2008-05-15 17:11:02 UTC (rev 771) +++ trunk/ecksdee/data/menus/ioGarage.py 2008-05-15 20:01:23 UTC (rev 772) @@ -49,6 +49,7 @@ camera = celDefaultCamera(gameworld) camera.ModeName = 'freelook' camera.SetYawVelocity(0.6) + camera.SetPitch(-0.5) zm = celGetZoneManager(gameworld) #zm.PointCamera('garagevehicle', 'garage') @@ -290,11 +291,29 @@ else: vehiclemesh = celMesh(self.selectedvehicle) sector = Engine.FindSector('Garage') - vehiclemesh.MoveMesh(sector, vehiclemesh.Mesh.GetMovable().GetPosition()) + shipcenter = sector.QueryObject().GetChild('Empty') + centerpos = self.startpos + yvec = csVector3(0, 1, 0) + if shipcenter is None: + #print 'ioGarage: Unable to find Empty node for ship placement !' + vehiclemesh.MoveMesh(sector, vehiclemesh.Mesh.GetMovable().GetPosition()) + else: + #print 'ioGarage: found Empty node for ship placement' + shipcenternode = SCF_QUERY_INTERFACE(shipcenter, iMapNode) + centerpos = shipcenternode.GetPosition() + vehiclemesh.MoveMesh(sector, centerpos) + yvec = shipcenternode.GetYVector() + cam = celGetDefaultCamera(Entities['ioGameWorld']) cam.SetFollowEntity(self.selectedvehicle) vehiclemech = celGetMechanicsObject(self.selectedvehicle) - vehiclemech.Body.SetPosition(self.startpos) + vehiclemech.Body.SetPosition(centerpos) + # Set ship's orientation following the empty/null mesh + quat = csQuaternion(yvec, 1.0) + mat = csMatrix3(quat) + vehiclemech.Body.SetOrientation(mat) + vehiclemech.Body.Update() + #Put the brakes on so the car doesnt roll off. ###wheeled = celWheeled(self.selectedvehicle) ###if wheeled: @@ -305,6 +324,11 @@ if craft: craft.ThrustOff() craft.BrakesOn() + hover = celGetHover(self.selectedvehicle) + if hover: + hover.SetHoverHeight(2.0) + #hover.HoverOff() + #vehiclemech.static = True #Return to caller, and save all the settings def Continue_click(self, pc, args): Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2008-05-15 17:11:02 UTC (rev 771) +++ trunk/ecksdee/doc/history.txt 2008-05-15 20:01:23 UTC (rev 772) @@ -5,6 +5,8 @@ 15-May-2008 - Vincent expanded menu level zip file, and converted it to genmeshes. + - Vincent added support for an 'Empty' CS node in garage, for initial + setting of position and orientation of the ship mesh. 07-May-2008 - Vincent removed a bunch of now unused files. 21-Dec-2007 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vk...@us...> - 2008-05-15 17:11:46
|
Revision: 771 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=771&view=rev Author: vknecht Date: 2008-05-15 10:11:02 -0700 (Thu, 15 May 2008) Log Message: ----------- - Vincent expanded menu level zip file, and converted it to genmeshes. Modified Paths: -------------- trunk/ecksdee/doc/history.txt trunk/ecksdee/mounts.xml Added Paths: ----------- trunk/ecksdee/data/levels/menu/ trunk/ecksdee/data/levels/menu/cache/ trunk/ecksdee/data/levels/menu/cache/genmesh_lm/ trunk/ecksdee/data/levels/menu/cache/genmesh_lm/678cb409454393d3201b28240a51aa63 trunk/ecksdee/data/levels/menu/cache/genmesh_lm/ac2db001d2dd29bb7d20b6b9acf63d92 trunk/ecksdee/data/levels/menu/cache/genmesh_lm/bf8761cdfbcef99b26b9d158d59d6e44 trunk/ecksdee/data/levels/menu/cache/lm_precalc_info trunk/ecksdee/data/levels/menu/entities_world trunk/ecksdee/data/levels/menu/factories/ trunk/ecksdee/data/levels/menu/factories/craft.001 trunk/ecksdee/data/levels/menu/factories/thingCube trunk/ecksdee/data/levels/menu/factories/thingCube.009 trunk/ecksdee/data/levels/menu/factories/thingCube.010 trunk/ecksdee/data/levels/menu/factories/thingCube.011 trunk/ecksdee/data/levels/menu/factories/thingCube.016 trunk/ecksdee/data/levels/menu/factories/thingCube.018 trunk/ecksdee/data/levels/menu/factories/thingCube.019 trunk/ecksdee/data/levels/menu/factories/thingCube.022 trunk/ecksdee/data/levels/menu/factories/thingCube.023 trunk/ecksdee/data/levels/menu/factories/thingCube.027 trunk/ecksdee/data/levels/menu/factories/thingCube.029 trunk/ecksdee/data/levels/menu/factories/thingCube.030 trunk/ecksdee/data/levels/menu/factories/thingCube.031 trunk/ecksdee/data/levels/menu/factories/thingCube.032 trunk/ecksdee/data/levels/menu/factories/thingCube.033 trunk/ecksdee/data/levels/menu/factories/thingCube.038 trunk/ecksdee/data/levels/menu/factories/thingCube.039 trunk/ecksdee/data/levels/menu/factories/thingCube.040 trunk/ecksdee/data/levels/menu/factories/thingMesh.001 trunk/ecksdee/data/levels/menu/factories/thingMesh.002 trunk/ecksdee/data/levels/menu/factories/thingMesh.003 trunk/ecksdee/data/levels/menu/factories/thingMesh.004 trunk/ecksdee/data/levels/menu/factories/thingMesh.005 trunk/ecksdee/data/levels/menu/factories/thingMesh.006 trunk/ecksdee/data/levels/menu/factories/thingMesh.007 trunk/ecksdee/data/levels/menu/factories/thingMesh.008 trunk/ecksdee/data/levels/menu/factories/thingMesh.009 trunk/ecksdee/data/levels/menu/factories/thingMesh.010 trunk/ecksdee/data/levels/menu/factories/thingMesh.011 trunk/ecksdee/data/levels/menu/factories/thingMesh.013 trunk/ecksdee/data/levels/menu/factories/thingMesh.014 trunk/ecksdee/data/levels/menu/factories/thingMesh.015 trunk/ecksdee/data/levels/menu/factories/thingMesh.016 trunk/ecksdee/data/levels/menu/factories/thingMesh.017 trunk/ecksdee/data/levels/menu/factories/thingMesh.018 trunk/ecksdee/data/levels/menu/factories/thingMesh.019 trunk/ecksdee/data/levels/menu/factories/thingMesh.020 trunk/ecksdee/data/levels/menu/factories/thingMesh.021 trunk/ecksdee/data/levels/menu/factories/thingMesh.022 trunk/ecksdee/data/levels/menu/factories/thingMesh.023 trunk/ecksdee/data/levels/menu/factories/thingMesh.024 trunk/ecksdee/data/levels/menu/factories/thingMesh.025 trunk/ecksdee/data/levels/menu/factories/thingMesh.026 trunk/ecksdee/data/levels/menu/factories/thingMesh.027 trunk/ecksdee/data/levels/menu/factories/thingMesh.028 trunk/ecksdee/data/levels/menu/factories/thingMesh.029 trunk/ecksdee/data/levels/menu/factories/thingMesh.030 trunk/ecksdee/data/levels/menu/factories/thingMesh.031 trunk/ecksdee/data/levels/menu/factories/thingMesh.032 trunk/ecksdee/data/levels/menu/factories/thingMesh.033 trunk/ecksdee/data/levels/menu/factories/thingMesh.034 trunk/ecksdee/data/levels/menu/factories/thingMesh.035 trunk/ecksdee/data/levels/menu/factories/thingMesh.036 trunk/ecksdee/data/levels/menu/factories/thingMesh.037 trunk/ecksdee/data/levels/menu/factories/thingMesh.038 trunk/ecksdee/data/levels/menu/factories/thingMesh.039 trunk/ecksdee/data/levels/menu/factories/thingMesh.040 trunk/ecksdee/data/levels/menu/factories/thingMesh.041 trunk/ecksdee/data/levels/menu/factories/thingMesh.042 trunk/ecksdee/data/levels/menu/factories/thingMesh.043 trunk/ecksdee/data/levels/menu/factories/thingMesh.044 trunk/ecksdee/data/levels/menu/factories/thingMesh.045 trunk/ecksdee/data/levels/menu/factories/thingMesh.046 trunk/ecksdee/data/levels/menu/factories/thingMesh.047 trunk/ecksdee/data/levels/menu/factories/thingMesh.048 trunk/ecksdee/data/levels/menu/factories/thingMesh.049 trunk/ecksdee/data/levels/menu/factories/thingMesh.050 trunk/ecksdee/data/levels/menu/factories/thingMesh.051 trunk/ecksdee/data/levels/menu/factories/thingMesh.052 trunk/ecksdee/data/levels/menu/factories/thingMesh.053 trunk/ecksdee/data/levels/menu/factories/thingMesh.054 trunk/ecksdee/data/levels/menu/factories/thingMesh.055 trunk/ecksdee/data/levels/menu/factories/thingMesh.056 trunk/ecksdee/data/levels/menu/factories/thingMesh.057 trunk/ecksdee/data/levels/menu/factories/thingMesh.058 trunk/ecksdee/data/levels/menu/factories/thingMesh.059 trunk/ecksdee/data/levels/menu/factories/thingMesh.060 trunk/ecksdee/data/levels/menu/factories/thingMesh.061 trunk/ecksdee/data/levels/menu/factories/thingMesh.062 trunk/ecksdee/data/levels/menu/factories/thingPlane trunk/ecksdee/data/levels/menu/factories/thingSphere trunk/ecksdee/data/levels/menu/level.xml trunk/ecksdee/data/levels/menu/lightmaps/ trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.001_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.002_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.003_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.004_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.005_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.006_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.007_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.008_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.009_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.010_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.011_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.012_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.013_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.014_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.015_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.016_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.017_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.018_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.019_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.020_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.021_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.022_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.023_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.024_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.025_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.026_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.027_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.028_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.029_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.030_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.031_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.035_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.036_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.044_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.045_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.046_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.047_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.048_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.049_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.050_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.058_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.059_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.065_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.071_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.073_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.074_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.075_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.089_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.090_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube.091_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Cube_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.002_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.007_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.008_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.009_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.010_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.011_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.012_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.013_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.014_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.015_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.016_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.017_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.018_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.019_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.020_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.021_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.022_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.023_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.024_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.025_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.026_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.027_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.028_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.029_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.030_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.031_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.032_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Font.033_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Plane_0.png trunk/ecksdee/data/levels/menu/lightmaps/lightmap_Menu_Sphere_0.png trunk/ecksdee/data/levels/menu/textures/ trunk/ecksdee/data/levels/menu/textures/aqua.png trunk/ecksdee/data/levels/menu/textures/grey.png trunk/ecksdee/data/levels/menu/textures/normalmap.png trunk/ecksdee/data/levels/menu/textures/pink.png trunk/ecksdee/data/levels/menu/world Removed Paths: ------------- trunk/ecksdee/data/levels/menu.zip Added: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/678cb409454393d3201b28240a51aa63 =================================================================== (Binary files differ) Property changes on: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/678cb409454393d3201b28240a51aa63 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/ac2db001d2dd29bb7d20b6b9acf63d92 =================================================================== (Binary files differ) Property changes on: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/ac2db001d2dd29bb7d20b6b9acf63d92 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/bf8761cdfbcef99b26b9d158d59d6e44 =================================================================== (Binary files differ) Property changes on: trunk/ecksdee/data/levels/menu/cache/genmesh_lm/bf8761cdfbcef99b26b9d158d59d6e44 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/ecksdee/data/levels/menu/cache/lm_precalc_info =================================================================== --- trunk/ecksdee/data/levels/menu/cache/lm_precalc_info (rev 0) +++ trunk/ecksdee/data/levels/menu/cache/lm_precalc_info 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,7 @@ +LMVERSION=3 +NORMALLIGHTLEVEL=128 +AMBIENT_RED=10 +AMBIENT_GREEN=10 +AMBIENT_BLUE=10 +COSINUS_FACTOR=0 +LIGHTMAP_SIZE=0 Added: trunk/ecksdee/data/levels/menu/entities_world =================================================================== --- trunk/ecksdee/data/levels/menu/entities_world (rev 0) +++ trunk/ecksdee/data/levels/menu/entities_world 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<world> + <sector name="Menu"> + <addon entityname="camera" plugin="cel.addons.celentity"> +<!-- --> + <propclass name="pcobject.mesh"> + <action name="SetMesh"> + <par string="Cube.091" name="name"/> + </action> + </propclass> +<!-- --> +<!-- --> + <propclass name="pccamera.old"> + <action name="SetCamera"/> + </propclass> +<!-- --> + <propclass name="pcinput.standard"/> + </addon> + </sector> +</world> Added: trunk/ecksdee/data/levels/menu/factories/craft.001 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/craft.001 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/craft.001 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,15 @@ +<library> + <meshfact name="craft.001"> + <plugin>genmeshfact</plugin> + <zuse /> + <params> + <material>cube2_copy10_auv2no</material> + <v x="0.016528" y="-0.670038" z="-0.507858" u="0.000000" v="-1.000000" /> + <v x="-0.003215" y="-0.664995" z="-0.452566" u="0.000000" v="-0.000000" /> + <v x="0.039743" y="-0.681321" z="-0.449038" u="1.000000" v="-0.000000" /> + <t v1="2" v2="1" v3="0" /> + <autonormals /> + <localshadows /> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="0.527363" y="-0.527363" z="-0.527363" u="0.527363" v="-0.527363" /> + <v x="-0.527363" y="-0.527363" z="-0.527363" u="-0.527363" v="-0.527363" /> + <v x="-0.527363" y="-0.527363" z="0.527363" u="-0.527363" v="0.527363" /> + <v x="0.527363" y="-0.527363" z="0.527363" u="0.527363" v="0.527363" /> + <v x="-0.527363" y="0.527363" z="0.527363" u="-0.527363" v="0.527363" /> + <v x="-0.527363" y="0.527363" z="-0.527363" u="-0.527363" v="-0.527363" /> + <v x="0.527362" y="0.527363" z="-0.527363" u="0.527362" v="-0.527363" /> + <v x="0.527363" y="0.527363" z="0.527363" u="0.527363" v="0.527363" /> + <v x="0.527363" y="0.527363" z="0.527363" u="0" v="0" /> + <v x="0.527362" y="0.527363" z="-0.527363" u="1.05473" v="-3.18371e-21" /> + <v x="0.527363" y="-0.527363" z="-0.527363" u="1.05473" v="1.05473" /> + <v x="0.527363" y="-0.527363" z="0.527363" u="-2.53555e-13" v="1.05473" /> + <v x="0.527362" y="0.527363" z="-0.527363" u="0.527362" v="0.527363" /> + <v x="-0.527363" y="0.527363" z="-0.527363" u="-0.527363" v="0.527363" /> + <v x="-0.527363" y="-0.527363" z="-0.527363" u="-0.527363" v="-0.527363" /> + <v x="0.527363" y="-0.527363" z="-0.527363" u="0.527363" v="-0.527363" /> + <v x="-0.527363" y="0.527363" z="-0.527363" u="-0.527363" v="0.527363" /> + <v x="-0.527363" y="0.527363" z="0.527363" u="0.527363" v="0.527363" /> + <v x="-0.527363" y="-0.527363" z="0.527363" u="0.527363" v="-0.527363" /> + <v x="-0.527363" y="-0.527363" z="-0.527363" u="-0.527363" v="-0.527363" /> + <v x="-0.527363" y="0.527363" z="0.527363" u="-0.527363" v="0.527363" /> + <v x="0.527363" y="0.527363" z="0.527363" u="0.527363" v="0.527363" /> + <v x="0.527363" y="-0.527363" z="0.527363" u="0.527363" v="-0.527363" /> + <v x="-0.527363" y="-0.527363" z="0.527363" u="-0.527363" v="-0.527363" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="1" z="1.82472e-08" /> + <n x="-0" y="1" z="1.82472e-08" /> + <n x="-0" y="1" z="1.82472e-08" /> + <n x="-0" y="1" z="1.82472e-08" /> + <n x="-0" y="-1" z="-1.82472e-08" /> + <n x="-0" y="-1" z="-1.82472e-08" /> + <n x="-0" y="-1" z="-1.82472e-08" /> + <n x="-0" y="-1" z="-1.82472e-08" /> + <n x="-1" y="-5.00465e-07" z="4.80352e-07" /> + <n x="-1" y="-5.00465e-07" z="4.80352e-07" /> + <n x="-1" y="-5.00465e-07" z="4.80352e-07" /> + <n x="-1" y="-5.00465e-07" z="4.80352e-07" /> + <n x="-1.82472e-08" y="-0" z="1" /> + <n x="-1.82472e-08" y="-0" z="1" /> + <n x="-1.82472e-08" y="-0" z="1" /> + <n x="-1.82472e-08" y="-0" z="1" /> + <n x="1" y="-1.82472e-08" z="-0" /> + <n x="1" y="-1.82472e-08" z="-0" /> + <n x="1" y="-1.82472e-08" z="-0" /> + <n x="1" y="-1.82472e-08" z="-0" /> + <n x="1.82472e-08" y="-0" z="-1" /> + <n x="1.82472e-08" y="-0" z="-1" /> + <n x="1.82472e-08" y="-0" z="-1" /> + <n x="1.82472e-08" y="-0" z="-1" /> + <submesh name="no_0"> + <material>no</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.625" c1="0.625" /> + <e c0="0.5625" c1="0.625" /> + <e c0="0.5625" c1="0.75" /> + <e c0="0.625" c1="0.75" /> + <e c0="0.5625" c1="0.25" /> + <e c0="0.5625" c1="0.125" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.0625" c1="0.125" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.0625" c1="0.25" /> + <e c0="0.375" c1="0.75" /> + <e c0="0.3125" c1="0.75" /> + <e c0="0.3125" c1="0.625" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.0625" c1="0.75" /> + <e c0="0.125" c1="0.75" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.0625" c1="0.625" /> + <e c0="0.3125" c1="0.25" /> + <e c0="0.375" c1="0.25" /> + <e c0="0.375" c1="0.125" /> + <e c0="0.3125" c1="0.125" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.009 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.009 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.009 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.009"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.003grey.png_0"> + <material>Material.003grey.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.25" c1="0.625" /> + <e c0="0.25" c1="0.75" /> + <e c0="-0" c1="0.625" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.125" c1="0.75" /> + <e c0="-0" c1="0.75" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="-0" /> + <e c0="0.25" c1="-0" /> + <e c0="0.25" c1="0.125" /> + <e c0="0.625" c1="0.375" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.5" c1="0.25" /> + <e c0="0.5" c1="0.375" /> + <e c0="0.25" c1="0.375" /> + <e c0="0.25" c1="0.25" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.125" c1="0.375" /> + <e c0="0.625" c1="-0" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.5" c1="0.125" /> + <e c0="0.5" c1="-0" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.010 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.010 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.010 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.010"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.002pink.png_0"> + <material>Material.002pink.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.25" c1="0.625" /> + <e c0="0.25" c1="0.75" /> + <e c0="-0" c1="0.625" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.125" c1="0.75" /> + <e c0="-0" c1="0.75" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="-0" /> + <e c0="0.25" c1="-0" /> + <e c0="0.25" c1="0.125" /> + <e c0="0.625" c1="0.375" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.5" c1="0.25" /> + <e c0="0.5" c1="0.375" /> + <e c0="0.25" c1="0.375" /> + <e c0="0.25" c1="0.25" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.125" c1="0.375" /> + <e c0="0.625" c1="-0" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.5" c1="0.125" /> + <e c0="0.5" c1="-0" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.011 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.011 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.011 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.011"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.002pink.png_0"> + <material>Material.002pink.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.25" c1="0.625" /> + <e c0="0.25" c1="0.75" /> + <e c0="-0" c1="0.625" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.125" c1="0.75" /> + <e c0="-0" c1="0.75" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="-0" /> + <e c0="0.25" c1="-0" /> + <e c0="0.25" c1="0.125" /> + <e c0="0.625" c1="0.375" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.5" c1="0.25" /> + <e c0="0.5" c1="0.375" /> + <e c0="0.25" c1="0.375" /> + <e c0="0.25" c1="0.25" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.125" c1="0.375" /> + <e c0="0.625" c1="-0" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.5" c1="0.125" /> + <e c0="0.5" c1="-0" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.016 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.016 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.016 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.016"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.003grey.png_0"> + <material>Material.003grey.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.25" c1="0.625" /> + <e c0="0.25" c1="0.75" /> + <e c0="-0" c1="0.625" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.125" c1="0.75" /> + <e c0="-0" c1="0.75" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="-0" /> + <e c0="0.25" c1="-0" /> + <e c0="0.25" c1="0.125" /> + <e c0="0.625" c1="0.375" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.5" c1="0.25" /> + <e c0="0.5" c1="0.375" /> + <e c0="0.25" c1="0.375" /> + <e c0="0.25" c1="0.25" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.125" c1="0.375" /> + <e c0="0.625" c1="-0" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.5" c1="0.125" /> + <e c0="0.5" c1="-0" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.018 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.018 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.018 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.018"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.003grey.png_0"> + <material>Material.003grey.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + <e c0="0.25" c1="0.625" /> + <e c0="0.25" c1="0.75" /> + <e c0="-0" c1="0.625" /> + <e c0="0.125" c1="0.625" /> + <e c0="0.125" c1="0.75" /> + <e c0="-0" c1="0.75" /> + <e c0="0.125" c1="0.125" /> + <e c0="0.125" c1="-0" /> + <e c0="0.25" c1="-0" /> + <e c0="0.25" c1="0.125" /> + <e c0="0.625" c1="0.375" /> + <e c0="0.625" c1="0.25" /> + <e c0="0.5" c1="0.25" /> + <e c0="0.5" c1="0.375" /> + <e c0="0.25" c1="0.375" /> + <e c0="0.25" c1="0.25" /> + <e c0="0.125" c1="0.25" /> + <e c0="0.125" c1="0.375" /> + <e c0="0.625" c1="-0" /> + <e c0="0.625" c1="0.125" /> + <e c0="0.5" c1="0.125" /> + <e c0="0.5" c1="-0" /> + </renderbuffer> + </params> + </meshfact> +</library> Added: trunk/ecksdee/data/levels/menu/factories/thingCube.019 =================================================================== --- trunk/ecksdee/data/levels/menu/factories/thingCube.019 (rev 0) +++ trunk/ecksdee/data/levels/menu/factories/thingCube.019 2008-05-15 17:11:02 UTC (rev 771) @@ -0,0 +1,127 @@ +<library> + <meshfact name="thingCube.019"> + <zuse /> + <plugin>crystalspace.mesh.loader.factory.genmesh</plugin> + <params> + <numvt>24</numvt> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.997214" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="-0.997215" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="-0.997214" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.997215" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.997214" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="-0.997215" v="0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.997214" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.430032" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.430032" v="0.430032" /> + <v x="0.430032" y="0.430032" z="-0.997215" u="0.430032" v="0.430032" /> + <v x="0.430032" y="-0.430032" z="-0.997214" u="0.430032" v="-0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="0.997215" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="0.997215" v="0.430032" /> + <v x="-0.430032" y="0.430032" z="-0.997214" u="-0.997214" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="-0.997214" u="-0.997214" v="-0.430032" /> + <v x="-0.430032" y="0.430032" z="0.997215" u="-0.430032" v="0.430032" /> + <v x="-0.430032" y="-0.430032" z="0.997215" u="-0.430032" v="-0.430032" /> + <v x="0.430032" y="-0.430032" z="0.997215" u="0.430032" v="-0.430032" /> + <v x="0.430032" y="0.430032" z="0.997214" u="0.430032" v="0.430032" /> + <mixmode> + <copy /> + </mixmode> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="-1" z="-4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="-0" y="1" z="4.94842e-09" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="1" y="1.70887e-08" z="-0" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-5.34049e-07" y="-5.54421e-07" z="-1" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="-1" y="1.29367e-08" z="-0" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <n x="5.94048e-07" y="5.54421e-07" z="1" /> + <submesh name="Material.003grey.png_0"> + <material>Material.003grey.png</material> + <indexbuffer components="1" type="uint" indices="yes"> + <e c0="0" /> + <e c0="1" /> + <e c0="2" /> + <e c0="0" /> + <e c0="2" /> + <e c0="3" /> + <e c0="4" /> + <e c0="5" /> + <e c0="6" /> + <e c0="4" /> + <e c0="6" /> + <e c0="7" /> + <e c0="8" /> + <e c0="9" /> + <e c0="10" /> + <e c0="8" /> + <e c0="10" /> + <e c0="11" /> + <e c0="12" /> + <e c0="13" /> + <e c0="14" /> + <e c0="12" /> + <e c0="14" /> + <e c0="15" /> + <e c0="16" /> + <e c0="17" /> + <e c0="18" /> + <e c0="16" /> + <e c0="18" /> + <e c0="19" /> + <e c0="20" /> + <e c0="21" /> + <e c0="22" /> + <e c0="20" /> + <e c0="22" /> + <e c0="23" /> + </indexbuffer> + </submesh> + <renderbuffer name="texture coordinate lightmap" components="2" type="float"> + <e c0="0.375" c1="0.75" /> + <e c0="0.375" c1="0.625" /> + ... [truncated message content] |
From: <vk...@us...> - 2008-05-07 17:29:27
|
Revision: 770 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=770&view=rev Author: vknecht Date: 2008-05-07 10:12:53 -0700 (Wed, 07 May 2008) Log Message: ----------- - Vincent removed a bunch of now unused files. Modified Paths: -------------- trunk/ecksdee/doc/history.txt Removed Paths: ------------- trunk/ecksdee/data/config/ship.cfg trunk/ecksdee/data/entities/GameManager.py trunk/ecksdee/data/entities/Ship.py trunk/ecksdee/data/entities/track1_entities.xml trunk/ecksdee/data/entities/track4_entities.xml trunk/ecksdee/data/menus/gamemenu.debug.xml trunk/ecksdee/data/menus/gamemenu.xml trunk/ecksdee/data/menus/startmenu.xml Deleted: trunk/ecksdee/data/config/ship.cfg =================================================================== --- trunk/ecksdee/data/config/ship.cfg 2008-05-07 16:37:46 UTC (rev 769) +++ trunk/ecksdee/data/config/ship.cfg 2008-05-07 17:12:53 UTC (rev 770) @@ -1,112 +0,0 @@ -;-------------------------- -; This is the global config file for the player' ship. It contains -; camera settings and the model to use. -;-------------------------- - -; The following parameters are for controlling the camera: -Ecksdee.Ship.CameraMode = lara_thirdperson -;Ecksdee.Ship.CameraMode = m64_thirdperson - -Ecksdee.Ship.FirstPersonOffset = 0,1,0 -Ecksdee.Ship.ThirdPersonOffset = 0,1,3 - -Ecksdee.Ship.firstperson.SpringCoef = 10 -Ecksdee.Ship.firstperson.DampeningCoef = 0.1 -Ecksdee.Ship.firstperson.SpringLength = 0.01 -Ecksdee.Ship.firstperson.Pitch = -0.1 - -Ecksdee.Ship.thirdperson.SpringCoef = 3.5 -Ecksdee.Ship.thirdperson.DampeningCoef = 0.25 -Ecksdee.Ship.thirdperson.SpringLength = 0.01 -Ecksdee.Ship.thirdperson.Pitch = -0.1 - -Ecksdee.Ship.m64_thirdperson.SpringCoef = 3.5 -Ecksdee.Ship.m64_thirdperson.DampeningCoef = 0.25 -Ecksdee.Ship.m64_thirdperson.SpringLength = 0.01 -Ecksdee.Ship.m64_thirdperson.MinDistance = 2.0 -Ecksdee.Ship.m64_thirdperson.MaxDistance = 4.0 -Ecksdee.Ship.m64_thirdperson.TurnSpeed = 1.0 -Ecksdee.Ship.m64_thirdperson.Pitch = -0.1 - -Ecksdee.Ship.lara_thirdperson.SpringCoef = 6.5 -Ecksdee.Ship.lara_thirdperson.DampeningCoef = 0.25 -Ecksdee.Ship.lara_thirdperson.SpringLength = 0.001 -Ecksdee.Ship.lara_thirdperson.MinDistance = 2.0 -Ecksdee.Ship.lara_thirdperson.MaxDistance = 4.0 -Ecksdee.Ship.lara_thirdperson.TurnSpeed = 0.3 -Ecksdee.Ship.lara_thirdperson.SwingCoef = 500.0 -Ecksdee.Ship.lara_thirdperson.Pitch = -0.1 - -Ecksdee.Ship.freelook.SpringCoef = 3.5 -Ecksdee.Ship.freelook.DampeningCoef = 0.25 -Ecksdee.Ship.freelook.SpringLength = 0.01 -Ecksdee.Ship.freelook.MinDistance = 2.0 -Ecksdee.Ship.freelook.MaxDistance = 16.0 -Ecksdee.Ship.freelook.Pitch = -0.1 - -; This is the modelfile to use for this player (name of a mesh factory file). -Ecksdee.Ship.ModelPath = /xd/models/ships/F2.zip -;Ecksdee.Ship.ModelFile = craft -Ecksdee.Ship.ModelFile = world -; Name of the factory as specified in the model file. This MUST be equal -; to the name that is given to the 'meshfact' there. -Ecksdee.Ship.ModelName = craft - -; Name of the behaviour to use. This should normally be 'dynactor_behaviour' -; as that is the only behaviour so far that can handle movement of ships. -;Ecksdee.Ship.Behaviour = xd_player -Ecksdee.Ship.Behaviour = dynactor_behaviour - -Ecksdee.Ship.Mass = 1.1 -Ecksdee.Ship.Density = 3.0 - -;Ecksdee.Ship.Hover.PFactor = 20.0 -;Ecksdee.Ship.Hover.IFactor = 0.237 -;Ecksdee.Ship.Hover.DFactor = -137.0 - -Ecksdee.Ship.Hover.PFactor = 8.98 -Ecksdee.Ship.Hover.IFactor = 0.0 -Ecksdee.Ship.Hover.DFactor = 0.0 -Ecksdee.Ship.Hover.Height = 4.0 - -Ecksdee.Ship.AngularCorrection.Strength = 1 -Ecksdee.Ship.AngularCorrection.CutoffHeight = 8.0 -Ecksdee.Ship.AngularCorrection.BeamOffset = 0.5 -Ecksdee.Ship.Turbo.Count = 10 -Ecksdee.Ship.Turbo.Force = 40.0 -Ecksdee.Ship.Turbo.Duration = 0.4 -Ecksdee.Ship.Thruster.Force = 20.0 -Ecksdee.Ship.Thruster.TopSpeed = 40.0 -Ecksdee.Ship.AfterBurner.TopSpeed = 45.0 -Ecksdee.Ship.Turn.Acceleration = 0.3 -Ecksdee.Ship.Turn.MaxSpeed = 1.0 -Ecksdee.Ship.Turn.RedirectVelocityRatio = 0.2 -Ecksdee.Ship.Pitch.Acceleration = 0.4 -Ecksdee.Ship.Pitch.MaxSpeed = 0.5 - -Ecksdee.Ship.HoverEntity = ent_scene - -; Orogor's ship hovering units postions -; rear left -;Ecksdee.Ship.HoverUnit.0 = 1.75,0.3,0.3 -; rear right -;Ecksdee.Ship.HoverUnit.1 = -1.75,0.3,0.3 - -; Orogor's ship thruster units settings -;Ecksdee.Ship.Thruster.Unit.0.Position = 1,0.3,1.5 -;Ecksdee.Ship.Thruster.Unit.1.Position = -1,0.3,1.5 - -Ecksdee.Ship.Energy = 100 - -; how quickly is slows down -; bigger value => increased deceleration -Ecksdee.Ship.Friction = 0.05 -; how heavy and bulky the ship is -; 0.0 means russian -Ecksdee.Ship.Softness = 1.0 -; how high and soft the hovering is -; 0.0 is infinite (not recommened values near 0.0) -Ecksdee.Ship.Hover.Dampening = 1.5 - -Ecksdee.Ship.Sound.Engine.Idle = /xd/sounds/game/engine_idle_l.ogg -Ecksdee.Ship.Sound.Engine.Accel = /xd/sounds/game/engine_accel_l.ogg Deleted: trunk/ecksdee/data/entities/GameManager.py =================================================================== --- trunk/ecksdee/data/entities/GameManager.py 2008-05-07 16:37:46 UTC (rev 769) +++ trunk/ecksdee/data/entities/GameManager.py 2008-05-07 17:12:53 UTC (rev 770) @@ -1,829 +0,0 @@ -from pycel import * -from math import sqrt, floor - -class GameManager: - api_version = 2 - def __init__(self, celEntity): - self.entity = celEntity - self.blxml = BehaviourLayers['blxml'] - self.blpython = BehaviourLayers['blpython'] - self.volume = 1.0 - self.gamemode = '' - self.explosion_num = 0 - # @TODO@ Use config manager for the following settings - self.shipname = 'F2' - self.shipfile = '/xd/models/ships/F2.zip' - self.level = 'Track1' - self.levelfile = '/xd/levels/tracks/Track1.zip' - self.levels = [] - - celInventory(self.entity) # used to store player entities - - # Delay further operations, so that game manager is operational - timer = celAddTimer(self.entity) - timer.WakeUp(100, False) - - # ---------------- propertyclasses messages ------------------- - - def pctimer_wakeup(self, pc, args): - print 'Processing mounts...' - self.ProcessMounts() - print 'Processing preloads...' - self.ProcessPreLoads() - self.CreateList('listofships', '/xd/models/ships/', '.zip') - self.CreateList('listoftracks', '/xd/levels/tracks/', '.zip') - self.CreateList('listofsongs', '/xd/sounds/game/music/', '.ogg') - - low = CreateEntity() - low.SetName('ListOfWeapons') - lowinv = celInventory(low) - laser = CreateEntity() - laser.SetName('laser') - lowinv.AddEntity(laser) - mine = CreateEntity() - mine.SetName('mine') - lowinv.AddEntity(mine) - - physics = CreateEntity() - physics.SetName('ent_physics') - pcmechsys = celAddMechanicsSystem(physics, 'ent_physics') - pcmechsys.EnableQuickStep() - pcmechsys.SetStepTime(Config.GetFloat('Ecksdee.Physics.StepTime', \ - 0.003)) - - cmdline = CS_QUERY_REGISTRY(oreg, iCommandLineParser) - path = cmdline.GetOption('start') - if path != None: - # A level was given on commandline with -start= option - self.gamemode = 'Practice' - pars = parblock({'name': 'CmdlineSelected', 'type': 'tracks', \ - 'path': path}) - self.entity.Behaviour.SendMessage('xd_selectelement', None, pars) - - if self.gamemode != '': - self.entity.Behaviour.SendMessage('xd_startgame', None, None) - else: - self.LoadStartScreen() - - def pcinventory_addchild(self, pc, args): - # A new player was created - pass - - def pcinventory_removechild(self, pc, args): - pass - - # ---------------- game messages ------------------------------ - - def xd_startgame(self, pc, args): - self.StopLevel() - - cfgfile = '/xd/config/ships/' + self.shipname + '.cfg' - # (vk) Still hardcoded player entity name 'hero" - playername = 'hero' - self.CreatePlayer(playername, 'Ship', cfgfile, self.shipname) - - Vfs.Unmount('/xd/track', None) - #print 'GameManager.py: levelfile = ' + self.levelfile - if self.levelfile[:3] == '../' \ - or self.levelfile[:4] != '/xd/' \ - and self.levelfile[:1] == '/': - # we got a real path, mount it - if (Vfs.Mount('/xd/track', self.levelfile)) == False: - print 'GameManager.py: unable to mount /xd/track' - else: - if self.levelfile[:4] != '/xd/': - # we got a real path without leading '../', add '/xd/' - self.levelfile = '/xd/' + self.levelfile - rp = Vfs.GetRealPath(self.levelfile) - if (Vfs.Mount('/xd/track', rp.GetData())) == False: - print 'GameManager.py: unable to mount /xd/track' - - print 'AddLevel MAP ...' - # Now /xd/track/ points to the selected/loaded level - if Vfs.Exists('/xd/track/level.xml') == True: - self.AddLevel("/xd/track/", "level.xml", "ent_level", "Level", \ - CEL_ZONE_LOADALL) - else: - # Try to load a simple CS 'world' file - print '** No \'level.xml\' file found, trying with \'world\'...' - self.AddLevel("/xd/track/", "world", "ent_level", "Level", \ - CEL_ZONE_LOADALL) - - # Create a mechanics object for mesh if a name was given on cmdline - cmdline = CS_QUERY_REGISTRY(oreg, iCommandLineParser) - meshname = cmdline.GetOption('mesh') - if meshname != None: - self.CreateMechanicsEntity('CmdlineMesh', meshname) - - # Check if there's a terrain mesh and attach a mechanics object - mlist = Engine.GetMeshes() - for m in mlist: - om = m.GetMeshObject().GetObjectModel() - terrain = om.GetTerraFormerColldet() - if terrain == None: - continue - else: - meshname = m.QueryObject().GetName() - self.CreateMechanicsEntity('ent_level', meshname) - break - print 'AddLevel MAP done' - #pcz = celGetZoneManager(Entities['ent_level']) - #if pcz != None: - # pcz.ActivateRegion(pcz.FindRegion(pcz.lastregion)) - #else: - # print 'ERROR: ent_level has no pczonemanager!' - - #### @@@try ... - #self.CreatePlayer('Ship', cfgfile, self.shipname) - - #### (vk) Another try... - print 'PrecacheDraw() ...' - Engine.PrecacheDraw() - print 'PrecacheDraw() done' - # Apply settings to player's entity which require the map to be loaded - self.PreparePlayer(playername, 'Ship', cfgfile, 'ent_level') - # Load the HUD files - print 'AddLevel HUD...' - self.AddLevel("/xd/menu/", "gamemenu.xml", "hud_level", "Level", \ - CEL_ZONE_LOADALL) - print 'AddLevel HUD done' - # Clean the rotating ship - speeder = Engine.FindMeshObject('speeder') - if speeder != None: - Engine.RemoveObject(speeder.GetFactory()) - Engine.RemoveObject(speeder) - print 'Speeder cleaning done' - - def xd_exitgame(self, pc, args): - craft = Engine.FindMeshObject('craft').GetFactory() - if craft != None: - Engine.RemoveObject(craft) - #RemoveEntity(Entities['ent_physics']) - self.StopLevel() - self.LoadStartScreen() - - def xd_exit(self, pc, args): - # @FIXME@ player entities maybe should be added to GM inventory - #if Entities['hero'] != None: - # print 'xd_exit: hero entity still exists!' - # RemoveEntity['hero'] - players = celGetInventory(self.entity) - for i in range(players.GetEntityCount()): - player = players.GetEntity(i) - print 'xd_exit: ' + player.GetName() + ' entity still exists!' - players.RemoveEntity(player) - RemoveEntity(player) - sml = Config.GetStr('Ecksdee.StartMenuLevel') - if Entities[sml] != None: - print 'xd_exit: ' + sml + ' still exists' - RemoveEntity[Config.GetStr('Ecksdee.StartMenuLevel')] - q = CS_QUERY_REGISTRY (oreg, iEventQueue) - if q: - q.GetEventOutlet().Broadcast (csevQuit (oreg)) - RemoveEntity(celEntity) - - def xd_loadshipprev(self, pc, args): - filename = args[getid('cel.parameter.filename')] - factname = args[getid('cel.parameter.factoryname')] - reglist = Engine.GetRegions() - iregion = reglist.FindByName('ship_selector_storage') - if iregion != None: - iregion.DeleteAll() - else: - iregion = Engine.CreateRegion('ship_selector_storage') - asdf = reglist.FindByName('menu_level_main') - seclist = Engine.GetSectors() - sector = seclist.FindByName('Scene') - Vfs.Unmount('/xd/ship', None) - rpath = Vfs.GetRealPath(filename) - Vfs.Mount('/xd/ship', rpath.GetData()) - filelist = Vfs.FindFiles('/xd/ship/') - if filelist.GetSize() == 1: - filename = filelist.Get(0) - else: - filename = 'world' - Vfs.ChDir('/xd/ship') - # (vk) mmm, not sure how to use iBase from Python. Force library load. - #if Loader.Load(filename, base, iregion, True) != None: - if Loader.LoadLibraryFile(filename, iregion) == False: - print 'Error loading library ' + filename + ' for ship preview' - imeshfactlist = Engine.GetMeshFactories() - craft = imeshfactlist.FindByName(factname) - if craft == None: - print 'Error retrieving ' + factname + ' factory for ship model' - sprite = Engine.CreateMeshWrapper( \ - craft, 'speeder', sector, csVector3(0, 0, 0)) - iregion.Add(sprite.QueryObject()) - nullmesh = Engine.FindMeshObject('Null') - if nullmesh == None: - print 'Unable to find Null meshwrapper for ship sprite parenting' - sprite.QuerySceneNode().SetParent(nullmesh.QuerySceneNode()) - - def xd_areadamage(self, pc, args): - amount = args[getid('cel.parameter.amount')] - pos = args[getid('cel.parameter.position')] - s = args[getid('cel.parameter.sector')] - # (vk) type is not used, must be a reminiscence from CC - type = args[getid('cel.parameter.type')] - if type == None: - type = 'xd_damage_force' - sector = Engine.FindSector(s) - if sector == None: - print 'GameManager.py: xd_areadamage: can\'t find sector ' + s - maxradius = sqrt(amount / 0.5) # MIN_FORCE was 0.5 - list = PhysicalLayer.FindNearbyEntities(sector, pos, maxradius, True) - for item in list: - behaviour = item.GetBehaviour() - if behaviour != None: - pcmesh = celGetMesh(item) - sqdist = csSquaredDist.PointPoint(pcmesh.fullposition, pos) - if sqdist < 1: - sqdist = 1 - newamount = int(amount / sqdist) - pars = parblock({'amount': newamount}) - behaviour.SendMessage('pcdamage_hurt', None, pars) - - def xd_explosion(self, pc, args): - amount = args[getid('cel.parameter.amount')] - pos = args[getid('cel.parameter.position')] - exptpl = args[getid('cel.parameter.templatename')] - s = celGetMesh(Entities[args[getid('cel.parameter.source')]]).sector - tpl = EntityTemplates[exptpl] - if tpl == None: - print '*** argh, can\'t find template for ' + exptpl - self.explosion_num += 1 - name = 'explosion' + str(self.explosion_num) - #expl = CreateEntity(tpl, name, 'amount', str(amount), 'position', \ - # str(pos), 'sector', s, 0) - expl = CreateEntity(tpl, name, 0) - # (vk) shouldn't need that !? check comment in tpl_explosion.xml - pars = parblock({'amount': amount, 'position': pos, 'sector': s}) - expl.Behaviour.SendMessage('realinit', None, pars) - - def xd_selectelement(self, pc, args): - type = args[getid('cel.parameter.type')] - path = args[getid('cel.parameter.path')] - name = args[getid('cel.parameter.name')] - #print 'GameManager.py: select ' + type + ' ' + name + ' (' + path + ')' - if type == 'tracks': - self.level = name - self.levelfile = path - elif type == 'ship': - self.shipname = name - self.shipfile = path - else: - print 'GameManager.py: unknown element type selected' - - def xd_pause(self, pc, args): - sr = CS_QUERY_REGISTRY(oreg,iSndSysRenderer) - if sr: - self.volume = sr.GetVolume() - sr.SetVolume(0.0) - Clock.Suspend() - - def xd_unpause(self, pc, args): - sr = CS_QUERY_REGISTRY(oreg,iSndSysRenderer) - if sr: - sr.SetVolume(self.volume) - Clock.Resume() - - def xd_formattime(self, pc, args): - msec = args[getid('cel.parameter.milliseconds')] - tenths = int(floor(msec / 100)) - sec = int(floor(tenths / 10)) - min = int(floor(sec / 60)) - string = '%(min)2d:%(sec)02d.%(tenths)1d' % \ - {'min': min, 'sec': sec - min * 60, 'tenths': tenths - sec * 10} - return string - - def xd_putrecord(self, pc, args): - recordtype = args[getid('cel.parameter.recordtype')] - gametype = args[getid('cel.parameter.gametype')] - timeval = args[getid('cel.parameter.timevalue')] - playername = args[getid('cel.parameter.playername')] - recordfile = csConfigFile('/xd/config/records.cfg', Vfs) - returnvalue = 0 - key = gametype +'.'+ self.level +'.'+ recordtype +'.'+ str(timeval) - if recordfile.SubsectionExists(key) == False: - # (vk) was using SetTuple(), which isn't functional in Python - recordfile.SetStr(key, playername + ', ' + self.shipname) - recordfile.Save() - else: - print '*** argh, this record line already exists:' - print key - return - # OK, we saved the performance. Now reiterate over all given - # track & gametype keys, and limit number to 5 records. - subsection = gametype + '.' + self.level + '.' + recordtype - records = self.GetSortedRecords(subsection) - for i in range(len(records)): - if i > 4: - badkey = subsection + '.' + str(records[i]) - #print 'suppressing following record key:' - #print badkey - recordfile.DeleteKey(badkey) - recordfile.Save() - else: - if timeval == records[i]: - returnvalue = i + 1 - recordfile.Save() - # return the rank if in the first 5, or 0 - return returnvalue - - def xd_getrecords(self, pc, args): - recordtype = args[getid('cel.parameter.recordtype')] - gametype = args[getid('cel.parameter.gametype')] - trackname = args[getid('cel.parameter.trackname')] - pcprop = celProperties(Entities[trackname]) - propcount = pcprop.GetPropertyCount() - recordfile = csConfigFile('/xd/config/records.cfg', Vfs) - key = gametype + '.' + trackname + '.' + recordtype + '.' - records = self.GetSortedRecords(key) - for i in range(len(records)): - entry = key + str(records[i]) - playerandship = recordfile.GetStr(entry) - player, ship = playerandship.split(', ') - propname = gametype + '_' + recordtype + '_' + str(i) - propindex = pcprop.GetPropertyIndex(propname) # @FIXME@ broken - if propindex != None and propindex < propcount: # workaround - pcprop.ClearProperty(propindex) - pars = parblock({'milliseconds': records[i]}) - value = player + ',' + ship + ';' + self.xd_formattime(self, pars) - pcprop.SetProperty(propname, value) - return len(records) - - def xd_setmode(self, pc, args): - mode = args[getid('cel.parameter.mode')] - self.gamemode = mode - - def xd_getmode(self, pc, args): - return self.gamemode - - def xd_setselectedship(self, pc, args): - name = args[getid('cel.parameter.name')] - self.shipname = name - - def xd_getselectedship(self, pc, args): - return self.shipname - - def xd_setselectedlevel(self, pc, args): - name = args[getid('cel.parameter.name')] - self.level = name - - def xd_getselectedlevel(self, pc, args): - return self.level - - def xd_findfirstCP(self, pc, args): - # To avoid cycling over all entities, assume 1st CP is near a campos - camposlst = Engine.GetCameraPositions() - for i in range(camposlst.GetCount()): - campos = camposlst[i] - sector = Engine.FindSector(campos.GetSector()) - pos = campos.GetPosition() - elist = PhysicalLayer.FindNearbyEntities(sector, pos, 25.0) - for entity in elist: - pcchar = celGetCharacteristics(entity) - if pcchar == None: - continue - if pcchar.HasCharacteristic('Checkpoint'): - if pcchar.GetCharacteristic('Checkpoint') == 1: - # We found it, return its name - return entity.GetName() - # Found none, return empty name - return '' - - #--------------- helpers ---------------------- - - def ProcessMounts(self): - it = Config.Enumerate('Ecksdee.Mount.') - if it != None: - while it.Next() != False: - key = '/' + it.GetKey(True) - Vfs.Mount(key, it.GetStr()) - else: - print 'mmm, didn\'t find any Ecksdee.Mount. key' - - def ProcessPreLoads(self): - it = Config.Enumerate('Ecksdee.Preload.') - if it != None: - preload_region = Engine.CreateRegion('xd_preloads') - while it.Next() != False: - key = 'Ecksdee.PreloadPath.' + it.GetKey(True) - path = Config.GetStr(key) - if path != '': - Vfs.PushDir(path) - if Loader.LoadLibraryFile(it.GetStr(), preload_region) == False: - print 'Error with preload ' + it.GetStr() + ' at ' + path - if path != None: - Vfs.PopDir() - Engine.PrecacheDraw(preload_region) - - def GetSortedRecords(self, subsection): - records = csConfigFile('/xd/config/records.cfg', Vfs) - it = records.Enumerate(subsection) - length = 0 - # Just get the number of records for given mode, track and type - while it.Next() == True: - length += 1 - it.Rewind() - sortedvalues = [] - # For all keys, get the leaf (the time) as an integer - while it.Next() == True: - key = it.GetKey() - leaf = key[key.rfind('.') + 1:] - value = int(leaf) - # And push it to the list - sortedvalues.append(value) - sortedvalues.sort() # Sort the list ! - return sortedvalues - - def CreateList(self, name, vfspath, extension): - list = CreateEntity() - list.SetName(name) - pcinv = celAddInventory(list) - filelist = Vfs.FindFiles(vfspath) - songnum = 0 - for i in range(filelist.GetSize()): - filename = filelist.Get(i) - # (vk) relies on 4 chars extension, like '.zip' - if filename[-4:] == extension: - element = CreateEntity() - # get pos of char after last slash - firstCharPos = filename.rfind('/') + 1 - sub = filename[firstCharPos:-4] - element.SetName(sub) - pcprop = celAddProperties(element) - pcprop.SetProperty('path', filename) - pcinv.AddEntity(element) - if extension == '.ogg': - songname = 'game_bg_music' + str(songnum) - pcprop.SetProperty('name', songname) - Loader.LoadSoundWrapper(songname, filename, \ - CS_SND3D_DISABLE) - songnum += 1 - else: - pcprop.SetProperty('name', sub) - if name == 'listoftracks': - pars = parblock({'gametype': 'Racing', \ - 'recordtype': 'Race', 'trackname': sub}) - self.entity.Behaviour.SendMessage('xd_getrecords', \ - None, pars) - pars = parblock({'gametype': 'Racing', \ - 'recordtype': 'Lap', 'trackname': sub}) - self.entity.Behaviour.SendMessage('xd_getrecords', \ - None, pars) - # @TODO@ mount the file and get the description - #Vfs.Unmount('/xd/tmp') - #print 'unmounted /xd/tmp' - #rpath = Vfs.GetRealPath(filename) - #... - pcprop.SetProperty('description', 'No description for now') - #Vfs.Unmount('/xd/tmp') - - def AddLevel(self, dir, file, name, behaviour, mode): - level = CreateEntity(name, self.blpython, 'Level') - if name == 'ent_level': - celAddInventory(level) # @TODO@ check if this is really needed - self.levels.append(level) - pczone = celZoneManager(level) - pczone.SetLoadingMode(mode) - Vfs.ChDirAuto(dir) - pczone.Load(dir, file) - - def StopLevel(self): - #hero = Entities['hero'] - #if hero != None: - # RemoveEntity(hero) - # hero = None - players = celGetInventory(self.entity) - for i in range(players.GetEntityCount()): - player = players.GetEntity(i) - players.RemoveEntity(player) - RemoveEntity(player) - for item in self.levels: - RemoveEntity(item) - self.levels = [] - - def LoadStartScreen(self): - scene = Config.GetStr('Ecksdee.StartMenu.Scene', '/xd/levels/menu.zip') - scenepath = Vfs.GetRealPath(scene) - Vfs.Mount('/xd/menu_scene/', scenepath.GetData()) - self.AddLevel('/xd/menu_scene/', 'level.xml', 'ent_menulvl', 'Level', \ - CEL_ZONE_LOADALL) - Vfs.Unmount('/xd/menu_scene', scenepath.GetData()) - level = Config.GetStr('Ecksdee.StartMenuLevel') - levelfile = Config.GetStr('Ecksdee.StartMenuLevelFile') - self.AddLevel(level, levelfile, 'menu_level', 'Level', CEL_ZONE_LOADALL) - shipsel = CreateEntity('ShipSelector', self.blpython, 'ShipSelector') - - def CreatePlayer(self, playername, playertype, configname, shipname): - #cfgacc = csConfigAccess() - #cfgacc.AddConfig(oreg, '/xd/config/ship.cfg') - #cfgacc.AddConfig(oreg, configname) - Config.AddDomain('/xd/config/ship.cfg', Vfs, -100) - Config.AddDomain(configname, Vfs, -50) - # Load the pccommandinput bindings from input.cfg, and activate input - Config.AddDomain('/xd/config/input.cfg', Vfs, 0) - - cfgkey = 'Ecksdee.' + playertype + '.' - mf = Engine.FindMeshFactory('craft') - if mf != None: - Engine.RemoveObject(mf) - Vfs.Unmount('/xd/ship', None) - rp = Vfs.GetRealPath (self.shipfile) - Vfs.Mount('/xd/ship', rp.GetData()) - Vfs.ChDir('/xd/ship') - Loader.LoadLibraryFile('/xd/ship/world') - mf = Engine.FindMeshFactory('craft') - if mf == None: - print 'Couldn\'t find craft factory at /xd/ship/world' - bbox = mf.GetMeshObjectFactory().GetObjectModel().GetObjectBoundingBox() - - ## player = CreateEntity(playername, self.blcpp, Config.GetStr( \ - ## cfgkey + 'Behaviour'), 'dynactor_behaviour') - #player = CreateEntity(playername, self.blpython, 'Ship') - tpl = EntityTemplates['tpl_ship'] - if tpl == None: - print '*** argh, can\'t find tpl_ship' - #player = CreateEntity(tpl, playername, 'requiredlaps', '2', 0) - tplpars = celEntityTemplateParams() - # @FIXME@ Passing quest params doesn't work like that... - tplpars.Put('requiredlaps', '2') - #player = CreateEntity(tpl, playername, tplpars) - - tplpars.Put('friction', str(Config.GetFloat(cfgkey + 'Friction', 0.05))) - tplpars.Put('softness', str(Config.GetFloat(cfgkey + 'Softness', 1.0))) - tplpars.Put('mass', str (Config.GetFloat(cfgkey + 'Mass', 1.0))) - tplpars.Put('density', str(Config.GetFloat(cfgkey + 'Density', 3.0))) - tplpars.Put('elasticity', str(Config.GetFloat(cfgkey + 'Elasticity', \ - 3.0))) - tplpars.Put('bbox', str(bbox)) - - cp1 = self.entity.Behaviour.SendMessage('xd_findfirstCP', None, None) - if cp1 != '': - pcm = celGetMesh(Entities[cp1]) - tplpars.Put('sector', pcm.sector) - pos = pcm.fullposition - posstr = str(pos.x) + ',' + str(pos.y) + ',' + str(pos.z) - print 'setting pos = ' + posstr - tplpars.Put('position', posstr) - tplpars.Put('rotation', str(pcm.rotation)) - - #energy = Config.GetFloat(cfgkey + 'Energy', 100.0) - #tplpars.PutUnique('energy', str(energy)) - #turbo = Config.GetInt(cfgkey + 'Turbo.Count', 10) - #tplpars.PutUnique('turbo', str(turbo)) - #tplpars.PutUnique('turbo_force', str(Config.GetFloat( \ - # cfgkey + 'Turbo.Force', 100.0))) - #tplpars.PutUnique('turbo_time', str(Config.GetFloat( \ - # cfgkey + 'Turbo.Duration', 0.2))) - #tplpars.PutUnique('penalty_collision', str(Config.GetFloat( \ - # cfgkey + 'Penalty.Collision', 0.04))) - #tplpars.PutUnique('penalty_afterburner', str(Config.GetFloat( \ - # cfgkey + 'Penalty.Afterburner', 0.06))) - #tplpars.PutUnique('clipping_volume', str(Config.GetFloat( \ - # cfgkey + 'EngineSound.ClippingVolume', 1.0))) - #tplpars.PutUnique('clipping_pitch', str(Config.GetInt( \ - # cfgkey + 'EngineSound.ClippingPitch', 110))) - - #tplpars.PutUnique('trackname', self.level) - ## (vk) This seems to have broken between 17 and 21 january - ##osuname = csGetUsername().GetData() - ##username = Config.GetStr('Ecksdee.Player.Name',osuname.capitalize()) - #username = Config.GetStr('Ecksdee.Player.Name', 'Anonymous') - #tplpars.PutUnique('playername', username) - #tplpars.PutUnique('shipname', shipname) - - player = CreateEntity(tpl, playername, tplpars) - celGetInventory(self.entity).AddEntity(player) - - pcprop = celGetProperties(player) - # be careful wrt. property types, ie. int/float, otherwise it'll be 0 ! - energy = Config.GetFloat(cfgkey + 'Energy', 100.0) - pcprop.energy = energy - pcprop.totalenergy = energy - turbo = Config.GetInt(cfgkey + 'Turbo.Count', 10) - pcprop.turbo = turbo - pcprop.totalturbo = turbo - pcprop.turbo_force = Config.GetFloat(cfgkey + 'Turbo.Force', 100.0) - pcprop.turbo_time = Config.GetFloat(cfgkey + 'Turbo.Duration', 0.2) - pcprop.penalty_collision = Config.GetFloat( \ - cfgkey + 'Penalty.Collision', 0.04) - pcprop.penalty_afterburner = Config.GetFloat( \ - cfgkey + 'Penalty.Afterburner', 0.06) - pcprop.clipping_volume = Config.GetFloat( \ - cfgkey + 'EngineSound.ClippingVolume', 1.0) - pcprop.clipping_pitch = Config.GetInt( \ - cfgkey + 'EngineSound.ClippingPitch', 110) - - pcprop.trackname = self.level - ## (vk) This seems to have broken between 17 and 21 january - ##osuname = csGetUsername().GetData() - ##username = Config.GetStr('Ecksdee.Player.Name',osuname.capitalize()) - username = Config.GetStr('Ecksdee.Player.Name', 'Anonymous') - pcprop.playername = username - pcprop.shipname = shipname - #pcprop.SetProperty('lastcheckpoint', '') # used for teleporting - - Config.RemoveDomain('/xd/config/ship.cfg') - Config.RemoveDomain(configname) - Config.FlushRemoved() - - def PreparePlayer(self, playername, playertype, configname, levelname): - print 'PreparePlayer()' - shipinv = celGetInventory(Entities['listofships']) - for j in range(shipinv.GetEntityCount()): - ent = shipinv.GetEntity(j).GetName() - if ent != self.shipname: - Config.RemoveDomain( \ - Config.LookupDomain('/xd/config/ships/' + ent + '.cfg')) - Config.FlushRemoved() - Config.AddDomain('/xd/config/ship.cfg', Vfs, -100) - Config.AddDomain(configname, Vfs, -50) - cfgkey = 'Ecksdee.' + playertype + '.' - player = Entities[playername] - level = Entities[levelname] - pczone = celGetZoneManager(level) - # Set up the different camera modes from config file values - self.PreparePlayerCamera(playername, levelname, cfgkey) - - pcmesh = celGetMesh(player) - Vfs.ChDir('/xd/ship') - pcmesh.LoadMesh('craft', 'world') - pczone.PointMesh(playername, pczone.lastregion, pczone.laststart) - pcmech = celGetMechanicsObject(player) - cp1name = self.entity.Behaviour.SendMessage('xd_findfirstCP',None,None) - if cp1name != '': - cp1 = Entities[cp1name] - pcm = celGetMesh(cp1) - pos = pcm.fullposition - pos.y += 4 # 4 = hover height - #pcmesh.MoveMesh(Engine.FindSector(pcm.sector), pos) - pcmech.GetBody().MakeDynamic() - pcmech.GetBody().SetPosition(pos) - rotmat = csMatrix3(csYRotMatrix3(-pcm.rotation.y)) - pcmech.GetBody().SetOrientation(rotmat) - pcmech.GetBody().MakeStatic() - else: - if pczone.laststart != None: - campos = Engine.FindCameraPosition(pczone.laststart) - else: - print 'Searching for \'camera\' start position...' - campos = Engine.FindCameraPosition('camera') - if campos != None: - fw = campos.GetForwardVector() - up = campos.GetUpwardVector() - pcmesh.Mesh.GetMovable().GetTransform().LookAt(fw, up) - else: - print 'Found no campos !!!' - - bbox = pcmesh.GetMesh().GetMeshObject().GetObjectModel().\ - GetObjectBoundingBox() - pcmech.SetFriction(Config.GetFloat(cfgkey + 'Friction', 0.05)) - pcmech.AttachColliderBox(bbox.GetSize(), csOrthoTransform()) - pcmech.SetSoftness(Config.GetFloat(cfgkey + 'Softness', 1.0)) - pcmech.SetMass(Config.GetFloat(cfgkey + 'Mass', 1.0)) - pcmech.SetDensity(Config.GetFloat(cfgkey + 'Density', 3.0)) - # @FIXME@ Setting static with property forbids making dynamic later! - #pcmech.static = True - pcmech.GetBody().MakeStatic() - - self.PreparePlayerHoverCraft(player, cfgkey) - - Config.RemoveDomain('/xd/config/ship.cfg') - Config.RemoveDomain(configname) - Config.FlushRemoved() - - def PreparePlayerCamera(self, playername, levelname, cfgkey): - print 'PreparePlayerCamera()' - player = Entities[playername] - level = Entities[levelname] - pccam = celGetDefaultCamera(player) - pczone = celGetZoneManager(level) - pccam.SetZoneManager(pczone, True, pczone.lastregion, pczone.laststart) - - pccam.SetModeName('firstperson') - pccam.SetSpringParameters ( \ - Config.GetFloat(cfgkey + 'firstperson.SpringCoef', 10.0), \ - Config.GetFloat(cfgkey + 'firstperson.DampeningCoef', 0.1), \ - Config.GetFloat(cfgkey + 'firstperson.SpringLength', 0.01)) - pccam.SetPitch(Config.GetFloat(cfgkey + 'firstperson.Pitch', -0.1)) - - pccam.SetModeName('thirdperson') - pccam.SetSpringParameters( \ - Config.GetFloat(cfgkey + 'thirdperson.SpringCoef', 3.5), \ - Config.GetFloat(cfgkey + 'thirdperson.DampeningCoef', 0.25), \ - Config.GetFloat(cfgkey + 'thirdperson.SpringLength', 0.01)) - pccam.SetPitch(Config.GetFloat (cfgkey + 'thirdperson.Pitch', -0.1)) - - pccam.SetModeName('m64_thirdperson') - pccam.SetSpringParameters( - Config.GetFloat(cfgkey + 'm64_thirdperson.SpringCoef', 3.5), \ - Config.GetFloat(cfgkey + 'm64_thirdperson.DampeningCoef', 0.25), \ - Config.GetFloat(cfgkey + 'm64_thirdperson.SpringLength', 0.01)) - pccam.SetMinMaxCameraDistance( \ - Config.GetFloat(cfgkey + 'm64_thirdperson.MinDistance', 2.0), \ - Config.GetFloat(cfgkey + 'm64_thirdperson.MaxDistance', 6.0)) - pccam.SetTurnSpeed( - Config.GetFloat(cfgkey + 'm64_thirdperson.TurnSpeed', 1.0)) - pccam.SetPitch(Config.GetFloat(cfgkey + 'm64_thirdperson.Pitch', -0.1)) - - pccam.SetModeName('freelook') - pccam.SetSpringParameters( - Config.GetFloat(cfgkey + 'freelook.SpringCoef', 3.5), \ - Config.GetFloat(cfgkey + 'freelook.DampeningCoef', 0.25), \ - Config.GetFloat(cfgkey + 'freelook.SpringLength', 0.01)) - pccam.SetMinMaxCameraDistance( \ - Config.GetFloat(cfgkey + 'freelook.MinDistance', 2.0), \ - Config.GetFloat(cfgkey + 'freelook.MaxDistance', 16.0)) - pccam.SetPitch(Config.GetFloat(cfgkey + 'freelook.Pitch', -0.1)) - pccam.SetFirstPersonOffset( \ - self.GetConfigVector (cfgkey + 'FirstPersonOffset', '0,1,0')) - pccam.SetThirdPersonOffset ( \ - self.GetConfigVector (cfgkey + 'ThirdPersonOffset', '0,1,3')) - - # 'lara_thirdperson' is the default camera mode - pccam.SetModeName('lara_thirdperson') - pccam.SetSpringParameters ( \ - Config.GetFloat(cfgkey + 'lara_thirdperson.SpringCoef', 3.5), \ - Config.GetFloat(cfgkey + 'lara_thirdperson.DampeningCoef', 0.25), \ - Config.GetFloat(cfgkey + 'lara_thirdperson.SpringLength', 0.01)) - pccam.SetMinMaxCameraDistance ( \ - Config.GetFloat(cfgkey + 'lara_thirdperson.MinDistance', 2.0), \ - Config.GetFloat(cfgkey + 'lara_thirdperson.MaxDistance', 6.0)) - pccam.SetTurnSpeed ( \ - Config.GetFloat(cfgkey + 'lara_thirdperson.TurnSpeed', 1.0)) - pccam.SetSwingCoef ( \ - Config.GetFloat(cfgkey + 'lara_thirdperson.SwingCoef', 0.7)) - pccam.SetPitch ( \ - Config.GetFloat(cfgkey + 'lara_thirdperson.Pitch', -0.1)) - print 'PreparePlayerCamera() done' - - def PreparePlayerHoverCraft(self, player, cfgkey): - print 'PreparePlayerHoverCraft()' - pchover = celGetHover(player) - pchover.SetAngularCorrectionStrength ( \ - Config.GetFloat (cfgkey + 'AngularCorrection.Strength', 1.0)) - pchover.SetAngularCutoffHeight ( \ - Config.GetFloat (cfgkey + 'AngularCorrection.CutoffHeight', 8.0)) - pchover.SetAngularBeamOffset ( \ - Config.GetFloat (cfgkey + 'AngularCorrection.BeamOffset', 0.5)) - pchover.SetFactors ( \ - Config.GetFloat (cfgkey + 'Hover.PFactor', 20.0), \ - Config.GetFloat (cfgkey + 'Hover.IFactor', 0.237), \ - Config.GetFloat (cfgkey + 'Hover.DFactor', -137.0)) - pchover.SetHoverHeight (Config.GetFloat (cfgkey + 'Hover.Height', 4.0)) - - pccraft = celGetCraftController(player) - pccraft.SetAccTurn (Config.GetFloat (cfgkey + 'Turn.Acceleration', 0.4)) - pccraft.SetMaxTurn (Config.GetFloat (cfgkey + 'Turn.MaxSpeed', 1.5)) - pccraft.SetRoll (Config.GetFloat (cfgkey + 'Turn.Roll', 0.8)) - pccraft.SetAccPitch ( \ - Config.GetFloat (cfgkey + 'Pitch.Acceleration', 0.4)) - pccraft.SetMaxPitch (Config.GetFloat (cfgkey + 'Pitch.MaxSpeed', 0.5)) - pccraft.SetThrustForce ( \ - Config.GetFloat (cfgkey + 'Thruster.Force', 10.0)) - pccraft.SetTopSpeed ( \ - Config.GetFloat (cfgkey + 'Thruster.TopSpeed', 20.0)) - pccraft.SetAfterBurnerTopSpeed ( \ - Config.GetFloat (cfgkey + 'AfterBurner.TopSpeed', 40.0)) - pccraft.SetRedirectVelocityRatio ( \ - Config.GetFloat (cfgkey + 'Turn.RedirectVelocityRatio', 0.2)) - pccraft.SetDecelerationRate ( \ - Config.GetFloat (cfgkey + 'Slow.DecelerationRate', 0.01)) - pccraft.SetBrakingSpeed ( \ - Config.GetFloat (cfgkey + 'Slow.BrakeSpeed', 0.1)) - print 'PreparePlayerHoverCraft() done' - - def GetConfigVector(self, cfgkey, default): - vecstr = Config.GetStr(cfgkey, default) - x, y, z = vecstr.split(',') - return csVector3(float(x), float(y), float(z)) - - def CreateMechanicsEntity(self, entityname, meshname): - print 'Creating entity '+ entityname + ' for mesh ' + meshname - scene = CreateEntity() - scene.SetName(entityname) - mesh = Engine.FindMeshObject(meshname) - if mesh != None: - pcmesh = celMesh(scene) - pcmesh.SetMesh(mesh) - pcmech = celMechanicsObject(scene) - pcmech.SetMechanicsSystem(celGetMechanicsSystem( \ - Entities['ent_physics'])) - pcmech.SetFriction(10.0) - pcmech.SetMass(99999999999999999.99) - pcmech.SetElasticity(0.8) - pcmech.SetDensity(1.0) - pcmech.SetSoftness(0.0001) - pcmech.SetMesh(pcmesh) - pcmech.AttachColliderMesh() - pcmech.Body.MakeStatic() - else: - print 'Can\'t find \'' + meshname + '\' mesh for ' + entityname - - #---------------------------------------------- - - def destruct(self, pc, args): - self.entity.PropertyClassList.RemoveAll() - Deleted: trunk/ecksdee/data/entities/Ship.py =================================================================== --- trunk/ecksdee/data/entities/Ship.py 2008-05-07 16:37:46 UTC (rev 769) +++ trunk/ecksdee/data/entities/Ship.py 2008-05-07 17:12:53 UTC (rev 770) @@ -1,878 +0,0 @@ -from pycel import * -from math import floor - -class Ship: - api_version = 2 - def __init__(self, celEntity): - self.entity = celEntity - self.name = self.entity.GetName() - self.exploding = False - self.exploded = False - - self.do_drawbars = False - self.do_forward = False - self.do_afterburner = False - self.blink_on = False - self.blink_count = 0 - self.lasernumber = 0 - self.selectedweapon = 0 - self.racestarttime = 0 - - # Keep names of mines, to destruct them after race if not exploded - self.mines = [] - - self.emitters = [] - self.thrusters = [] - self.shaderVars = [] - - timer = celTimer(self.entity, 'init') - timer.WakeUp(1, False) # 50 - - # ---------------- propertyclasses messages ------------------------------- - - def pcinventory_added(self, pc, args): - # The entity was added to GameManager's inventory - pass - - def pcinventory_removed(self, pc, args): - pass - - def pctimer_wakeup(self, pc, args): - pcp = celGetProperties(self.entity) - self.clipping_volume = pcp.clipping_volume - self.clipping_pitch = pcp.clipping_pitch - self.snd_accel = celGetSoundSource(self.entity, 'accel') - self.snd_idle = celGetSoundSource(self.entity, 'idle') - self.AddThrusters() - timerframe = celTimer(self.entity) - timerframe.WakeUpFrame(CEL_EVENT_PRE) - - def pctimer_wakeupframe(self, pc, args): - pccraft = celGetCraftController(self.entity) - pcmechobj = celGetMechanicsObject(self.entity) - pcprop = celGetProperties(self.entity) - racestate = celGetQuest(self.entity).GetQuest().GetCurrentState() - if self.exploding == True: - pccraft.BrakesOn() - hud = Entities['hud_racestate'] - if hud != None: - # Stops countdown refresh - hudprop = celGetProperties(hud) - hudprop.SetProperty('shipdead', True) - if racestate == 'started': - # Set race as finished, stops incrementation of totalracetime - self.entity.Behaviour.SendMessage('xd_racefinished', None, None) - if self.exploded == False: - # @FIXME@ Add another condition to not wait a lot in some cases - if (pcmechobj.LinearVelocity.SquaredNorm() < 0.01): - if Entities['die_menu'] == None: - if hud != None: - hud.Behaviour.SendMessage('showdie', None, None) - pos = celGetMesh(self.entity).fullposition - # Create the explosion entity - pars = parblock({'amount': 0.0, 'source': self.name, \ - 'position': celGetMesh(self.entity).position, \ - 'templatename': 'tpl_explosion'}) - Entities['ent_gamemanager'].Behaviour.SendMessage( \ - 'xd_explosion', None, pars) - - print 'Trying to call Hide()...' - celGetMesh(self.entity).Hide() - ##pars2 = parblock({'visible': False}) - #pars2 = parblock(['cel.paramater.visible']) - #pars2['visible'] = False - #ret = celData() - #print 'Trying to call SetVisible action...' - #celGetMesh(self.entity).PerformAction(actid('SetVisible'),\ - # pars2, ret) - #celGetMesh(self.entity).PerformActionIndexed ( \ - # actid('SetVisible'), pars, ret) - - #if Entities['Checkpoint1'] != None: - pcmechobj.GetBody().MakeStatic() - - pcprop.SetProperty('nextcheckpoint', 1) - pcprop.SetProperty('lastcheckpoint', '') - - beep = celGetSoundSource(self.entity, 'beep') - beep.SoundSource.GetStream().Pause() - - self.entity.Behaviour.SendMessage('xd_racefinished', None, \ - None) - self.exploded = True - else: - if racestate == 'finished': - return - # The race is still going on - if racestate == 'started': - # Increment the time counter - ticks = args[getid('cel.parameter.currentticks')] - ticks -= self.racestarttime - pcprop.totalracetime = ticks - pcprop.timing = self.FormatTime(ticks) - # Apply afterburner health penalty, if necessary - # @FIXME@ make that independent of FPS, take elapsed into account - if self.do_afterburner and self.do_forward: - penalty = pcprop.penalty_afterburner - pars = parblock({'amount': penalty, 'source': 'ent_scene', \ - 'position': csVector3(0, 0, 0)}) - self.entity.Behaviour.SendMessage('pcdamage_hurt', None, pars) - # Pitch the accel sound - speed_ratio = pcmechobj.LinearVelocity.SquaredNorm() / 400.0 - pccraft = celGetCraftController(self.entity) - if pccraft.IsThrusterOn(): - speed_ratio /= 2.0 - # (vk) SetPlayRatePercent() used to crash for pitch_accel < 5, - # seems this value is higher now... - if speed_ratio > 0.08: # 0.05 - pitch_accel = int(speed_ratio * 100) - if pitch_accel > self.clipping_pitch: - pitch_accel = self.clipping_pitch - pitch_idle = int(100 - pitch_accel) - if pitch_idle < 8: # 5 - pitch_idle = 8 # 5 - self.snd_accel.SoundSource.GetStream().SetPlayRatePercent( \ - pitch_accel) - if speed_ratio > self.clipping_volume: - self.snd_accel.SoundSource.SetVolume(self.clipping_volume) - self.snd_idle.SoundSource.SetVolume(0.0) - else: - self.snd_accel.SoundSource.SetVolume(speed_ratio) - self.snd_idle.SoundSource.SetVolume( \ - self.clipping_volume - speed_ratio) - - if self.do_drawbars == True: - self.DrawBars(pcprop, pcmechobj) - - def pcproperties_setproperty(self, pc, args): - pass - - def pcproperties_clearproperty(self, pc, args): - pass - - def pctrigger_entertrigger(self, pc, args): - entity = args[getid('cel.parameter.entity')] - #print 'Entered trigger zone of ' + str(entity.GetName()) - pcchar = celGetCharacteristics(entity) - pcprop = celGetProperties(entity) - racestate = celGetQuest(self.entity).GetQuest().GetCurrentState() - if pcchar != None and pcprop != None: - if pcchar.HasCharacteristic('Checkpoint'): - # It's a checkpoint, get the actual next one's order - hpcp = celGetProperties(self.entity) - number = pcchar.GetCharacteristic('Checkpoint') - if number == hpcp.nextcheckpoint: - # That's the checkpoint the player was supposed to reach. - if racestate == 'started': - checked = celGetSoundSource(self.entity, 'checked') - checked.SoundSource.GetStream().Unpause() - # Set up new informations for teleportation and target CP - hpcp.nextcheckpoint += 1 # overriden later if last CP - hpcp.lastcheckpoint = entity.GetName() - if number == 1: - # It's the first checkpoint, increment finished laps - if racestate == 'started': - # Note that race quest listens to that property, - # and will trigger the lap time saving. - hpcp.finished_laps += 1 - else: - # Start playing engine sounds - self.snd_idle.SoundSource.GetStream().Unpause() - self.snd_accel.SoundSource.GetStream().Unpause() - elif pcchar.HasCharacteristic('LastCheckpoint'): - hpcp.nextcheckpoint = 1 - # For any checkpoint, add 'checktime' value to countdown - ctidx = pcprop.GetPropertyIndex('checktime') - if ctidx != None and ctidx < pcprop.GetPropertyCount(): #@@@ - hpcp.countdown += pcprop.checktime - else: - # Player was not supposed to come here, play 'locked' sound - locked = celGetSoundSource(self.entity, 'locked') - locked.SoundSource.GetStream().Unpause() - # Triggering entity is not a checkpoint, check for pickable item - elif pcchar.HasCharacteristic('weight'): - # Check if it's a weapon, and add it to player's inventory - if celGetInventory(Entities['ListOfWeapons']).In( \ - Entities[pcprop.object]) == True: - pcinv = celGetInventory(self.entity) - if pcinv.In(entity) == False: - pcinv.AddEntity(Entities[pcprop.object]) - else: - # Player already has that weapon - pass - elif pcprop.object =='booster': - pcm = celGetMechanicsObject(self.entity).AddForceDuration( \ - csVector3(0, 0, -80), True, csVector3(0,0,0), 0.5) - - def pctrigger_leavetrigger(self, pc, args): - pass - - def pcinventory_addchild(self, pc, args): - #entity = args[getid('cel.parameter.entity')] - #print self.name + ' got ' + entity.GetName() + ' in its inventory' - pass - - def pcinventory_removechild(self, pc, args): - pass - - def pcdynamicbody_collision(self, pc, args): - if celGetQuest(self.entity).GetQuest().GetCurrentState() != 'started': - return True - pos = args[getid('cel.parameter.position')] - normal = args[getid('cel.parameter.normal')] - depth = args[getid('cel.parameter.depth')] - - speed = celGetMechanicsObject( \ - self.entity).GetLinearVelocity().SquaredNorm() - if speed < 16: - return True - # Deform the ship mesh - pcmdef = celGetMeshDeform(self.entity) - pars = parblock({'position': pos, 'direction': normal * depth, \ - 'worldspace': True}) - pcmdef.DeformMesh(pos, normal * depth, True) - # Play the collision sound - thud = celGetSoundSource(self.entity, 'thud') - thud.SoundSource.GetStream().Unpause() - # Apply damage to the ship - pcprop = celGetProperties(self.entity) - pars = parblock({'amount': pcprop.penalty_collision, 'source': \ - 'ent_level', 'position': csVector3(0,0,0)}) - self.entity.Behaviour.SendMessage('pcdamage_hurt', None, pars) - - def pcdamage_hurt(self, pc, args): - amount = args[getid('cel.parameter.amount')] - source = args[getid('cel.parameter.source')] - if source != None and source == self.entity.Name: - return - pcprop = celGetProperties(self.entity) - idx = pcprop.GetPropertyIndex('energy') - if idx != None: - energy = pcprop.GetPropertyFloat(idx) - energy -= amount - if energy < 0: - energy = 0 - # The following ops are to be executed only once - if self.exploding == True: - return - # Stop engine sounds and play critical beeping sound - self.snd_idle.SoundSource.GetStream().Pause() - self.snd_accel.SoundSource.GetStream().Pause() - beep = celGetSoundSource(self.entity, 'beep') - beep.SoundSource.GetStream().Unpause() - celGetDefaultCamera(self.entity).SetModeName('thirdperson') - # Stop ship movement - self.entity.Behaviour.SendMessage('pccommandinput_forward0', \ - None, None) - self.entity.Behaviour.SendMessage( \ - 'pccommandinput_afterburner0', None, None) - self.entity.Behaviour.SendMessage('pccommandinput_slide0', \ - None, None) - pccraft = celGetCraftController(self.entity) - pccraft.StopTurnLeft() - pccraft.StopTurnRight() - pccraft.StopTurnUp() - pccraft.StopTurnDown() - if Entities['ent_level'] != None: - celGetHover(self.entity).HoverOff() - self.exploding = True - # Set the new energy/health value - pcprop.SetPropertyIndex(idx, energy) - - # --------------- player input messages ---------------------------------- - - def pccommandinput_weaponnext1(self, pc, args): - count = celGetInventory(self.entity).GetEntityCount() - self.selectedweapon += 1 - if self.selectedweapon >= count: - self.selectedweapon = 0 - # @TODO@ Show the change in HUD - - def pccommandinput_weaponnext0(self, pc, args): - pass - - def pccommandinput_weaponnext_(self, pc, args): - pass - - def pccommandinput_resetpos1(self, pc, args): - self.Teleport(False) - - def pccommandinput_resetpos0(self, pc, args): - pass - - def pccommandinput_resetpos_(self, pc, args): - pass - - def pccommandinput_afterburner0(self, pc, args): - celGetCraftController(self.entity).AfterBurnerOff() - self.do_afterburner = False - - def pccommandinput_forward1(self, pc, args): - if self.do_forward == False: - celGetCraftController(self.entity).ThrustOn() - # Augment thrusters visibility - for emitter in self.emitters: - emitter.SetEnabled(True) - for shadervar in self.shaderVars: - shadervar.SetValue(0.9) - self.do_forward = True - - def pccommandinput_forward_(self, pc, args): - pass - - def pccommandinput_forward0(self, pc, args): - if self.do_forward: - celGetCraftController(self.entity).ThrustOff() - for emitter in self.emitters: - emitter.SetEnabled(False) - for shadervar in self.shaderVars: - shadervar.SetValue(0.7) - self.do_forward = False - - def pccommandinput_backward1(self, pc, args): - celGetMechanicsObject(self.entity).AddForceDuration( \ - csVector3(0.0, 0.0, 0.7), True, csVector3(0, 0, 0), 0.2) - - def pccommandinput_backward_(self, pc, args): - celGetMechanicsObject(self.entity).AddForceDuration( \ - csVector3(0.0, 0.0, 1.0), True, csVector3(0, 0, 0), 0.2) - - def pccommandinput_rotateleft1(self, pc, args): - celGetCraftController(self.entity).StartTurnLeft() - - def pccommandinput_rotateleft0(self, pc, args): - celGetCraftController(self.entity).StopTurnLeft() - - def pccommandinput_rotateleft_(self, pc, args): - pass - - def pccommandinput_rotateright1(self, pc, args): - celGetCraftController(self.entity).StartTurnRight() - - def pccommandinput_rotateright0(self, pc, args): - celGetCraftController(self.entity).StopTurnRight() - - def pccommandinput_rotateright_(self, pc, args): - pass - - def pccommandinput_rotateup1(self, pc, args): - celGetCraftController(self.entity).StartTurnUp() - - def pccommandinput_rotateup0(self, pc, args): - celGetCraftController(self.entity).StopTurnUp() - - def pccommandinput_rotateup_(self, pc, args): - pass - - def pccommandinput_rotatedown1(self, pc, args): - celGetCraftController(self.entity).StartTurnDown() - - def pccommandinput_rotatedown0(self, pc, args): - celGetCraftController(self.entity).StopTurnDown() - - def pccommandinput_rotatedown_(self, pc, args): - pass - - def pccommandinput_yaw(self, pc, args): - value = args[getid('cel.parameter.value')] - pccraft = celGetCraftController(self.entity) - if value < 0: - pccraft.StartTurnLeft() - else: - if value > 0: - pccraft.StartTurnRight() - else: - pccraft.StartTurnLeft() - pccraft.StartTurnRight() - - def pccommandinput_pitch(self, pc, args): - value = args[getid('cel.parameter.value')] - pccraft = celGetCraftController(self.entity) - # @TODO@ manage pitch inversion - if value < 0: - pccraft.StartTurnUp() - else: - if value > 0: - pccraft.StartTurnDown() - else: - pccraft.StartTurnUp() - pccraft.StartTurnDown() - - def pccommandinput_cammode1(self, pc, args): - pccam = celGetDefaultCamera(self.entity) - pccam.SetMode(pccam.GetNextMode()) - #print 'Camera mode: ' + pccam.GetModeName() - - def pccommandinput_cammode0(self, pc, args): - pass - - def pccommandinput_cammode_(self, pc, args): - pass - - def pccommandinput_nextreg1(self, pc, args): - self.Teleport(True) - - def pccommandinput_nextreg0(self, pc, args): - pass - - def pccommandinput_nextreg_(self, pc, args): - p... [truncated message content] |
From: <vk...@us...> - 2008-05-07 16:42:49
|
Revision: 769 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=769&view=rev Author: vknecht Date: 2008-05-07 09:37:46 -0700 (Wed, 07 May 2008) Log Message: ----------- - Vincent set svn:ignore to '*.pyc' for most directories. Property Changed: ---------------- trunk/ecksdee/ trunk/ecksdee/data/client/ trunk/ecksdee/data/entities/ trunk/ecksdee/data/gametypes/ trunk/ecksdee/data/gametypes/ctf/ trunk/ecksdee/data/gametypes/dm/ trunk/ecksdee/data/gametypes/race/ trunk/ecksdee/data/hud/ trunk/ecksdee/data/menus/ trunk/ecksdee/data/scripts/ trunk/ecksdee/data/server/ trunk/ecksdee/data/server/game/ trunk/ecksdee/data/vehicles/ trunk/ecksdee/data/weapons/ trunk/ecksdee/data/weapons/aimneinbng/ trunk/ecksdee/data/weapons/browning/ trunk/ecksdee/data/weapons/ffar/ trunk/ecksdee/data/weapons/flamer/ trunk/ecksdee/data/weapons/minelayer/ trunk/ecksdee/simplejson/ Property changes on: trunk/ecksdee ___________________________________________________________________ Name: svn:ignore - Jamconfig Jamconfig.msvcgen Jamfile autom4te.cache config.* ecksdee ecksdee_static out *.exe *.dll + *.pyc Property changes on: trunk/ecksdee/data/client ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/entities ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/gametypes ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/gametypes/ctf ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/gametypes/dm ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/gametypes/race ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/hud ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/menus ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/scripts ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/server ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/server/game ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/vehicles ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons/aimneinbng ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons/browning ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons/ffar ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons/flamer ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/data/weapons/minelayer ___________________________________________________________________ Name: svn:ignore + *.pyc Property changes on: trunk/ecksdee/simplejson ___________________________________________________________________ Name: svn:ignore + *.pyc This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <de...@us...> - 2007-12-21 13:16:03
|
Revision: 768 http://ecksdee.svn.sourceforge.net/ecksdee/?rev=768&view=rev Author: dex7 Date: 2007-12-21 05:16:00 -0800 (Fri, 21 Dec 2007) Log Message: ----------- - dex7 centered the startmenu vertically Modified Paths: -------------- trunk/ecksdee/data/menus/StartMenu.py trunk/ecksdee/doc/history.txt Modified: trunk/ecksdee/data/menus/StartMenu.py =================================================================== --- trunk/ecksdee/data/menus/StartMenu.py 2007-11-14 15:01:30 UTC (rev 767) +++ trunk/ecksdee/data/menus/StartMenu.py 2007-12-21 13:16:00 UTC (rev 768) @@ -49,7 +49,7 @@ fsize, 'unselection') self.menu.addElement('', 'Exit_click', [0, 0], [xs, ys], fsize, \ 'prev_Exit') - self.menu.align([3000, 3000], [0, 25000]) # positions, offsets + self.menu.align([9000, 75000], [0, 25000]) # positions, offsets gm = Entities['ent_gamemanager'] self.soundsource = celGetSoundSource(gm) Modified: trunk/ecksdee/doc/history.txt =================================================================== --- trunk/ecksdee/doc/history.txt 2007-11-14 15:01:30 UTC (rev 767) +++ trunk/ecksdee/doc/history.txt 2007-12-21 13:16:00 UTC (rev 768) @@ -3,6 +3,8 @@ The history order is reversed so that new features are at the top. +21-Dec-2007 + - dex7 centered the startmenu vertically 14-Nov-2007 - Vincent added a check so that collision thud sound isn't played when player is dead. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |