From: <ap...@us...> - 2007-02-13 06:49:23
|
Revision: 4 http://roreditor.svn.sourceforge.net/roreditor/?rev=4&view=rev Author: aperion Date: 2007-02-12 22:49:20 -0800 (Mon, 12 Feb 2007) Log Message: ----------- submiting initial code for wxtest4 Added Paths: ----------- trunk/wxtest4/ trunk/wxtest4/MainFrame.cpp trunk/wxtest4/MainFrame.h trunk/wxtest4/globals.h trunk/wxtest4/myApp.cpp trunk/wxtest4/myApp.hh trunk/wxtest4/myGLWindow.cpp trunk/wxtest4/myGLWindow.hh trunk/wxtest4/myRenderer.cpp trunk/wxtest4/myRenderer.hh trunk/wxtest4/mySpinCtrl.cpp trunk/wxtest4/mySpinCtrl.hh Added: trunk/wxtest4/MainFrame.cpp =================================================================== --- trunk/wxtest4/MainFrame.cpp (rev 0) +++ trunk/wxtest4/MainFrame.cpp 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,74 @@ +#include "MainFrame.h" + +MainFrame::MainFrame( + const wxChar *title, + int xpos, + int ypos, + int width, + int height) + : + wxFrame( + (wxFrame *) NULL, + -1, + title, + wxPoint(xpos, ypos), + wxSize(width, height)){ + + /*m_pTextCtrl = new wxTextCtrl(this, + -1, + wxString(wxT("this is m_pTextXtrl")), + wxDefaultPosition, + wxDefaultSize, + wxTE_MULTILINE);*/ + + GenerateMenus(); + //Layout(); +} + +MainFrame::~MainFrame(){} + +void MainFrame::GenerateMenus(){ + wxMenuBar *m_pMenuBar = new wxMenuBar(); + wxMenu *m_pFileMenu = new wxMenu(); + wxMenu *m_pHelpMenu = new wxMenu(); + + // File Menu + m_pFileMenu->Append(wxID_OPEN, _T("&Open")); + m_pFileMenu->Append(wxID_SAVE, _T("&Save")); + m_pFileMenu->AppendSeparator(); + m_pFileMenu->Append(wxID_EXIT, _T("&Quit")); + m_pMenuBar->Append(m_pFileMenu, _T("&File")); + // About Menu + m_pHelpMenu->Append(wxID_ABOUT, _T("&About")); + m_pMenuBar->Append(m_pHelpMenu, _T("&Help")); + + SetMenuBar(m_pMenuBar); +} +// If you're doing an application by inheriting from wxApp +// be sure to change wxFrame to wxApp (or whatever component +// you've inherited your class from). +BEGIN_EVENT_TABLE(MainFrame, wxFrame) + EVT_MENU(wxID_OPEN, MainFrame::OnMenuFileOpen) + EVT_MENU(wxID_SAVE, MainFrame::OnMenuFileSave) + EVT_MENU(wxID_EXIT, MainFrame::OnMenuFileQuit) + EVT_MENU(wxID_ABOUT, MainFrame::OnMenuHelpAbout) +END_EVENT_TABLE() + +/** Process menu File>Open */ +void MainFrame::OnMenuFileOpen(wxCommandEvent &event){ +} + +/** Process menu File>Save */ +void MainFrame::OnMenuFileSave(wxCommandEvent &event){ + +} + +/** Process menu File>Quit */ +void MainFrame::OnMenuFileQuit(wxCommandEvent &event){ + Close(false); +} + +/** Process menu About>Info */ +void MainFrame::OnMenuHelpAbout(wxCommandEvent &event){ + wxLogMessage(_T("The Simple Text Editor/wxWidgets Tutorial")); +} Property changes on: trunk/wxtest4/MainFrame.cpp ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/MainFrame.h =================================================================== --- trunk/wxtest4/MainFrame.h (rev 0) +++ trunk/wxtest4/MainFrame.h 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,38 @@ +#ifndef MAINFRAME_H_ +#define MAINFRAME_H_ + +// For compilers that don't support precompilation, include "wx/wx.h" + #include "wx/wxprec.h" + #ifndef WX_PRECOMP + #include "wx/wx.h" + #endif + +class MainFrame : public wxFrame { + public: + /** Constructor, Creates a new MainFrame */ + MainFrame(const wxChar *title, int xpos, int ypos, int width, int height); + + /** Destructor */ + ~MainFrame(); + + private: + //wxTextCtrl *m_pTextCtrl; + void GenerateMenus(); + + /** Process menu File>Open */ + void OnMenuFileOpen(wxCommandEvent &event); + + /** Process menu File>Save */ + void OnMenuFileSave(wxCommandEvent &event); + + /** Process menu File>Quit */ + void OnMenuFileQuit(wxCommandEvent &event); + + /** Process menu About>Info */ + void OnMenuHelpAbout(wxCommandEvent &event); + + protected: + DECLARE_EVENT_TABLE() +}; + +#endif /*MAINFRAME_H_*/ Property changes on: trunk/wxtest4/MainFrame.h ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/globals.h =================================================================== --- trunk/wxtest4/globals.h (rev 0) +++ trunk/wxtest4/globals.h 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,11 @@ +#ifndef GLOBALS_H_ +#define GLOBALS_H_ + +#include "wx/wx.h" +#include "wx/xrc/xmlres.h" +#include "wx/notebook.h" +#include "wx/glcanvas.h" +#include "GL/gl.h" +#include "GL/glu.h" + +#endif /*GLOBALS_H_*/ Property changes on: trunk/wxtest4/globals.h ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myApp.cpp =================================================================== --- trunk/wxtest4/myApp.cpp (rev 0) +++ trunk/wxtest4/myApp.cpp 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,105 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ +#include "myApp.hh" + +bool myApp::OnInit() +{ + //wxFrame* frame = new wxFrame((wxFrame *)NULL, -1, _("Hello GL World"), wxPoint(50,50), wxSize(800,600) ); + MainFrame *frame = new MainFrame(wxT("RoREditor"), 100, 100, 800, 600); + + wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + + wxStaticBoxSizer *panel0 = new wxStaticBoxSizer(wxVERTICAL, frame, _("Information") ); + sizer->Add(panel0, 0, 0, 0); + + // GRID + wxGridSizer *item0 = new wxGridSizer( 2, 1, 1 ); + + + MyGLCanvas1 = new myGLWindow(frame, -1, wxPoint(-1,-1), wxSize(30,30), wxSUNKEN_BORDER, _("some text")); + item0->Add( MyGLCanvas1, 1, wxEXPAND, 0); + //MyGLCanvas1->SetCurrent(); + MyGLCanvas1->gllist = glGenLists(1); + MyGLCanvas1->SetToolTip(_T("MyGLCanvas1")); + glNewList(MyGLCanvas1->gllist, GL_COMPILE); + glRotatef(90 ,0.0f, 1.0f, 0.0f); + glEndList(); + + MyGLCanvas2 = new myGLWindow(frame, -1, wxPoint(-1,-1), wxSize(30,30), wxSUNKEN_BORDER, _("some text")); + MyGLCanvas2->setRotation(0,1,0); + item0->Add( MyGLCanvas2, 1, wxEXPAND, 0 ); + MyGLCanvas2->SetToolTip(_T("MyGLCanvas2")); + //MyGLCanvas2->SetCurrent(); + MyGLCanvas2->gllist = glGenLists(1); + glNewList(MyGLCanvas2->gllist, GL_COMPILE); + glRotatef(90 ,1.0f, 0.0f, 0.0f); + glEndList(); + + MyGLCanvas3 = new myGLWindow(frame, -1, wxPoint(-1,-1), wxSize(30,30), wxSUNKEN_BORDER, _("some text")); + MyGLCanvas3->setRotation(4,0,0); + item0->Add( MyGLCanvas3, 1, wxEXPAND, 0 ); + MyGLCanvas4->SetToolTip(_T("MyGLCanvas3")); + //MyGLCanvas3->SetCurrent(); + + MyGLCanvas4 = new myGLWindow(frame, -1, wxPoint(-1,-1), wxSize(30,30), wxSUNKEN_BORDER, _("some text")); + MyGLCanvas4->setRotation(0,0,0); + item0->Add( MyGLCanvas4, 1, wxEXPAND, 0 ); + MyGLCanvas4->SetToolTip(_T("MyGLCanvas4")); + //MyGLCanvas4->SetCurrent(); + + + // PANEL + wxStaticText *text1 = new wxStaticText(frame, -1, _("Rotation Speed"), wxDefaultPosition, wxDefaultSize, 0, _("StaticText")); + panel0->Add(text1, 0, 0, 0); + spin1 = new mySpinCtrl(frame, -1, MyGLCanvas1, _("Spin-Control"), -600, 600, 30); + panel0->Add(spin1, 0, 0, 0); + + + sizer->Add(item0, 1, wxEXPAND, 0); + frame->SetSizer(sizer); + frame->Show(TRUE); + + //frame->SetSizer(item0); +/* wxNotebook* book = new wxNotebook(frame, -1, wxPoint(-1,-1), wxSize(200,200)); + + GL_Window* MyGLCanvas1 = new GL_Window(1, book, -1, wxPoint(-1,-1), wxSize(200,200), wxSUNKEN_BORDER, _("some text")); + book->AddPage(MyGLCanvas1, _("One")); + + GL_Window* MyGLCanvas2 = new GL_Window(0, book, -1, wxPoint(-1,-1), wxSize(200,200), wxSUNKEN_BORDER, _("some text")); + book->AddPage(MyGLCanvas2, _("Two")); + + GL_Window* MyGLCanvas3 = new GL_Window(0, frame, -1, wxPoint(-1,-1), wxSize(200,200), wxSUNKEN_BORDER, _("some text")); + + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(book, 0, 0, 0); + sizer->Add(MyGLCanvas3, 0, 0, 0); + + frame->SetSizer(sizer);*/ + + // initiate timer + + + myTimer = new wxTimer(this); + myTimer->Start(5); + + return TRUE; +} + +void myApp::OnTimer(wxTimerEvent & event) +{ + static float u = 0; + u = u + 1; + MyGLCanvas1->setRotation(0,0,u); + + MyGLCanvas1->draw(); + MyGLCanvas2->draw(); + MyGLCanvas3->draw(); + MyGLCanvas4->draw(); +} + +BEGIN_EVENT_TABLE(myApp, wxApp) + EVT_TIMER(-1, myApp::OnTimer) +END_EVENT_TABLE() + + +IMPLEMENT_APP(myApp) Property changes on: trunk/wxtest4/myApp.cpp ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myApp.hh =================================================================== --- trunk/wxtest4/myApp.hh (rev 0) +++ trunk/wxtest4/myApp.hh 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,42 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#ifndef MYAPPHH +#define MYAPPHH + +#include "wx/wx.h" +#include "wx/timer.h" +#include "myGLWindow.hh" +#include "mySpinCtrl.hh" +#include "myGLWindow.hh" +#include "mySpinCtrl.hh" +#include "MainFrame.h" + +class myApp: public wxApp +{ + private: + myGLWindow *MyGLCanvas1, *MyGLCanvas2, *MyGLCanvas3, *MyGLCanvas4; + mySpinCtrl *spin1, *spin2, *spin3, *spin4; + wxTimer *myTimer; + + void GenerateMenu(wxFrame *frame); + + /** Process menu File>Open */ + void OnMenuFileOpen(wxCommandEvent &event); + + /** Process menu File>Save */ + void OnMenuFileSave(wxCommandEvent &event); + + /** Process menu File>Quit */ + void OnMenuFileQuit(wxCommandEvent &event); + + /** Process menu About>Info */ + void OnMenuHelpAbout(wxCommandEvent &event); + DECLARE_EVENT_TABLE(); + + public: + virtual bool OnInit(); + void OnTimer(wxTimerEvent & event); +}; + +#endif Property changes on: trunk/wxtest4/myApp.hh ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myGLWindow.cpp =================================================================== --- trunk/wxtest4/myGLWindow.cpp (rev 0) +++ trunk/wxtest4/myGLWindow.cpp 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,44 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#include "myGLWindow.hh" +#include "myRenderer.hh" + +myGLWindow::myGLWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style, const wxString& name, + int* attribList, const wxPalette& palette) : + wxGLCanvas(parent, id, pos, size, style, name, + attribList, palette), + isInitiated(false) +{ + mySize = size; +} + +myGLWindow::~myGLWindow() +{ +} + +void myGLWindow::draw() +{ + myRenderer::getInstance().render(this); +} + +void myGLWindow::OnSize(wxSizeEvent& event) +{ + mySize = event.GetSize(); + myRenderer::getInstance().resize(this); + //is that needed? + // event.RequestMore(); +} + +// void myGLWindow::OnIdle(wxIdleEvent& event) +// { +// //draw(); +// //event.RequestMore(); +// } + +BEGIN_EVENT_TABLE(myGLWindow, wxGLCanvas) +// EVT_IDLE(myGLWindow::OnIdle) + EVT_SIZE(myGLWindow::OnSize) +END_EVENT_TABLE() + Property changes on: trunk/wxtest4/myGLWindow.cpp ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myGLWindow.hh =================================================================== --- trunk/wxtest4/myGLWindow.hh (rev 0) +++ trunk/wxtest4/myGLWindow.hh 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,50 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#ifndef MYGLWINDOWHH +#define MYGLWINDOWHH + +#include "wx/wx.h" +#include "wx/xrc/xmlres.h" +#include "wx/glcanvas.h" +#include "wx/notebook.h" +#include "GL/gl.h" +//#include "GL/glu.h" + +#if !wxUSE_GLCANVAS + #error "OpenGL required: set wxUSE_GLCANVAS to 1 and rebuild the library" +#endif + +class myGLWindow : public wxGLCanvas +{ + private: + DECLARE_EVENT_TABLE(); + + wxSize mySize; + + public: + myGLWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style = 0, + const wxString& name = _("GLCanvas"), int* attribList = 0, + const wxPalette& palette = wxNullPalette); + + virtual ~myGLWindow(); + + bool isInitiated; + float rotx, roty, rotz; + + int gllist; + + void draw(); +// void OnIdle(wxIdleEvent& event); + void OnIdle(wxIdleEvent& event) { + draw(); + event.RequestMore(); + } + void OnSize(wxSizeEvent& event); + + wxSize getSize(void) { return mySize; }; + void setRotation(float x, float y, float z) { rotx = x; roty = y; rotz = z; }; +}; + +#endif Property changes on: trunk/wxtest4/myGLWindow.hh ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myRenderer.cpp =================================================================== --- trunk/wxtest4/myRenderer.cpp (rev 0) +++ trunk/wxtest4/myRenderer.cpp 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,171 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#include "myRenderer.hh" +#include "myGLWindow.hh" + + +myRenderer myRenderer::myInstance; + +myRenderer::myRenderer() +{ +} + +myRenderer::~myRenderer() +{ +} + +void myRenderer::init(myGLWindow *glwindow) +{ + //printf("init\n"); + glwindow->SetCurrent(); + resize(glwindow); + glShadeModel(GL_SMOOTH); // Enables Smooth Shading + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background + glClearDepth(1.0f); // Depth Buffer Setup + glEnable(GL_DEPTH_TEST); // Enables Depth Testing + glDepthFunc(GL_LEQUAL); // The Type Of Depth Test To Do + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations + glwindow->isInitiated = true; + + //init models + createGrid(); +} + +void myRenderer::resize(myGLWindow *glwindow) +{ + //printf("resize\n"); + glwindow->SetCurrent(); + glViewport(0, 0, glwindow->getSize().GetWidth(), glwindow->getSize().GetHeight()); + glMatrixMode(GL_PROJECTION); // Select The Projection Matrix + glLoadIdentity(); // Reset The Projection Matrix + + // Calculate The Aspect Ratio Of The Window + // fov = 45 = normal + gluPerspective(95.0f, (GLfloat)glwindow->getSize().GetWidth() / (GLfloat)glwindow->getSize().GetHeight(), 0.1f, 500.0f); + + glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix + glLoadIdentity(); // Reset The Modelview Matrix +} + +void myRenderer::createGrid() +{ + myGridGLList = glGenLists(1); + glNewList(myGridGLList, GL_COMPILE); + + //y-grid + float gridsize = 10; + float gridstep = 0.2; + glColor3f(0.5f,0.3f,0.3f); + for (float y=-gridsize;y<gridsize;y=y+gridstep) + { + glBegin(GL_LINES); + glVertex3f( -gridsize,0, y); + glVertex3f( gridsize,0 , y); + glEnd(); + } + for (float x=-gridsize;x<gridsize;x=x+gridstep) + { + glBegin(GL_LINES); + glVertex3f( x, 0, -gridsize); + glVertex3f( x, 0, gridsize); + glEnd(); + } + + //x-grid + glColor3f(0.3f,0.5f,0.3f); + for (float y=-gridsize;y<gridsize;y=y+gridstep) + { + glBegin(GL_LINES); + glVertex3f( 0,-gridsize, y); + glVertex3f( 0,gridsize , y); + glEnd(); + } + for (float x=-gridsize;x<gridsize;x=x+gridstep) + { + glBegin(GL_LINES); + glVertex3f( 0,x, -gridsize); + glVertex3f( 0,x, gridsize); + glEnd(); + } + + //z-grid + glColor3f(0.3f,0.3f,0.5f); + for (float y=-gridsize;y<gridsize;y=y+gridstep) + { + glBegin(GL_LINES); + glVertex3f( -gridsize, y,0); + glVertex3f( gridsize , y,0); + glEnd(); + } + for (float x=-gridsize;x<gridsize;x=x+gridstep) + { + glBegin(GL_LINES); + glVertex3f( x, -gridsize,0); + glVertex3f( x, gridsize,0); + glEnd(); + } + glEndList(); +} + +void myRenderer::render(myGLWindow *glwindow) +{ + if (!glwindow->isInitiated) + init(glwindow); + + glwindow->SetCurrent(); + + // copy & paste of http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=05 + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer + + glLoadIdentity(); + + glCallList(myGridGLList); + + glCallList(glwindow->gllist); + + + //glLoadIdentity(); // Reset The View + //glTranslatef(1.5f,0.0f,-7.0f); // Move Right And Into The Screen + + glTranslatef(0,0,-3.0f); // Move Left And Into The Screen + glRotatef(rquad,1.0f,1.0f,1.0f); // Rotate The Cube On X, Y & Z + + glBegin(GL_QUADS); // Start Drawing The Cube + glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green + glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top) + glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top) + glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top) + glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top) + + glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange + glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom) + glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom) + glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom) + glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom) + + glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red + glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front) + glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front) + glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front) + glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front) + + glColor3f(1.0f,1.0f,0.0f); // Set The Color To Yellow + glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Back) + glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Back) + glVertex3f(-1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Back) + glVertex3f( 1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Back) + + glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet + glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right) + glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right) + glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right) + glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right) + glEnd(); // Done Drawing The Quad + + rtri += myRotationSpeed; // Increase The Rotation Variable For The Triangle + rquad -= myRotationSpeed; // Decrease The Rotation Variable For The Quad + + glwindow->SwapBuffers(); +} Property changes on: trunk/wxtest4/myRenderer.cpp ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/myRenderer.hh =================================================================== --- trunk/wxtest4/myRenderer.hh (rev 0) +++ trunk/wxtest4/myRenderer.hh 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,46 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#ifndef MYRENDERERHH +#define MYRENDERERHH + +#include "wx/wx.h" +#include "wx/xrc/xmlres.h" +#include "wx/notebook.h" +#include "wx/glcanvas.h" +#include "GL/gl.h" +#include "GL/glu.h" + +#include "myGLWindow.hh" +#include "mySpinCtrl.hh" + +class myRenderer +{ + private: + static myRenderer myInstance; + + GLfloat myRotationSpeed; + GLfloat rtri, rquad; + myRenderer(const myRenderer&); + myRenderer &operator=(const myRenderer&); + + int myGridGLList; + void createGrid(); + + protected: + myRenderer(); + + public: + inline static myRenderer& getInstance() { return myInstance; }; + + virtual ~myRenderer(); + void init(myGLWindow *glwindow); + void render(myGLWindow *glwindow); + void resize(myGLWindow *glwindow); + + + void setRotationSpeed(float value) { myRotationSpeed = value; }; + float getRotationSpeed(void) { return myRotationSpeed; }; +}; + +#endif Property changes on: trunk/wxtest4/myRenderer.hh ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/mySpinCtrl.cpp =================================================================== --- trunk/wxtest4/mySpinCtrl.cpp (rev 0) +++ trunk/wxtest4/mySpinCtrl.cpp 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,36 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#include "mySpinCtrl.hh" +#include "myGLWindow.hh" +#include "myRenderer.hh" + + +mySpinCtrl::mySpinCtrl(wxWindow* parent, wxWindowID id, myGLWindow *win, const wxString& name, int min, int max, int initial) : + wxSpinCtrl(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, initial, name), + currentValue(initial), myGL(win) +{ + setSpeed(); +} + +mySpinCtrl::~mySpinCtrl() +{ +} + +void mySpinCtrl::setSpeed() +{ + float fvalue = (float)currentValue/1000; +// printf("spinning: %f\n", fvalue); + myRenderer::getInstance().setRotationSpeed(fvalue); +} + +void mySpinCtrl::OnSpin(wxSpinEvent& event) +{ + currentValue = event.GetPosition(); + setSpeed(); +} + +BEGIN_EVENT_TABLE(mySpinCtrl, wxSpinCtrl) + EVT_SPINCTRL(-1, mySpinCtrl::OnSpin) +END_EVENT_TABLE() + Property changes on: trunk/wxtest4/mySpinCtrl.cpp ___________________________________________________________________ Name: svn:executable + * Added: trunk/wxtest4/mySpinCtrl.hh =================================================================== --- trunk/wxtest4/mySpinCtrl.hh (rev 0) +++ trunk/wxtest4/mySpinCtrl.hh 2007-02-13 06:49:20 UTC (rev 4) @@ -0,0 +1,26 @@ +/* see gpl.txt */ +/* Thomas Fischer, th...@th..., 2006 */ + +#ifndef MYSPINCTRLHH +#define MYSPINCTRLHH + +#include "wx/wx.h" +#include "wx/spinctrl.h" +#include "myGLWindow.hh" + +class mySpinCtrl : public wxSpinCtrl +{ + private: + int currentValue; + myGLWindow *myGL; + DECLARE_EVENT_TABLE(); + void setSpeed(); + + public: + mySpinCtrl(wxWindow* parent, wxWindowID id, myGLWindow *win, const wxString& name = _("GLCanvas"), int min = 0, int max = 100 , int initial = 10); + virtual ~mySpinCtrl(); + + void OnSpin(wxSpinEvent& event); +}; + +#endif Property changes on: trunk/wxtest4/mySpinCtrl.hh ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-02-14 00:33:50
|
Revision: 6 http://roreditor.svn.sourceforge.net/roreditor/?rev=6&view=rev Author: rorthomas Date: 2007-02-13 16:33:47 -0800 (Tue, 13 Feb 2007) Log Message: ----------- added extensionmanager test Added Paths: ----------- trunk/rorextmanager/ trunk/rorextmanager/Sconstruct trunk/rorextmanager/cacert.pem trunk/rorextmanager/cacertcl3.crt trunk/rorextmanager/rormanager.c trunk/rorextmanager/test.sh Added: trunk/rorextmanager/Sconstruct =================================================================== --- trunk/rorextmanager/Sconstruct (rev 0) +++ trunk/rorextmanager/Sconstruct 2007-02-14 00:33:47 UTC (rev 6) @@ -0,0 +1,19 @@ +import glob, os +env = Environment() + +#libxml +env.ParseConfig('xml2-config --cflags --libs') + +#curl +env.ParseConfig('curl-config --cflags --libs') + +srclst = ['rormanager.c'] + +myCPPFlags = ['-g', '-Wall'] + +env.Program( + target='rormanager', + source=srclst, + LIBPATH=env['LIBPATH']+['.'], + CPPFLAGS=env['CPPFLAGS']+myCPPFlags, +) Added: trunk/rorextmanager/cacert.pem =================================================================== --- trunk/rorextmanager/cacert.pem (rev 0) +++ trunk/rorextmanager/cacert.pem 2007-02-14 00:33:47 UTC (rev 6) @@ -0,0 +1,41 @@ +-----BEGIN CERTIFICATE----- +MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 +IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB +IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA +Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO +BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi +MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ +ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ +8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6 +zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y +fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7 +w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc +G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k +epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q +laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ +QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU +fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826 +YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w +ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY +gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe +MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0 +IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy +dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw +czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0 +dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl +aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC +AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg +b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB +ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc +nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg +18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c +gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl +Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY +sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T +SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF +CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum +GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk +zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW +omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD +-----END CERTIFICATE----- Added: trunk/rorextmanager/cacertcl3.crt =================================================================== --- trunk/rorextmanager/cacertcl3.crt (rev 0) +++ trunk/rorextmanager/cacertcl3.crt 2007-02-14 00:33:47 UTC (rev 6) @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 +IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB +IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA +Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS +BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v +cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9 +4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB +Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J +0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ +FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx +bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q +SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb +6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV +m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g +eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG +kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7 +6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG +CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc +aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB +gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w +aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6 +tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0 +nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M +77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV +Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L +ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM +zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU +rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF +YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT +oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu +FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB +0m6lG5kngOcLqagA +-----END CERTIFICATE----- Added: trunk/rorextmanager/rormanager.c =================================================================== --- trunk/rorextmanager/rormanager.c (rev 0) +++ trunk/rorextmanager/rormanager.c 2007-02-14 00:33:47 UTC (rev 6) @@ -0,0 +1,188 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#include <curl/curl.h> +#include <curl/types.h> +#include <curl/easy.h> + +#include <libxml/xmlmemory.h> +#include <libxml/parser.h> + +char *repourl = "https://repository.rigsofrods.com/getexinfo.php?id="; + +int getinfo(char *idstr); +int parseDoc(char *docname); +void parseExtInfo (xmlDocPtr doc, xmlNodePtr cur); + +struct rorextension { + char *id; + char *author; + char *description; + size_t filesize; + size_t depcount; + char *dependencies[200]; +}; + +struct rorextension ext[50]; +size_t extcounter = 0; + +size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) +{ + int written = fwrite(ptr, size, nmemb, (FILE *)stream); + return written; +} + +void parseExtDepInfo (xmlDocPtr doc, xmlNodePtr cur, struct rorextension *r) +{ + r->depcount = 0; + xmlChar *val; + cur = cur->xmlChildrenNode; + while (cur != NULL) { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + if ((!xmlStrcmp(cur->name, (const xmlChar *)"dependson"))) { + char *tstr = (char*)malloc(strlen((char *)val)); + strncpy(tstr, (char *)val, strlen((char *)val)); + r->dependencies[r->depcount] = tstr; + r->depcount++; + } + xmlFree(val); + cur = cur->next; + } + return; +} + +void parseExtInfo (xmlDocPtr doc, xmlNodePtr cur) +{ + xmlChar *val; + cur = cur->xmlChildrenNode; + struct rorextension r; + int i = 0; + + while (cur != NULL) { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + if ((!xmlStrcmp(cur->name, (const xmlChar *)"id"))) { + r.id = (char*)malloc(strlen((char *)val)); + strncpy(r.id, (char *)val, strlen((char *)val)); + } else if ((!xmlStrcmp(cur->name, (const xmlChar *)"author"))) { + r.author = (char*)malloc(strlen((char *)val)); + strncpy(r.author, (char *)val, strlen((char *)val)); + } else if ((!xmlStrcmp(cur->name, (const xmlChar *)"description"))) { + r.description = (char*)malloc(strlen((char *)val)); + strncpy(r.description, (char *)val, strlen((char *)val)); + } else if ((!xmlStrcmp(cur->name, (const xmlChar *)"filesize"))) { + char *tmp = (char*)malloc(strlen((char *)val)); + strncpy(tmp, (char *)val, strlen((char *)val)); + + r.filesize = (size_t)strtol(tmp, NULL, 10); + } else if ((!xmlStrcmp(cur->name, (const xmlChar *)"dependencies"))) { + parseExtDepInfo(doc, cur, &r); + } + xmlFree(val); + cur = cur->next; + } + printf("== extension %s ==\n", r.id); + printf("author: %s\n", r.author); + printf("description: %s\n", r.description); + printf("filesize: %d\n", r.filesize); + printf("dependencies-count: %d\n", r.depcount); + if (r.depcount>0) { + for (i=0;i<r.depcount;i++) { + printf(" depends on: %s\n", r.dependencies[i]); + getinfo(r.dependencies[i]); + } + } + ext[extcounter++] = r; + return; +} + +int parseDoc(char *docname) +{ + xmlDocPtr doc; + xmlNodePtr cur; + + doc = xmlParseFile(docname); + + if (doc == NULL ) { + fprintf(stderr,"Document not parsed successfully. \n"); + return -1; + } + + cur = xmlDocGetRootElement(doc); + + if (cur == NULL) { + fprintf(stderr,"empty document\n"); + xmlFreeDoc(doc); + return -1; + } + + if (xmlStrcmp(cur->name, (const xmlChar *) "rorextension")) { + fprintf(stderr,"document of the wrong type, root node != rorextension"); + xmlFreeDoc(doc); + return -1; + } + + parseExtInfo (doc, cur); + + xmlFreeDoc(doc); + return 0; +} + + +int getinfo(char *idstr) +{ + CURL *curl; + CURLcode res; + FILE *outfile; + char *tmpfile = "tempout.xml"; + char *url = (char*)malloc(255); + strncpy(url, repourl, strlen(repourl)); + strncat(url, idstr, strlen(idstr)); + + printf(" trying to resolve dependency %s\n", idstr); + printf(">>%s\n", url); + curl = curl_easy_init(); + if(curl) { + curl_easy_setopt(curl, CURLOPT_URL, url); + + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); + //curl_easy_setopt(curl, CURLOPT_CAPATH, ""); + //curl_easy_setopt(curl, CURLOPT_CAINFO, "cacert.crt"); + + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + outfile = fopen(tmpfile,"w"); + if (outfile == NULL) { + curl_easy_cleanup(curl); + return -1; + } + curl_easy_setopt(curl, CURLOPT_WRITEDATA , outfile); + res = curl_easy_perform(curl); + + /* always cleanup */ + curl_easy_cleanup(curl); + + fclose(outfile); + + parseDoc(tmpfile); + } + return 0; +} + +int main(int argc, char *argv[]) +{ + if(argc != 2) { + printf("usage: %s <extensionid 1234-1234-1234-1234-5678>\n", argv[0]); + return -1; + } + + getinfo(argv[1]); + return 0; +} + + + + + Property changes on: trunk/rorextmanager/rormanager.c ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/rorextmanager/test.sh =================================================================== --- trunk/rorextmanager/test.sh (rev 0) +++ trunk/rorextmanager/test.sh 2007-02-14 00:33:47 UTC (rev 6) @@ -0,0 +1,2 @@ +#!/bin/sh +./rormanager 1234-0000-0000-0000-0000 Property changes on: trunk/rorextmanager/test.sh ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-22 22:56:18
|
Revision: 10 http://roreditor.svn.sourceforge.net/roreditor/?rev=10&view=rev Author: rorthomas Date: 2007-06-22 15:55:30 -0700 (Fri, 22 Jun 2007) Log Message: ----------- * added visualwx project for starter gui * removed truckchecker button from starter gui Modified Paths: -------------- trunk/lib/ror/settingsdialog.py Added Paths: ----------- trunk/devtools/ trunk/devtools/RoRSettingsDialog/ trunk/devtools/RoRSettingsDialog/App.py trunk/devtools/RoRSettingsDialog/MyDlg.pfr trunk/devtools/RoRSettingsDialog/MyDlg.pfr.bak trunk/devtools/RoRSettingsDialog/MyDlg.py trunk/devtools/RoRSettingsDialog/PrjScript/ trunk/devtools/RoRSettingsDialog/Project.pbc trunk/devtools/RoRSettingsDialog/Project.pbc.bak trunk/devtools/RoRSettingsDialog/VwXComponent.py Added: trunk/devtools/RoRSettingsDialog/App.py =================================================================== --- trunk/devtools/RoRSettingsDialog/App.py (rev 0) +++ trunk/devtools/RoRSettingsDialog/App.py 2007-06-22 22:55:30 UTC (rev 10) @@ -0,0 +1,21 @@ +# -*- coding: iso-8859-1 -*- +import wx + +provider = wx.SimpleHelpProvider() +wx.HelpProvider_Set(provider) + +import MyDlg + +class App(wx.App): + def OnInit(self): + wx.InitAllImageHandlers() + self.main = MyDlg.MyDlg(None,-1,'') + self.main.ShowModal() + return 0 + +def main(): + application = App(0) + application.MainLoop() + +if __name__ == '__main__': + main() Added: trunk/devtools/RoRSettingsDialog/MyDlg.pfr =================================================================== --- trunk/devtools/RoRSettingsDialog/MyDlg.pfr (rev 0) +++ trunk/devtools/RoRSettingsDialog/MyDlg.pfr 2007-06-22 22:55:30 UTC (rev 10) @@ -0,0 +1,1801 @@ +[InitFile] +init=134324 +[ProgettoDati] +l_ProtettoDesigne=0 +l_ReadOnly=0 +l_compilare=0 +l_linkare=0 +l_tipoCompilatore=1 +l_RigeneraSempre=0 +l_syncCompil= +l_objDir= +b_salvato=1 +s_tipoFile=15 +ClsparentCompTipo=0 +l_framTipo=0 +VisualWxVersion=0.87.6.0 +VisualWxIdent=8725 +l_hasAutoSize=1 +strTree=00it=4 01it=5 01it=6 02it=7 02it=8 01it=11 02it=12 03it=13 04it=15 05it=16 05it=17 04it=18 05it=19 05it=20 02it=21 03it=22 04it=23 04it=24 01it=25 02it=26 03it=27 03it=28 03it=29 03it=30 +[Controlli] +n=18 +[Form] +n=1 +ws_name=MyDlg.pfr +ws_dir=.\\ +i_id=31 +s_tipoFile=15 +s_tipoComp=0 +wx_WindowFileADD=-1163005939 +1=15 +[Windows1] +style=wxCAPTION|wxSYSTEM_MENU|wxDIALOG_NO_PARENT|wxDEFAULT_DIALOG_STYLE +Estyle= +i_stylePN=27 +idIncCmpFilCmp=1002 +i_tipoComp=15 +isContenitor=1 +validator= +s_name=MyDlg +subClassName= +i_index=-1 +i_left=0 +i_top=0 +i_height=600 +i_width=500 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_Title=RoR Toolkit +s_tipoWxClasse=wxDialog +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr= +ClsTypF=*crt* +npaint=0 +idIdentCmp=10001 +s_idIdentCmp=ID_CMP_1 +t_idIdentCmp=1 +i_idPArent=0 +i_id=2 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=33008 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=0 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows1/imageName] +4=D:/projects/old/rorterraineditor_0_0_3/ror.ico +[Windows1/imageFlag] +4=0 +[Windows1/imageTipo] +4=1 +[Windows1/style] +17=1 +19=1 +24=1 +25=1 +[Windows1/Estyle] +4=1 +[Windows1/i_width] +[Windows1/i_width/Windows1] +Theme=0 +[Windows1/funcCode] +InitSource=0txt### -*- coding: iso-8859-1 -*-0txt##F1txt##1txt##F2txt##2txt##F3txt##3txt##F4txt##4txt##F +EnableCtor=enable +FocusComp=0 +enableHeaders=enable +[Windows1/funcCode/listEventAll] +count=0 +[Windows1/sizerProp] +0=1 +1=1 +2=1 +3=1 +13=1 +[StatusBar] +ver=1 +count=0 +numCol=3 +enableStBar=false +enableStyle=1 +[Windows2] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=panelBitmap +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=223 +i_width=500 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_Title=RoR Toolkit +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10003 +s_idIdentCmp=ID_CMP_3 +t_idIdentCmp=1 +i_idPArent=4 +i_id=5 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=1 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows2/event] +3=2 +[Windows2/imageName] +0=D:/projects/old/rorterraineditor_0_0_3/splash.bmp +[Windows2/imageFlag] +0=1 +[Windows2/imageTipo] +0=0 +[Windows2/i_width] +[Windows2/i_width/Windows2] +Theme=0 +[Windows2/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows3] +style= +Estyle= +i_stylePN=30 +idIncCmpFilCmp=0 +i_tipoComp=600052 +isContenitor=0 +validator= +s_name=txtRoRDir +subClassName= +i_index=-1 +i_left=6 +i_top=137 +i_height=21 +i_width=100 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxTextCtrl +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10004 +s_idIdentCmp=ID_CMP_4 +t_idIdentCmp=1 +i_idPArent=6 +i_id=7 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows3/i_width] +[Windows3/i_width/Windows3] +Theme=0 +[Windows3/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows4] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnSelectRoRDir +subClassName= +i_index=-1 +i_left=353 +i_top=137 +i_height=21 +i_width=75 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10005 +s_idIdentCmp=ID_CMP_5 +t_idIdentCmp=1 +i_idPArent=6 +i_id=8 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows4/i_width] +[Windows4/i_width/Windows4] +Theme=0 +[Windows4/i_propN] +0=SelectRoR +[Windows4/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows5] +style= +Estyle= +i_stylePN=23 +idIncCmpFilCmp=0 +i_tipoComp=700506 +isContenitor=1 +validator= +s_name=wxnb11c +subClassName= +i_index=-1 +i_left=3 +i_top=281 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxNotebook +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=3 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win* +ClsTypF= +npaint=0 +idIdentCmp=10008 +s_idIdentCmp=ID_CMP_8 +t_idIdentCmp=1 +i_idPArent=4 +i_id=11 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=28 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=2 +[Windows5/i_width] +[Windows5/i_width/Windows5] +Theme=0 +[Windows5/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows6] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=pn12c +subClassName= +i_index=-1 +i_left=4 +i_top=22 +i_height=103 +i_width=420 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=3 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10009 +s_idIdentCmp=ID_CMP_9 +t_idIdentCmp=1 +i_idPArent=0 +i_id=12 +parCompID=11 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows6/i_width] +[Windows6/i_width/Windows6] +Theme=0 +[Windows6/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows7] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=0 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblFPS +subClassName= +i_index=-1 +i_left=6 +i_top=6 +i_height=13 +i_width=50 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10011 +s_idIdentCmp=ID_CMP_11 +t_idIdentCmp=1 +i_idPArent=15 +i_id=16 +parCompID=12 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows7/style] +20=1 +[Windows7/i_width] +[Windows7/i_width/Windows7] +Theme=0 +[Windows7/i_propN] +0=FPS: 30 +[Windows7/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows8] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=600066 +isContenitor=0 +validator= +s_name=sbFPS +subClassName= +i_index=-1 +i_left=62 +i_top=6 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxScrollBar +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10012 +s_idIdentCmp=ID_CMP_12 +t_idIdentCmp=1 +i_idPArent=15 +i_id=17 +parCompID=12 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows8/event] +29=1 +[Windows8/i_width] +[Windows8/i_width/Windows8] +Theme=0 +[Windows8/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows9] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=0 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblWaterTrans +subClassName= +i_index=-1 +i_left=6 +i_top=38 +i_height=20 +i_width=145 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10013 +s_idIdentCmp=ID_CMP_13 +t_idIdentCmp=1 +i_idPArent=18 +i_id=19 +parCompID=12 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows9/style] +20=1 +[Windows9/i_width] +[Windows9/i_width/Windows9] +Theme=0 +[Windows9/i_propN] +0=Water Transparency: 10% +[Windows9/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows10] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=600066 +isContenitor=0 +validator= +s_name=sbWaterTrans +subClassName= +i_index=-1 +i_left=157 +i_top=38 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxScrollBar +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10014 +s_idIdentCmp=ID_CMP_14 +t_idIdentCmp=1 +i_idPArent=18 +i_id=20 +parCompID=12 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows10/event] +29=1 +[Windows10/i_width] +[Windows10/i_width/Windows10] +Theme=0 +[Windows10/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows11] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=pn21c +subClassName= +i_index=-1 +i_left=0 +i_top=0 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=3 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10015 +s_idIdentCmp=ID_CMP_15 +t_idIdentCmp=1 +i_idPArent=0 +i_id=21 +parCompID=11 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows11/i_width] +[Windows11/i_width/Windows11] +Theme=0 +[Windows11/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows12] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnCheckUpdates +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=25 +i_width=412 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10016 +s_idIdentCmp=ID_CMP_16 +t_idIdentCmp=1 +i_idPArent=22 +i_id=23 +parCompID=21 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows12/event] +29=1 +[Windows12/i_width] +[Windows12/i_width/Windows12] +Theme=0 +[Windows12/i_propN] +0=Check for Updates! +[Windows12/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows13] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=0 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblUpdates +subClassName= +i_index=-1 +i_left=3 +i_top=34 +i_height=18 +i_width=412 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10017 +s_idIdentCmp=ID_CMP_17 +t_idIdentCmp=1 +i_idPArent=22 +i_id=24 +parCompID=21 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows13/style] +20=1 +[Windows13/i_width] +[Windows13/i_width/Windows13] +Theme=0 +[Windows13/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows14] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=0 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=btnStartTerrain +subClassName= +i_index=-1 +i_left=3 +i_top=302 +i_height=45 +i_width=428 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10018 +s_idIdentCmp=ID_CMP_18 +t_idIdentCmp=1 +i_idPArent=4 +i_id=25 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=3 +[Windows14/i_width] +[Windows14/i_width/Windows14] +Theme=0 +[Windows14/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows15] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnStartRoR +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10019 +s_idIdentCmp=ID_CMP_19 +t_idIdentCmp=1 +i_idPArent=26 +i_id=27 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows15/event] +29=1 +[Windows15/i_width] +[Windows15/i_width/Windows15] +Theme=0 +[Windows15/i_propN] +0=Start RoR +[Windows15/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows16] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnTerrainEditor +subClassName= +i_index=-1 +i_left=88 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10020 +s_idIdentCmp=ID_CMP_20 +t_idIdentCmp=1 +i_idPArent=26 +i_id=28 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows16/event] +29=1 +[Windows16/i_width] +[Windows16/i_width/Windows16] +Theme=0 +[Windows16/i_propN] +0=Terrain Editor +[Windows16/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows17] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnTruckEditor +subClassName= +i_index=-1 +i_left=173 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=false +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10021 +s_idIdentCmp=ID_CMP_21 +t_idIdentCmp=1 +i_idPArent=26 +i_id=29 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=2 +[Windows17/event] +29=1 +[Windows17/i_width] +[Windows17/i_width/Windows17] +Theme=0 +[Windows17/i_propN] +0=Truck Editor +[Windows17/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows18] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=0 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnExit +subClassName= +i_index=-1 +i_left=343 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10022 +s_idIdentCmp=ID_CMP_22 +t_idIdentCmp=1 +i_idPArent=26 +i_id=30 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=3 +[Windows18/event] +29=1 +[Windows18/i_width] +[Windows18/i_width/Windows18] +Theme=0 +[Windows18/i_propN] +0=Exit +[Windows18/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizer] +nSiz=7 +[sizerWin1] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz4s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=4 +i_idPArent=0 +i_id=4 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=2 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1009 +siz_style=41200 +childSiz=5:6:11:25 +[sizerWin1/id] +0=5 +1=6 +2=11 +3=25 +[sizerWin1/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin2] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz6s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=4 +i_id=6 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=2 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1011 +IndexOfS=1 +siz_style=41200 +childSiz=7:8 +[sizerWin2/id] +0=7 +1=8 +[sizerWin2/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin3] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz13s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=0 +i_id=13 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1018 +siz_style=41200 +childSiz=15:18 +[sizerWin3/id] +0=15 +1=18 +[sizerWin3/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin4] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz15s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=13 +i_id=15 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1020 +IndexOfS=0 +siz_style=41200 +childSiz=16:17 +[sizerWin4/id] +0=16 +1=17 +[sizerWin4/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin5] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz18s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=13 +i_id=18 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1023 +IndexOfS=1 +siz_style=41200 +childSiz=19:20 +[sizerWin5/id] +0=19 +1=20 +[sizerWin5/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin6] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz22s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=0 +i_id=22 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=21 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1027 +siz_style=41200 +childSiz=23:24 +[sizerWin6/id] +0=23 +1=24 +[sizerWin6/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin7] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz26s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=4 +i_idPArent=0 +i_id=26 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=25 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1031 +siz_style=41200 +childSiz=27:28:29:30 +[sizerWin7/id] +0=27 +1=28 +2=29 +3=30 +[sizerWin7/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[menu] +[menu/numero] +n=0 +[EndFile] +end=134324 Added: trunk/devtools/RoRSettingsDialog/MyDlg.pfr.bak =================================================================== --- trunk/devtools/RoRSettingsDialog/MyDlg.pfr.bak (rev 0) +++ trunk/devtools/RoRSettingsDialog/MyDlg.pfr.bak 2007-06-22 22:55:30 UTC (rev 10) @@ -0,0 +1,1880 @@ +[InitFile] +init=134324 +[ProgettoDati] +l_ProtettoDesigne=0 +l_ReadOnly=0 +l_compilare=0 +l_linkare=0 +l_tipoCompilatore=1 +l_RigeneraSempre=0 +l_syncCompil= +l_objDir= +b_salvato=1 +s_tipoFile=15 +ClsparentCompTipo=0 +l_framTipo=0 +VisualWxVersion=0.87.6.0 +VisualWxIdent=8725 +l_hasAutoSize=1 +strTree=00it=4 01it=5 01it=6 02it=7 02it=8 01it=11 02it=12 03it=13 04it=15 05it=16 05it=17 04it=18 05it=19 05it=20 02it=21 03it=22 04it=23 04it=24 01it=25 02it=26 03it=27 03it=28 03it=29 03it=31 03it=30 +[Controlli] +n=19 +[Form] +n=1 +ws_name=MyDlg.pfr +ws_dir=.\\ +i_id=31 +s_tipoFile=15 +s_tipoComp=0 +wx_WindowFileADD=-1163005939 +1=15 +[Windows1] +style=wxCAPTION|wxSYSTEM_MENU|wxDIALOG_NO_PARENT|wxDEFAULT_DIALOG_STYLE +Estyle= +i_stylePN=27 +idIncCmpFilCmp=1002 +i_tipoComp=15 +isContenitor=1 +validator= +s_name=MyDlg +subClassName= +i_index=-1 +i_left=0 +i_top=0 +i_height=600 +i_width=500 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_Title=RoR Toolkit +s_tipoWxClasse=wxDialog +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr= +ClsTypF=*crt* +npaint=0 +idIdentCmp=10001 +s_idIdentCmp=ID_CMP_1 +t_idIdentCmp=1 +i_idPArent=0 +i_id=2 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=33008 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=0 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows1/imageName] +4=D:/projects/old/rorterraineditor_0_0_3/ror.ico +[Windows1/imageFlag] +4=0 +[Windows1/imageTipo] +4=1 +[Windows1/style] +17=1 +19=1 +24=1 +25=1 +[Windows1/Estyle] +4=1 +[Windows1/i_width] +[Windows1/i_width/Windows1] +Theme=0 +[Windows1/funcCode] +InitSource=0txt### -*- coding: iso-8859-1 -*-0txt##F1txt##1txt##F2txt##2txt##F3txt##3txt##F4txt##4txt##F +EnableCtor=enable +FocusComp=0 +enableHeaders=enable +[Windows1/funcCode/listEventAll] +count=0 +[Windows1/sizerProp] +0=1 +1=1 +2=1 +3=1 +13=1 +[StatusBar] +ver=1 +count=0 +numCol=3 +enableStBar=false +enableStyle=1 +[Windows2] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1010 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=panelBitmap +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=223 +i_width=500 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_Title=RoR Toolkit +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10003 +s_idIdentCmp=ID_CMP_3 +t_idIdentCmp=1 +i_idPArent=4 +i_id=5 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=1 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows2/event] +3=2 +[Windows2/imageName] +0=D:/projects/old/rorterraineditor_0_0_3/splash.bmp +[Windows2/imageFlag] +0=1 +[Windows2/imageTipo] +0=0 +[Windows2/i_width] +[Windows2/i_width/Windows2] +Theme=0 +[Windows2/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows3] +style= +Estyle= +i_stylePN=30 +idIncCmpFilCmp=1012 +i_tipoComp=600052 +isContenitor=0 +validator= +s_name=txtRoRDir +subClassName= +i_index=-1 +i_left=6 +i_top=137 +i_height=21 +i_width=100 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxTextCtrl +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10004 +s_idIdentCmp=ID_CMP_4 +t_idIdentCmp=1 +i_idPArent=6 +i_id=7 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows3/i_width] +[Windows3/i_width/Windows3] +Theme=0 +[Windows3/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows4] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1013 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnSelectRoRDir +subClassName= +i_index=-1 +i_left=353 +i_top=137 +i_height=21 +i_width=75 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10005 +s_idIdentCmp=ID_CMP_5 +t_idIdentCmp=1 +i_idPArent=6 +i_id=8 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows4/i_width] +[Windows4/i_width/Windows4] +Theme=0 +[Windows4/i_propN] +0=SelectRoR +[Windows4/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows5] +style= +Estyle= +i_stylePN=23 +idIncCmpFilCmp=1016 +i_tipoComp=700506 +isContenitor=1 +validator= +s_name=wxnb11c +subClassName= +i_index=-1 +i_left=3 +i_top=281 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxNotebook +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=3 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win* +ClsTypF= +npaint=0 +idIdentCmp=10008 +s_idIdentCmp=ID_CMP_8 +t_idIdentCmp=1 +i_idPArent=4 +i_id=11 +parCompID=0 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=28 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=2 +[Windows5/i_width] +[Windows5/i_width/Windows5] +Theme=0 +[Windows5/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows6] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1017 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=pn12c +subClassName= +i_index=-1 +i_left=4 +i_top=22 +i_height=103 +i_width=420 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=3 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10009 +s_idIdentCmp=ID_CMP_9 +t_idIdentCmp=1 +i_idPArent=0 +i_id=12 +parCompID=11 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows6/i_width] +[Windows6/i_width/Windows6] +Theme=0 +[Windows6/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows7] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=1021 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblFPS +subClassName= +i_index=-1 +i_left=6 +i_top=6 +i_height=13 +i_width=50 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10011 +s_idIdentCmp=ID_CMP_11 +t_idIdentCmp=1 +i_idPArent=15 +i_id=16 +parCompID=12 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows7/style] +20=1 +[Windows7/i_width] +[Windows7/i_width/Windows7] +Theme=0 +[Windows7/i_propN] +0=FPS: 30 +[Windows7/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows8] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1022 +i_tipoComp=600066 +isContenitor=0 +validator= +s_name=sbFPS +subClassName= +i_index=-1 +i_left=62 +i_top=6 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxScrollBar +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10012 +s_idIdentCmp=ID_CMP_12 +t_idIdentCmp=1 +i_idPArent=15 +i_id=17 +parCompID=12 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows8/event] +29=1 +[Windows8/i_width] +[Windows8/i_width/Windows8] +Theme=0 +[Windows8/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows9] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=1024 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblWaterTrans +subClassName= +i_index=-1 +i_left=6 +i_top=38 +i_height=20 +i_width=145 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10013 +s_idIdentCmp=ID_CMP_13 +t_idIdentCmp=1 +i_idPArent=18 +i_id=19 +parCompID=12 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows9/style] +20=1 +[Windows9/i_width] +[Windows9/i_width/Windows9] +Theme=0 +[Windows9/i_propN] +0=Water Transparency: 10% +[Windows9/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows10] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1025 +i_tipoComp=600066 +isContenitor=0 +validator= +s_name=sbWaterTrans +subClassName= +i_index=-1 +i_left=157 +i_top=38 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxScrollBar +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10014 +s_idIdentCmp=ID_CMP_14 +t_idIdentCmp=1 +i_idPArent=18 +i_id=20 +parCompID=12 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows10/event] +29=1 +[Windows10/i_width] +[Windows10/i_width/Windows10] +Theme=0 +[Windows10/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows11] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1026 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=pn21c +subClassName= +i_index=-1 +i_left=0 +i_top=0 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=3 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10015 +s_idIdentCmp=ID_CMP_15 +t_idIdentCmp=1 +i_idPArent=0 +i_id=21 +parCompID=11 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +[Windows11/i_width] +[Windows11/i_width/Windows11] +Theme=0 +[Windows11/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows12] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1028 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnCheckUpdates +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=25 +i_width=412 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10016 +s_idIdentCmp=ID_CMP_16 +t_idIdentCmp=1 +i_idPArent=22 +i_id=23 +parCompID=21 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows12/event] +29=1 +[Windows12/i_width] +[Windows12/i_width/Windows12] +Theme=0 +[Windows12/i_propN] +0=Check for Updates! +[Windows12/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows13] +style=wxST_NO_AUTORESIZE +Estyle= +i_stylePN=20 +idIncCmpFilCmp=1029 +i_tipoComp=600051 +isContenitor=0 +validator= +s_name=lblUpdates +subClassName= +i_index=-1 +i_left=3 +i_top=34 +i_height=18 +i_width=412 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxStaticText +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10017 +s_idIdentCmp=ID_CMP_17 +t_idIdentCmp=1 +i_idPArent=22 +i_id=24 +parCompID=21 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows13/style] +20=1 +[Windows13/i_width] +[Windows13/i_width/Windows13] +Theme=0 +[Windows13/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows14] +style= +Estyle= +i_stylePN=16 +idIncCmpFilCmp=1030 +i_tipoComp=700500 +isContenitor=1 +validator= +s_name=btnStartTerrain +subClassName= +i_index=-1 +i_left=3 +i_top=302 +i_height=45 +i_width=428 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxPanel +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*win**panel* +ClsTypF= +npaint=0 +idIdentCmp=10018 +s_idIdentCmp=ID_CMP_18 +t_idIdentCmp=1 +i_idPArent=4 +i_id=25 +parCompID=0 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=12 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=3 +[Windows14/i_width] +[Windows14/i_width/Windows14] +Theme=0 +[Windows14/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows15] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1032 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnStartRoR +subClassName= +i_index=-1 +i_left=3 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10019 +s_idIdentCmp=ID_CMP_19 +t_idIdentCmp=1 +i_idPArent=26 +i_id=27 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=0 +[Windows15/event] +29=1 +[Windows15/i_width] +[Windows15/i_width/Windows15] +Theme=0 +[Windows15/i_propN] +0=Start RoR +[Windows15/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows16] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1033 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnTerrainEditor +subClassName= +i_index=-1 +i_left=88 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10020 +s_idIdentCmp=ID_CMP_20 +t_idIdentCmp=1 +i_idPArent=26 +i_id=28 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=1 +[Windows16/event] +29=1 +[Windows16/i_width] +[Windows16/i_width/Windows16] +Theme=0 +[Windows16/i_propN] +0=Terrain Editor +[Windows16/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows17] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1034 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnTruckEditor +subClassName= +i_index=-1 +i_left=173 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=false +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10021 +s_idIdentCmp=ID_CMP_21 +t_idIdentCmp=1 +i_idPArent=26 +i_id=29 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=2 +[Windows17/event] +29=1 +[Windows17/i_width] +[Windows17/i_width/Windows17] +Theme=0 +[Windows17/i_propN] +0=Truck Editor +[Windows17/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows18] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1035 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnExit +subClassName= +i_index=-1 +i_left=343 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10022 +s_idIdentCmp=ID_CMP_22 +t_idIdentCmp=1 +i_idPArent=26 +i_id=30 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=4 +[Windows18/event] +29=1 +[Windows18/i_width] +[Windows18/i_width/Windows18] +Theme=0 +[Windows18/i_propN] +0=Exit +[Windows18/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[Windows19] +style= +Estyle= +i_stylePN=21 +idIncCmpFilCmp=1036 +i_tipoComp=600060 +isContenitor=0 +validator= +s_name=btnTruckChecker +subClassName= +i_index=-1 +i_left=258 +i_top=3 +i_height=20 +i_width=20 +l_backColor= +l_foreColor= +l_backColorSys= +l_foreColorSys= +b_show=true +b_showD=true +b_Enable=true +s_tipoWxClasse=wxButton +isfuncClsName=0 +funcClsName= +i_massindex= +idSTR= +isVirtual=0 +id=0 +TabOrderEn=0 +TabOrderId=0 +b_NOparentDes=0 +b_NOparentDesComp=0 +b_nocreate=0 +ClsMtr=*crt* +ClsTypF= +npaint=0 +idIdentCmp=10023 +s_idIdentCmp=ID_CMP_23 +t_idIdentCmp=1 +i_idPArent=26 +i_id=31 +parCompID=25 +i_sizeGrow=1 +i_border=3 +is_parent=0 +is_siz=0 +siz_style=41200 +l_enWinSizeMin=0 +b_ItmsizeMinAb=0 +i_ItminSizeH=10 +i_ItminSizeW=20 +iconNum=16 +s_info= +s_funcPrima= +s_funcDopo= +s_funcNewCtor= +s_includeNewCtor= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +dataObj\\panelfitInsS=0 +IndexOfS=3 +[Windows19/event] +29=1 +[Windows19/i_width] +[Windows19/i_width/Windows19] +Theme=0 +[Windows19/i_propN] +0=Truck Checker +[Windows19/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizer] +nSiz=7 +[sizerWin1] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz4s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=4 +i_idPArent=0 +i_id=4 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=2 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1009 +siz_style=41200 +childSiz=5:6:11:25 +[sizerWin1/id] +0=5 +1=6 +2=11 +3=25 +[sizerWin1/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin2] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz6s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=4 +i_id=6 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=2 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1011 +IndexOfS=1 +siz_style=41200 +childSiz=7:8 +[sizerWin2/id] +0=7 +1=8 +[sizerWin2/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin3] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz13s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=0 +i_id=13 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1018 +siz_style=41200 +childSiz=15:18 +[sizerWin3/id] +0=15 +1=18 +[sizerWin3/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin4] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz15s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=13 +i_id=15 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1020 +IndexOfS=0 +siz_style=41200 +childSiz=16:17 +[sizerWin4/id] +0=16 +1=17 +[sizerWin4/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin5] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz18s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=13 +i_id=18 +i_sizeGrow=0 +i_border=3 +is_parent=0 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=12 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=0 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1023 +IndexOfS=1 +siz_style=41200 +childSiz=19:20 +[sizerWin5/id] +0=19 +1=20 +[sizerWin5/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin6] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz22s +subClassName= +i_tipoComp=600002 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=2 +i_idPArent=0 +i_id=22 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=21 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1027 +siz_style=41200 +childSiz=23:24 +[sizerWin6/id] +0=23 +1=24 +[sizerWin6/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[sizerWin7] +i_Col=2 +i_SpCol=0 +i_Row=2 +i_SpRow=0 +s_text= +s_name=sz26s +subClassName= +i_tipoComp=600003 +b_sizeMinAb=0 +i_minSizeH=0 +i_minSizeW=0 +l_nComInSiz=5 +i_idPArent=0 +i_id=26 +i_sizeGrow=0 +i_border=3 +is_parent=1 +is_siz=1 +s_tipoWxClasse=wxBoxSizer +isfuncClsName=0 +funcClsName= +is_parentId=25 +ClsMtr=*siz* +ClsTypF= +npaint=0 +l_sizAutoLayout=1 +i_left=0 +i_top=0 +i_height=10 +i_width=10 +s_info= +dataObj\\SizRowSpan=1 +dataObj\\SizColSpan=1 +dataObj\\SizRowPos=0 +dataObj\\SizColPos=0 +SizeSpaceW=10 +SizeSpaceH=20 +idIncCmpFilCmp=1031 +siz_style=41200 +childSiz=27:28:29:31:30 +[sizerWin7/id] +0=27 +1=28 +2=29 +3=31 +4=30 +[sizerWin7/sizerProp] +0=1 +1=1 +2=1 +3=1 +5=1 +13=1 +[menu] +[menu/numero] +n=0 +[EndFile] +end=134324 Added: trunk/devtools/RoRSettingsDialog/MyDlg.py =================================================================== --- trunk/devtools/RoRSettingsDialog/MyDlg.py (rev 0) +++ trunk/devtools/RoRSettingsDialog/MyDlg.py 2007-06-22 22:55:30 UTC (rev 10) @@ -0,0 +1,203 @@ +# -*- coding: iso-8859-1 -*- +# Don't modify comment + +import wx +#[inc]add your include files here + +#[inc]end your include + +class MyDlg(wx.Dialog): + def __init__(self,parent,id = -1,title = '',pos = wx.Point(0,0),size = wx.Size(500,600),style = wx.DEFAULT_DIALOG_STYLE,name = 'dialogBox'): + pre=wx.PreDialog() + self.OnPreCreate() + pre.Create(parent,id,title,pos,size,wx.CAPTION|wx.SYSTEM_MENU|wx.DIALOG_NO_PARENT|wx.DEFAULT_DIALOG_STYLE,name) + self.PostCreate(pre) + self.initBefore() + self.VwXinit() + self.initAfter() + + def __del__(self): + self.Ddel() + return + + + def VwXinit(self): + self.fileImgBuf=[None] * 1 + self.fileImgBuf[0] = wx.Bitmap("D:/projects/old/rorterraineditor_0_0_3/splash.bmp",wx.BITMAP_TYPE_BMP) + self.panelBitmapImg0=self.fileImgBuf[0]; + self.SetIcon(wx.Icon("D:/projects/old/rorterraineditor_0_0_3/ror.ico",wx.BITMAP_TYPE_ICO)); + self.SetTitle('RoR Toolkit') + self.panelBitmap = wx.Panel(self,-1,wx.Point(3,3),wx.Size(500,223)) + self.panelBitmap.SetLabel('RoR Toolkit') + self.panelBitmap.Bind(wx.EVT_ERASE_BACKGROUND,self.VwXpanelBitmap_VwXEvOnEraseBackground) + self.txtRoRDir = wx.TextCtrl(self,-1,"",wx.Point(6,137),wx.Size(100,21)) + self.btnSelectRoRDir = wx.Button(self,-1,"",wx.Point(353,137),wx.Size(75,21)) + self.btnSelectRoRDir.SetLabel("SelectRoR") + self.wxnb11c = wx.Notebook(self,-1,wx.Point(3,281),wx.Size(20,20)) + self.pn12c = wx.Panel(self.wxnb11c,-1,wx.Point(4,22),wx.Size(420,103)) + self.wxnb11c.AddPage(self.pn12c,'tab n\xB0: 0',0) + self.lblFPS = wx.StaticText(self.pn12c,-1,"",wx.Point(6,6),wx.Size(50,13),wx.ST_NO_AUTORESIZE) + self.lblFPS.SetLabel("FPS: 30") + self.sbFPS = wx.ScrollBar(self.pn12c,-1,wx.Point(62,6),wx.Size(20,20),wx.SB_HORIZONTAL) + self.Bind(wx.EVT_SCROLL,self.sbFPS_VwXEvOnScrollValue,self.sbFPS) + self.lblWaterTrans = wx.StaticText(self.pn12c,-1,"",wx.Point(6,38),wx.Size(145,20),wx.ST_NO_AUTORESIZE) + self.lblWaterTrans.SetLabel("Water Transparency: 10%") + self.sbWaterTrans = wx.ScrollBar(self.pn12c,-1,wx.Point(157,38),wx.Size(20,20),wx.SB_HORIZONTAL) + self.Bind(wx.EVT_SCROLL,self.sbWaterTrans_VwXEvOnScrollValue,self.sbWaterTrans) + self.pn21c = wx.Panel(self.wxnb11c,-1,wx.Point(0,0),wx.Size(20,20)) + self.wxnb11c.AddPage(self.pn21c,'tab n\xB0: 1',0) + self.btnCheckUpdates = wx.Button(self.pn21c,-1,"",wx.Point(3,3),wx.Size(412,25)) + self.btnCheckUpdates.SetLabel("Check for Updates!") + self.Bind(wx.EVT_BUTTON,self.btnCheckUpdates_VwXEvOnButtonClick,self.btnCheckUpdates) + self.lblUpdates = wx.StaticText(self.pn21c,-1,"",wx.Point(3,34),wx.Size(412,18),wx.ST_NO_AUTORESIZE) + self.btnStartTerrain = wx.Panel(self,-1,wx.Point(3,302),wx.Size(428,45)) + self.btnStartRoR = wx.Button(self.btnStartTerrain,-1,"",wx.Point(3,3),wx.Size(20,20)) + self.btnStartRoR.SetLabel("Start RoR") + self.Bind(wx.EVT_BUTTON,self.btnStartRoR_VwXEvOnButtonClick,self.btnStartRoR) + self.btnTerrainEditor = wx.Button(self.btnStartTerrain,-1,"",wx.Point(88,3),wx.Size(20,20)) + self.btnTerrainEditor.SetLabel("Terrain Editor") + self.Bind(wx.EVT_BUTTON,self.btnTerrainEditor_VwXEvOnButtonClick,self.btnTerrainEditor) + self.btnTruckEditor = wx.Button(self.btnStartTerrain,-1,"",wx.Point(173,3),wx.Size(20,20)) + self.btnTruckEditor.Enable(False) + self.btnTruckEditor.SetLabel("Truck Editor") + self.Bind(wx.EVT_BUTTON,self.btnTruckEditor_VwXEvOnButtonClick,self.btnTruckEditor) + self.btnExit = wx.Button(self.btnStartTerrain,-1,"",wx.Point(343,3),wx.Size(20,20)) + self.btnExit.SetLabel("Exit") + self.Bind(wx.EVT_BUTTON,self.btnExit_VwXEvOnButtonClick,self.btnExit) + self.sz4s = wx.BoxSizer(wx.VERTICAL) + self.sz6s = wx.BoxSizer(wx.HORIZONTAL) + self.sz13s = wx.BoxSizer(wx.VERTICAL) + self.sz15s = wx.BoxSizer(wx.HORIZONTAL) + self.sz18s = wx.BoxSizer(wx.HORIZONTAL) + self.sz22s = wx.BoxSizer(wx.VERTICAL) + self.sz26s = wx.BoxSizer(wx.HORIZONTAL) + self.sz4s.Add(self.panelBitmap,1,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE,3) + self.sz4s.SetItemMinSize(self.panelBitmap,20,10) + self.sz4s.Add(self.sz6s,0,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE,3) + self.sz4s.Add(self.wxnb11c,1,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE,3) + self.sz4s.Add(self.btnStartTerrain,0,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE,3) + self.sz6s.Add(self.txtRoRDir,1,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE,3) + self.sz6s.Add(self.btnSelectRoRDir,0,wx.TOP|wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND|wx.... [truncated message content] |
From: <ror...@us...> - 2007-06-22 23:32:28
|
Revision: 11 http://roreditor.svn.sourceforge.net/roreditor/?rev=11&view=rev Author: rorthomas Date: 2007-06-22 16:32:23 -0700 (Fri, 22 Jun 2007) Log Message: ----------- * added original code by pricorde * removed visualwx stuff - too buggy * modified starter to use manual created gui * removed editor cfg, so you must select your ror dir first Modified Paths: -------------- trunk/lib/ror/starter.py trunk/rortoolkit.py Added Paths: ----------- trunk/devtools/originalcode/ trunk/devtools/originalcode/FlexMesh.h trunk/devtools/originalcode/FlexObj.h trunk/devtools/originalcode/random snippets.h Removed Paths: ------------- trunk/devtools/RoRSettingsDialog/ trunk/lib/ror/editor.cfg trunk/lib/ror/settingsdialog.py Added: trunk/devtools/originalcode/FlexMesh.h =================================================================== --- trunk/devtools/originalcode/FlexMesh.h (rev 0) +++ trunk/devtools/originalcode/FlexMesh.h 2007-06-22 23:32:23 UTC (rev 11) @@ -0,0 +1,400 @@ +#ifndef __FlexMesh_H__ +#define __FlexMesh_H__ + +//wheels only! + +#include "Ogre.h" +//#include "Beam.h" + +using namespace Ogre; + + +//class Beam; + +class FlexMesh +{ +private: +typedef struct +{ + Vector3 vertex; + Vector3 normal; +// Vector3 color; + Vector2 texcoord; +} CoVertice_t; + +typedef struct +{ + Vector3 vertex; +} posVertice_t; + +typedef struct +{ + Vector3 normal; +// Vector3 color; + Vector2 texcoord; +} norVertice_t; + + Ogre::MeshPtr msh; + SubMesh* subface; + SubMesh* subband; + VertexDeclaration* decl; + HardwareVertexBufferSharedPtr vbuf; + + size_t nVertices; + size_t vbufCount; + //shadow + union + { + float *shadowposvertices; + posVertice_t *coshadowposvertices; + }; + union + { + float *shadownorvertices; + norVertice_t *coshadownorvertices; + }; + union + { + float *vertices; + CoVertice_t *covertices; + }; + //nodes + int *nodeIDs; + + size_t ibufCount; + unsigned short *facefaces; + unsigned short *bandfaces; + node_t *nodes; + int nbrays; + SceneManager *smanager; + +public: + + + FlexMesh(SceneManager *manager, char* name, node_t *nds, int n1, int n2, int nstart, int nrays, char* texface, char* texband) + { + smanager=manager; + nbrays=nrays; + nodes=nds; + /// Create the mesh via the MeshManager + msh = MeshManager::getSingleton().createManual(name, "General"); + + /// Create submeshes + subface = msh->createSubMesh(); + subband = msh->createSubMesh(); + + //materials + subface->setMaterialName(texface); + subband->setMaterialName(texband); + + /// Define the vertices (8 vertices, each consisting of 3 groups of 3 floats + nVertices = 4*nrays+2; + vbufCount = (2*3+2)*nVertices; + vertices=(float*)malloc(vbufCount*sizeof(float)); + //shadow + shadownorvertices=(float*)malloc(nVertices*(3+2)*sizeof(float)); + shadowposvertices=(float*)malloc(nVertices*3*2*sizeof(float)); + nodeIDs=(int*)malloc(nVertices*sizeof(int)); + + //define node ids + nodeIDs[0]=n1; + nodeIDs[1]=n2; + int i; + for (i=0; i<nrays; i++) + { + nodeIDs[2+i*2]=nstart+i*2; + nodeIDs[2+i*2+1]=nstart+i*2+1; + nodeIDs[2+2*nrays+i*2]=nstart+i*2; + nodeIDs[2+2*nrays+i*2+1]=nstart+i*2+1; + } + //color fix to remove +// for (i=0; i<(int)nVertices; i++) +// { +// covertices[i].color=Vector3(0.0, 0.0, 0.0); +// }; + //textures coordinates + covertices[0].texcoord=Vector2(0.5, 0.5); + covertices[1].texcoord=Vector2(0.5, 0.5); + for (i=0; i<nrays; i++) + { + //face + covertices[2+i*2].texcoord=Vector2(0.5+0.5*sin(i*2.0*3.14159/nrays), 0.5+0.5*cos(i*2.0*3.14159/nrays)); + covertices[2+i*2+1].texcoord=covertices[2+i*2].texcoord; + //band + covertices[2+2*nrays+(i/2)*4].texcoord=Vector2(0.0, 0.0); + covertices[2+2*nrays+(i/2)*4+1].texcoord=Vector2(0.0, 1.0); + covertices[2+2*nrays+(i/2)*4+2].texcoord=Vector2(1.0, 0.0); + covertices[2+2*nrays+(i/2)*4+3].texcoord=Vector2(1.0, 1.0); + } + + /// Define triangles + /// The values in this table refer to vertices in the above table + ibufCount = 3*2*nrays; + facefaces=(unsigned short*)malloc(ibufCount*sizeof(unsigned short)); + bandfaces=(unsigned short*)malloc(ibufCount*sizeof(unsigned short)); + for (i=0; i<nrays; i++) + { + //wheel sides + facefaces[3*(i*2)]=0; facefaces[3*(i*2)+1]=2+i*2; facefaces[3*(i*2)+2]=2+((i+1)%nrays)*2; + facefaces[3*(i*2+1)]=1; facefaces[3*(i*2+1)+2]=2+i*2+1; facefaces[3*(i*2+1)+1]=2+((i+1)%nrays)*2+1; + //wheel band + bandfaces[3*(i*2)]=2+2*nrays+i*2; bandfaces[3*(i*2)+1]=2+2*nrays+i*2+1; bandfaces[3*(i*2)+2]=2+2*nrays+((i+1)%nrays)*2+1; + bandfaces[3*(i*2+1)]=2+2*nrays+((i+1)%nrays)*2+1; bandfaces[3*(i*2+1)+2]=2+2*nrays+i*2; bandfaces[3*(i*2+1)+1]=2+2*nrays+((i+1)%nrays)*2; + } + + //update coords + updateVertices(); + + + + /// Create vertex data structure for 8 vertices shared between submeshes + msh->sharedVertexData = new VertexData(); + msh->sharedVertexData->vertexCount = nVertices; + + /// Create declaration (memory format) of vertex data + decl = msh->sharedVertexData->vertexDeclaration; + size_t offset = 0; + decl->addElement(0, offset, VET_FLOAT3, VES_POSITION); + offset += VertexElement::getTypeSize(VET_FLOAT3); + decl->addElement(0, offset, VET_FLOAT3, VES_NORMAL); + offset += VertexElement::getTypeSize(VET_FLOAT3); +// decl->addElement(0, offset, VET_FLOAT3, VES_DIFFUSE); +// offset += VertexElement::getTypeSize(VET_FLOAT3); + decl->addElement(0, offset, VET_FLOAT2, VES_TEXTURE_COORDINATES, 0); + offset += VertexElement::getTypeSize(VET_FLOAT2); + + /// Allocate vertex buffer of the requested number of vertices (vertexCount) + /// and bytes per vertex (offset) + vbuf = + HardwareBufferManager::getSingleton().createVertexBuffer( + offset, msh->sharedVertexData->vertexCount, HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE); + + /// Upload the vertex data to the card + vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true); + + /// Set vertex buffer binding so buffer 0 is bound to our vertex buffer + VertexBufferBinding* bind = msh->sharedVertexData->vertexBufferBinding; + bind->setBinding(0, vbuf); + + //for the face + /// Allocate index buffer of the requested number of vertices (ibufCount) + HardwareIndexBufferSharedPtr faceibuf = HardwareBufferManager::getSingleton(). + createIndexBuffer( + HardwareIndexBuffer::IT_16BIT, + ibufCount, + HardwareBuffer::HBU_STATIC_WRITE_ONLY); + + /// Upload the index data to the card + faceibuf->writeData(0, faceibuf->getSizeInBytes(), facefaces, true); + + /// Set parameters of the submesh + subface->useSharedVertices = true; + subface->indexData->indexBuffer = faceibuf; + subface->indexData->indexCount = ibufCount; + subface->indexData->indexStart = 0; + + //for the band + /// Allocate index buffer of the requested number of vertices (ibufCount) + HardwareIndexBufferSharedPtr bandibuf = HardwareBufferManager::getSingleton(). + createIndexBuffer( + HardwareIndexBuffer::IT_16BIT, + ibufCount, + HardwareBuffer::HBU_STATIC_WRITE_ONLY); + + /// Upload the index data to the card + bandibuf->writeData(0, bandibuf->getSizeInBytes(), bandfaces, true); + + /// Set parameters of the submesh + subband->useSharedVertices = true; + subband->indexData->indexBuffer = bandibuf; + subband->indexData->indexCount = ibufCount; + subband->indexData->indexStart = 0; + + /// Set bounding information (for culling) + msh->_setBounds(AxisAlignedBox(-1,-1,0,1,1,0)); + msh->_setBoundingSphereRadius(Math::Sqrt(1*1+1*1)); + + /// Notify Mesh object that it has been loaded +msh->buildEdgeList(); +//msh->buildTangentVectors(); +/*unsigned short src, dest; +if (!msh->suggestTangentVectorBuildParams(src, dest)) +{ + msh->buildTangentVectors(src, dest); +} +*/ + +msh->load(); +//msh->touch(); +// msh->load(); + + //msh->buildEdgeList(); + } + + +Vector3 updateVertices() +{ + int i; + Vector3 center; + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + //optimization possible here : just copy bands on face + covertices[0].vertex=nodes[nodeIDs[0]].Position-center; + //normals + covertices[0].normal=nodes[nodeIDs[0]].Position-nodes[nodeIDs[1]].Position; + covertices[0].normal.normalise(); + + covertices[1].vertex=nodes[nodeIDs[1]].Position-center; + //normals + covertices[1].normal=-covertices[0].normal; +// covertices[1].normal.normalise(); + for (i=0; i<nbrays*2; i++) + { + covertices[2+i].vertex=nodes[nodeIDs[2+i]].Position-center; + //normals + if ((i%2)==0) + { + covertices[2+i].normal=nodes[nodeIDs[2+i]].Position-nodes[nodeIDs[2+i+1]].Position; + covertices[2+i].normal.normalise(); + } else covertices[2+i].normal=-covertices[2+i-1].normal; + //bands + covertices[2+2*nbrays+i].vertex=covertices[2+i].vertex; + covertices[2+2*nbrays+i].normal=covertices[2+i].vertex; + covertices[2+2*nbrays+i].normal.normalise(); + } + return center; +} + + +Vector3 updateShadowVertices() +{ + int i; + Vector3 center; +//msh->buildEdgeList(); + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + + coshadowposvertices[0].vertex=nodes[nodeIDs[0]].Position-center; + //normals + coshadownorvertices[0].normal=nodes[nodeIDs[0]].Position-nodes[nodeIDs[1]].Position; +// coshadownorvertices[0].normal=nodes[nodeIDs[0]].Position-center; + coshadownorvertices[0].normal.normalise(); + + coshadowposvertices[1].vertex=nodes[nodeIDs[1]].Position-center; + //normals + coshadownorvertices[1].normal=-coshadownorvertices[0].normal; +// coshadownorvertices[1].normal=nodes[nodeIDs[1]].Position-center; +// coshadownorvertices[1].normal.normalise(); + + for (i=0; i<nbrays*2; i++) + { + coshadowposvertices[2+i].vertex=nodes[nodeIDs[2+i]].Position-center; + + coshadownorvertices[2+i].normal=nodes[nodeIDs[2+i]].Position-center; + coshadownorvertices[2+i].normal.normalise(); + //normals + if ((i%2)==0) + { + coshadownorvertices[2+i].normal=nodes[nodeIDs[2+i]].Position-nodes[nodeIDs[2+i+1]].Position; + coshadownorvertices[2+i].normal.normalise(); + } else + { + coshadownorvertices[2+i].normal=-coshadownorvertices[2+i-1].normal; + } + //bands + coshadowposvertices[2+2*nbrays+i].vertex=coshadowposvertices[2+i].vertex; + if ((i%2)==0) + { + coshadownorvertices[2+2*nbrays+i].normal=nodes[nodeIDs[2+i]].Position-nodes[nodeIDs[0]].Position; + } else + { + coshadownorvertices[2+2*nbrays+i].normal=nodes[nodeIDs[2+i]].Position-nodes[nodeIDs[1]].Position; + }; +// coshadownorvertices[2+2*nbrays+i].normal=coshadowposvertices[2+i].vertex; + coshadownorvertices[2+2*nbrays+i].normal.normalise(); + + } + + for (i=0; i<2+nbrays*4; i++) + { + coshadowposvertices[i+2+nbrays*4].vertex=coshadowposvertices[i].vertex; + coshadownorvertices[i].texcoord=covertices[i].texcoord; + } +//msh->touch(); + return center; +} + +/* +Vector3 updateShadowVertices() +{ + int i; + Vector3 center; + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + + coshadowposvertices[0].vertex=nodes[nodeIDs[0]].Position-center; + //normals + coshadownorvertices[0].normal=coshadowposvertices[0].vertex; + coshadownorvertices[0].normal.normalise(); + + coshadowposvertices[1].vertex=nodes[nodeIDs[1]].Position-center; + //normals + coshadownorvertices[1].normal=coshadowposvertices[1].vertex; + coshadownorvertices[1].normal.normalise(); + //texcoords + coshadownorvertices[0].texcoord=covertices[0].texcoord; + coshadownorvertices[1].texcoord=covertices[1].texcoord; + for (i=0; i<nbrays*2; i++) + { + coshadowposvertices[2+i].vertex=nodes[nodeIDs[2+i]].Position-center; + //normals + coshadownorvertices[2+i].normal=coshadowposvertices[2+i].vertex; + coshadownorvertices[2+i].normal.normalise(); + //optimization + coshadowposvertices[2+2*nbrays+i].vertex=coshadowposvertices[2+i].vertex; + coshadownorvertices[2+2*nbrays+i].normal=coshadownorvertices[2+i].normal; + + //texcoords + coshadownorvertices[2+i].texcoord=covertices[2+i].texcoord; + coshadownorvertices[2+2*nbrays+i].texcoord=covertices[2+2*nbrays+i].texcoord; + } + return center; +} +*/ + +Vector3 flexit() +{ + Vector3 center; + if (smanager->getShadowTechnique()==SHADOWTYPE_STENCIL_MODULATIVE || smanager->getShadowTechnique()==SHADOWTYPE_STENCIL_ADDITIVE) + { + center=updateShadowVertices(); + //find the binding + unsigned posbinding=msh->sharedVertexData->vertexDeclaration->findElementBySemantic(VES_POSITION)->getSource(); + HardwareVertexBufferSharedPtr pbuf=msh->sharedVertexData->vertexBufferBinding->getBuffer(posbinding); + pbuf->lock(HardwareBuffer::HBL_DISCARD); + pbuf->writeData(0, pbuf->getSizeInBytes(), shadowposvertices, true); + pbuf->unlock(); + //find the binding + unsigned norbinding=msh->sharedVertexData->vertexDeclaration->findElementBySemantic(VES_NORMAL)->getSource(); + HardwareVertexBufferSharedPtr nbuf=msh->sharedVertexData->vertexBufferBinding->getBuffer(norbinding); + nbuf->lock(HardwareBuffer::HBL_DISCARD); + nbuf->writeData(0, nbuf->getSizeInBytes(), shadownorvertices, true); + nbuf->unlock(); + + EdgeData * ed=msh->getEdgeList(); + ed->updateFaceNormals(0, pbuf); + } + else + { + center=updateVertices(); + vbuf->lock(HardwareBuffer::HBL_DISCARD); + vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true); + vbuf->unlock(); + //msh->sharedVertexData->vertexBufferBinding->getBuffer(0)->writeData(0, vbuf->getSizeInBytes(), vertices, true); + } + return center; +} + + +}; + + + +#endif Added: trunk/devtools/originalcode/FlexObj.h =================================================================== --- trunk/devtools/originalcode/FlexObj.h (rev 0) +++ trunk/devtools/originalcode/FlexObj.h 2007-06-22 23:32:23 UTC (rev 11) @@ -0,0 +1,416 @@ +#ifndef __FlexObj_H__ +#define __FlexObj_H__ + +//body + +#include "Ogre.h" +//#include "Beam.h" + +using namespace Ogre; + + +//class Beam; + +class FlexObj +{ +private: +typedef struct +{ + Vector3 vertex; + Vector3 normal; +// Vector3 color; + Vector2 texcoord; +} CoVertice_t; + +typedef struct +{ + Vector3 vertex; +} posVertice_t; + +typedef struct +{ + Vector3 normal; +// Vector3 color; + Vector2 texcoord; +} norVertice_t; + + Ogre::MeshPtr msh; + SubMesh** subs; + VertexDeclaration* decl; + HardwareVertexBufferSharedPtr vbuf; + + size_t nVertices; + size_t vbufCount; + //shadow + union + { + float *shadowposvertices; + posVertice_t *coshadowposvertices; + }; + union + { + float *shadownorvertices; + norVertice_t *coshadownorvertices; + }; + + union + { + float *vertices; + CoVertice_t *covertices; + }; + //nodes + int *nodeIDs; + + size_t ibufCount; + unsigned short *faces; + node_t *nodes; + int nbrays; + SceneManager *smanager; + + float *sref; + +public: + + + FlexObj(SceneManager *manager, node_t *nds, int numtexcoords, Vector3* texcoords, int numtriangles, int* triangles, int numsubmeshes, int* subtexindex, int* subtriindex, char* texname, char* name, int* subisback, char* backtexname, char* transtexname) + { + unsigned int i; + int j; + /* + //okay, we munch a bit the data to optimize submesh count + Vector3* texcoords=(Vector3*)malloc(sizeof(Vector3)*numtexcoords); + int* triangles=(int*)malloc(sizeof(int)*3*numtriangles); + int numsubmeshes=3; + int subtexindex[4]; + int subtriindex[4]; + int subisback[3]={0,1,2}; + int numtex[3]={0,0,0}; + int numtri[3]={0,0,0}; + int postex[3]={0,0,0}; + int postri[3]={0,0,0}; + for (j=0; j<onumsubmeshes; j++) + { + int type=0; + if (j<numsubmeshes-1) + { + type=osubisback[j+1]; + } + numtex[type]+=osubtexindex[j+1]-osubtexindex[j]; + numtri[type]+=osubtriindex[j+1]-osubtriindex[j]; + } + postex[0]=0; postex[1]=numtex[0]; postex[2]=numtex[0]+numtex[1]; + subtexindex[0]=0; subtexindex[1]=numtex[0]; subtexindex[2]=numtex[0]+numtex[1]; subtexindex[3]=numtex[0]+numtex[1]+numtex[2]; + postri[0]=0; postri[1]=numtri[0]; postri[2]=numtri[0]+numtri[1]; + subtriindex[0]=0; subtriindex[1]=numtri[0]; subtriindex[2]=numtri[0]+numtri[1]; subtriindex[3]=numtri[0]+numtri[1]+numtri[2]; + for (j=0; j<onumsubmeshes; j++) + { + int type=0; + if (j<numsubmeshes-1) + { + type=osubisback[j+1]; + } + for (i=0; i<osubtexindex[j+1]-osubtexindex[j]; i++) + { + texcoords[postex[type]]=otexcoords[osubtexindex[j]+i]; + } + postex[type]+=osubtexindex[j+1]-osubtexindex[j]; + for (i=0; i<osubtriindex[j+1]-osubtriindex[j]; i++) + { + int k; + for (k=0; k<3; k++) + triangles[postri[type]*3+k]=otriangles[(osubtriindex[j]+i)*3+k]; + } + postri[type]+=osubtriindex[j+1]-osubtriindex[j]; + } +*/ + //finished munching + smanager=manager; + nodes=nds; + /// Create the mesh via the MeshManager + msh = MeshManager::getSingleton().createManual(name, "General"); + + /// Create submeshes + subs=(SubMesh**)malloc(numsubmeshes*sizeof(SubMesh*)); + for (j=0; j<numsubmeshes; j++) + { + subs[j] = msh->createSubMesh(); + //materials + if (j<numsubmeshes-1) + { + if (subisback[j+1]==0) subs[j]->setMaterialName(texname); + if (subisback[j+1]==1) subs[j]->setMaterialName(backtexname); + if (subisback[j+1]==2) subs[j]->setMaterialName(transtexname); + } + else + subs[j]->setMaterialName(texname); + }; + + /// Define the vertices (8 vertices, each consisting of 3 groups of 3 floats + nVertices = numtexcoords; + vbufCount = (2*3+2)*nVertices; + vertices=(float*)malloc(vbufCount*sizeof(float)); + //shadow + shadownorvertices=(float*)malloc(nVertices*(3+2)*sizeof(float)); + shadowposvertices=(float*)malloc(nVertices*3*2*sizeof(float)); + nodeIDs=(int*)malloc(nVertices*sizeof(int)); + + //define node ids + for (i=0; i<nVertices; i++) + { + nodeIDs[i]=(int)(texcoords[i].x); + } + + //textures coordinates + for (i=0; i<nVertices; i++) + { + covertices[i].texcoord=Vector2(texcoords[i].y,texcoords[i].z); + } + + /// Define triangles + /// The values in this table refer to vertices in the above table + ibufCount = 3*numtriangles; + faces=(unsigned short*)malloc(ibufCount*sizeof(unsigned short)); + for (i=0; i<ibufCount; i++) + { + faces[i]=findID(i/3, triangles[i], numsubmeshes, subtexindex, subtriindex); + } + + sref=(float*)malloc(numtriangles*sizeof(float)); + + for (i=0; i<(unsigned int)numtriangles;i++) + { + Vector3 v1, v2; + v1=nodes[nodeIDs[faces[i*3+1]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v2=nodes[nodeIDs[faces[i*3+2]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v1=v1.crossProduct(v2); + sref[i]=v1.length()*2.0; + } + + + //update coords + updateVertices(); + + + + /// Create vertex data structure for vertices shared between submeshes + msh->sharedVertexData = new VertexData(); + msh->sharedVertexData->vertexCount = nVertices; + + + /// Create declaration (memory format) of vertex data + decl = msh->sharedVertexData->vertexDeclaration; + size_t offset = 0; + decl->addElement(0, offset, VET_FLOAT3, VES_POSITION); + offset += VertexElement::getTypeSize(VET_FLOAT3); + decl->addElement(0, offset, VET_FLOAT3, VES_NORMAL); + offset += VertexElement::getTypeSize(VET_FLOAT3); +// decl->addElement(0, offset, VET_FLOAT3, VES_DIFFUSE); +// offset += VertexElement::getTypeSize(VET_FLOAT3); + decl->addElement(0, offset, VET_FLOAT2, VES_TEXTURE_COORDINATES, 0); + offset += VertexElement::getTypeSize(VET_FLOAT2); + + + /// Allocate vertex buffer of the requested number of vertices (vertexCount) + /// and bytes per vertex (offset) + vbuf = + HardwareBufferManager::getSingleton().createVertexBuffer( + offset, msh->sharedVertexData->vertexCount, HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE); + + /// Upload the vertex data to the card + vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true); + + + /// Set vertex buffer binding so buffer 0 is bound to our vertex buffer + VertexBufferBinding* bind = msh->sharedVertexData->vertexBufferBinding; + bind->setBinding(0, vbuf); + + + + + /// Set parameters of the submeshes + for (j=0; j<numsubmeshes; j++) + { + int smcount=3*(subtriindex[j+1]-subtriindex[j]); + subs[j]->useSharedVertices = true; + /// Allocate index buffer of the requested number of vertices (ibufCount) + HardwareIndexBufferSharedPtr ibuf = HardwareBufferManager::getSingleton(). + createIndexBuffer( + HardwareIndexBuffer::IT_16BIT, + smcount, + HardwareBuffer::HBU_STATIC_WRITE_ONLY); + + /// Upload the index data to the card + ibuf->writeData(0, ibuf->getSizeInBytes(), &faces[subtriindex[j]*3], true); + subs[j]->indexData->indexBuffer = ibuf; + subs[j]->indexData->indexCount = smcount; + subs[j]->indexData->indexStart = 0; + } + + + /// Set bounding information (for culling) + msh->_setBounds(AxisAlignedBox(-100,-100,-100,100,100,100)); + msh->_setBoundingSphereRadius(100); + + + /// Notify Mesh object that it has been loaded + msh->load(); + msh->buildEdgeList(); + + } + +//find the zeroed id of the node v in the context of the tidx triangle +int findID(int tidx, int v, int numsubmeshes, int* subtexindex, int* subtriindex) +{ + int j; + //first: find the context from the triangle index tidx + int context; + for (context=0; context<numsubmeshes+1; context++) if (tidx<subtriindex[context]) {context--;break;}; + //okay, now search in the vertice block corresponding to the context + for (j=subtexindex[context]; j<subtexindex[context+1]; j++) if (nodeIDs[j]==v) return j; + return 0; +} + +/*Vector3 updateVertices() +{ + unsigned int i; + Vector3 center; + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + for (i=0; i<nVertices; i++) + { + covertices[i].vertex=nodes[nodeIDs[i]].Position-center; + //normals + covertices[i].normal=covertices[i].vertex; + covertices[i].normal.normalise(); + } + + return center; +} +*/ + +//with normals +Vector3 updateVertices() +{ + unsigned int i; + Vector3 center; + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + for (i=0; i<nVertices; i++) + { + //set position + covertices[i].vertex=nodes[nodeIDs[i]].Position-center; + //reset normals + covertices[i].normal=Vector3::ZERO; + } + //accumulate normals per triangle + for (i=0; i<ibufCount/3; i++) + { + Vector3 v1, v2; + v1=nodes[nodeIDs[faces[i*3+1]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v2=nodes[nodeIDs[faces[i*3+2]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v1=v1.crossProduct(v2); + float s=v1.length(); + //avoid large tris + if (s>sref[i]) + { + covertices[faces[i*3+1]].vertex=covertices[faces[i*3]].vertex+Vector3(0.1,0,0); + covertices[faces[i*3+2]].vertex=covertices[faces[i*3]].vertex+Vector3(0,0,0.1); + } + //v1.normalise(); + v1=v1/s; + covertices[faces[i*3]].normal+=v1; + covertices[faces[i*3+1]].normal+=v1; + covertices[faces[i*3+2]].normal+=v1; + } + //normalize + for (i=0; i<nVertices; i++) + { + covertices[i].normal.normalise(); + } + + return center; +} + +//with normals +Vector3 updateShadowVertices() +{ + unsigned int i; + Vector3 center; + center=(nodes[nodeIDs[0]].Position+nodes[nodeIDs[1]].Position)/2.0; + for (i=0; i<nVertices; i++) + { + //set position + coshadowposvertices[i].vertex=nodes[nodeIDs[i]].Position-center; + coshadowposvertices[i+nVertices].vertex=nodes[nodeIDs[i]].Position-center; + //reset normals + coshadownorvertices[i].normal=Vector3::ZERO; + } + //accumulate normals per triangle + for (i=0; i<ibufCount/3; i++) + { + Vector3 v1, v2; + v1=nodes[nodeIDs[faces[i*3+1]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v2=nodes[nodeIDs[faces[i*3+2]]].Position-nodes[nodeIDs[faces[i*3]]].Position; + v1=v1.crossProduct(v2); + float s=v1.length(); + //avoid large tris + if (s>sref[i]) + { + coshadowposvertices[faces[i*3+1]].vertex=coshadowposvertices[faces[i*3]].vertex+Vector3(0.1,0,0); + coshadowposvertices[faces[i*3+2]].vertex=coshadowposvertices[faces[i*3]].vertex+Vector3(0,0,0.1); + coshadowposvertices[faces[i*3+1]+nVertices].vertex=coshadowposvertices[faces[i*3+1]].vertex; + coshadowposvertices[faces[i*3+2]+nVertices].vertex=coshadowposvertices[faces[i*3+2]].vertex; + } + //v1.normalise(); + v1=v1/s; + + coshadownorvertices[faces[i*3]].normal+=v1; + coshadownorvertices[faces[i*3+1]].normal+=v1; + coshadownorvertices[faces[i*3+2]].normal+=v1; + } + //normalize + for (i=0; i<nVertices; i++) + { + coshadownorvertices[i].normal.normalise(); + //texcoords + coshadownorvertices[i].texcoord=covertices[i].texcoord; + } + + return center; +} + +Vector3 flexit() +{ + Vector3 center; + if (smanager->getShadowTechnique()==SHADOWTYPE_STENCIL_MODULATIVE || smanager->getShadowTechnique()==SHADOWTYPE_STENCIL_ADDITIVE) + { + center=updateShadowVertices(); + //find the binding + unsigned posbinding=msh->sharedVertexData->vertexDeclaration->findElementBySemantic(VES_POSITION)->getSource(); + HardwareVertexBufferSharedPtr pbuf=msh->sharedVertexData->vertexBufferBinding->getBuffer(posbinding); + pbuf->lock(HardwareBuffer::HBL_DISCARD); + pbuf->writeData(0, pbuf->getSizeInBytes(), shadowposvertices, true); + pbuf->unlock(); + //find the binding + unsigned norbinding=msh->sharedVertexData->vertexDeclaration->findElementBySemantic(VES_NORMAL)->getSource(); + HardwareVertexBufferSharedPtr nbuf=msh->sharedVertexData->vertexBufferBinding->getBuffer(norbinding); + nbuf->lock(HardwareBuffer::HBL_DISCARD); + nbuf->writeData(0, nbuf->getSizeInBytes(), shadownorvertices, true); + nbuf->unlock(); + msh->getEdgeList()->updateFaceNormals(0, pbuf); + + } + else + { + center=updateVertices(); + vbuf->lock(HardwareBuffer::HBL_DISCARD); + vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true); + vbuf->unlock(); + //msh->sharedVertexData->vertexBufferBinding->getBuffer(0)->writeData(0, vbuf->getSizeInBytes(), vertices, true); + } + return center; +} + +}; + + + +#endif Added: trunk/devtools/originalcode/random snippets.h =================================================================== --- trunk/devtools/originalcode/random snippets.h (rev 0) +++ trunk/devtools/originalcode/random snippets.h 2007-06-22 23:32:23 UTC (rev 11) @@ -0,0 +1,1657 @@ +#define MAX_NODES 1000 +#define MAX_BEAMS 4000 +#define MAX_CONTACTERS 200 +#define MAX_HYDROS 40 +#define MAX_WHEELS 16 +#define MAX_SUBMESHES 500 +#define MAX_TEXCOORDS 2000 +#define MAX_CABS 2000 +#define MAX_SHOCKS 20 +#define MAX_ROPES 10 +#define MAX_ROPABLES 20 +#define MAX_TIES 10 +#define MAX_FLARES 20 +#define MAX_PROPS 40 + +#define MAX_CAMERAS 10 + +#define MAX_TURBOPROPS 8 + +#define MAX_SCREWPROPS 8 + +#define DEFAULT_SPRING 9000000.0 +//should be 60000 +#define DEFAULT_DAMP 12000.0 +//#define DEFAULT_DAMP 60000.0 +//mars +//#define DEFAULT_GRAVITY -3.8 +//earth +#define DEFAULT_GRAVITY -9.8 +#define DEFAULT_DRAG 0.05 +#define DEFAULT_BEAM_DIAMETER 0.05 +#define MAX_SPEED 140.0 + +#define DEFAULT_WATERDRAG 10.0 +//buoyancy force per node in Newton +//#define DEFAULT_BUOYANCY 700.0 + + +#define IRON_DENSITY 7874.0 +#define BEAM_BREAK 1000000.0 +#define BEAM_DEFORM 400000.0 +#define BEAM_CREAK 100000.0 +#define WHEEL_FRICTION_COEF 2.0 +#define CHASSIS_FRICTION_COEF 0.05 +#define SPEED_STOP 0.2 + +#define STAB_RATE 0.1 + +#define BEAM_NORMAL 0 +#define BEAM_HYDRO 1 +#define BEAM_VIRTUAL 2 +#define BEAM_MARKED 3 +#define BEAM_INVISIBLE 4 +#define BEAM_INVISIBLE_HYDRO 5 + +#define NODE_NORMAL 0 +#define NODE_LOADED 1 + +//leading truck +#define ACTIVATED 0 +//not leading but active +#define DESACTIVATED 1 +//static +#define SLEEPING 2 +//network +#define NETWORKED 3 + +#define MAX_TRUCKS 64 + +#define MAX_WINGS 20 + +#define UNLOCKED 0 +#define PRELOCK 1 +#define LOCKED 2 + +#define NOT_DRIVEABLE 0 +#define TRUCK 1 +#define AIRPLANE 2 +#define BOAT 3 + +#define DRY 0 +#define DRIPPING 1 +#define WET 2 + + +typedef struct _node +{ + Real mass; + Vector3 iPosition; + Vector3 Position; + Vector3 Velocity; + Vector3 Forces; + int locked; + int iswheel; + int masstype; + int contactless; + int contacted; + Real friction; + Real buoyancy; + Vector3 lastdrag; + Vector3 gravimass; + int lockednode; + Vector3 lockedPosition; + Vector3 lockedVelocity; + Vector3 lockedForces; + int wetstate; + float wettime; + bool isHot; + Vector3 buoyanceForce; +} node_t; + +typedef struct _beam +{ + node_t *p1; + node_t *p2; + Real k; //tensile spring + Real d; //damping factor + Real L; //length + Real refL; //reference length + Real Lhydro;//hydro reference len + Real hydroRatio;//hydro rotation ratio + bool hydroSpeed; + SceneNode *mSceneNode; //visual + Entity *mEntity; //visual + int type; + int broken; + int bounded; + Real shortbound; + Real longbound; + Real commandRatio; + Real commandShort; + Real commandLong; + Real stress; + Real maxposstress; + Real maxnegstress; + Real strength; + Vector3 lastforce; + bool isrope; + int disabled; + float minendmass; +} beam_t; + +typedef struct _wheel +{ + int nbnodes; + node_t* nodes[50]; + int braked; + int propulsed; + node_t* arm; + node_t* near_attach; + node_t* refnode0; + node_t* refnode1; + Real radius; + Real speed; +} wheel_t; + + + + void calc_masses2(Real total) + { + int i; + Real len=0.0; + //reset + for (i=0; i<free_node; i++) + { + if (!nodes[i].iswheel) + { + if (!nodes[i].masstype==NODE_LOADED) nodes[i].mass=0; + else nodes[i].mass=loadmass/(float)masscount; + } + } + //average linear density + for (i=0; i<free_beam; i++) + { + if (beams[i].type!=BEAM_VIRTUAL) + { + Real newlen=beams[i].L; + if (!(beams[i].p1->iswheel)) len+=newlen/2.0; + if (!(beams[i].p2->iswheel)) len+=newlen/2.0; + }; + } + for (i=0; i<free_beam; i++) + { + if (beams[i].type!=BEAM_VIRTUAL) + { + Real mass=beams[i].L*total/len; + if (!(beams[i].p1->iswheel)) beams[i].p1->mass+=mass/2; + if (!(beams[i].p2->iswheel)) beams[i].p2->mass+=mass/2; + }; + } + //fix rope masses + for (i=0; i<free_rope; i++) + { + ropes[i].beam->p2->mass=100.0; + } + //fix camera mass + for (i=0; i<freecinecamera; i++) nodes[cinecameranodepos[i]].mass=20; + + //hooks must be heavy + if (hookId!=-1) nodes[hookId].mass=500.0; + + //update gravimass + for (i=0; i<free_node; i++) + { + //LogManager::getSingleton().logMessage("Nodemass "+StringConverter::toString(i)+"-"+StringConverter::toString(nodes[i].mass)); + //for stability + if (!nodes[i].iswheel && nodes[i].mass<50.0) nodes[i].mass=50.0; + nodes[i].gravimass=Vector3(0,DEFAULT_GRAVITY*nodes[i].mass,0); + } + //update minendmass + for (i=0; i<free_beam; i++) + { + beams[i].minendmass=beams[i].p1->mass; + if (beams[i].p2->mass<beams[i].minendmass) beams[i].minendmass=beams[i].p2->mass; + } + } + + //to load a truck file + void loadTruck(char* fname, SceneManager *manager, SceneNode *parent, Real px, Real py, Real pz, Real ry, bool postload) + { + //FILE *fd; + char line[1024]; + int mode=0; + int hasfixes=0; + int wingstart=-1; + float wingarea=0.0; + //convert ry + ry=ry*3.14159/180.0; + LogManager::getSingleton().logMessage("BEAM: Start of truck loading"); + ResourceGroupManager& rgm = ResourceGroupManager::getSingleton(); + DataStreamPtr ds=rgm.openResource(fname, "General"); + + +// fd=fopen(fname, "r"); +// if (!fd) { +// LogManager::getSingleton().logMessage("Can't open truck file '"+String(fname)+"'"); +// exit(1); +// }; + LogManager::getSingleton().logMessage("Parsing '"+String(fname)+"'"); + //skip first line +// fscanf(fd," %[^\n\r]",line); + ds->readLine(line, 1023); + +// while (!feof(fd)) + while (!ds->eof()) + { + size_t ll=ds->readLine(line, 1023); +// fscanf(fd," %[^\n\r]",line); + //LogManager::getSingleton().logMessage(line); + // printf("Mode %i Line:'%s'\n",mode, line); + if (line[0]==';' || ll==0) + { + // printf("%s\n", line+1); + continue; + }; + if (!strcmp("end",line)) + { + LogManager::getSingleton().logMessage("BEAM: End of truck loading"); + loading_finished=1;break; + }; + if (!strcmp("nodes",line)) {mode=1;continue;}; + if (!strcmp("beams",line)) {mode=2;continue;}; + if (!strcmp("fixes",line)) {mode=3;continue;}; + if (!strcmp("shocks",line)) {mode=4;continue;}; + if (!strcmp("hydros",line)) {mode=5;continue;}; + if (!strcmp("wheels",line)) {mode=6;continue;}; + if (!strcmp("globals",line)) {mode=7;continue;}; + if (!strcmp("cameras",line)) {mode=8;continue;}; + if (!strcmp("engine",line)) {mode=9;continue;}; + if (!strcmp("texcoords",line)) {mode=10;continue;}; + if (!strcmp("cab",line)) {mode=11;continue;}; + if (!strcmp("commands",line)) {mode=12;continue;}; + if (!strcmp("forwardcommands",line)) {forwardcommands=1;continue;}; + if (!strcmp("importcommands",line)) {importcommands=1;continue;}; + if (!strcmp("rollon",line)) {wheel_contact_requested=true;continue;}; + if (!strcmp("rescuer",line)) {rescuer=true;continue;}; + if (!strcmp("contacters",line)) {mode=13;continue;}; + if (!strcmp("ropes",line)) {mode=14;continue;}; + if (!strcmp("ropables",line)) {mode=15;continue;}; + if (!strcmp("ties",line)) {mode=16;continue;}; + if (!strcmp("help",line)) {mode=17;continue;}; + if (!strcmp("cinecam",line)) {mode=18;continue;}; + if (!strcmp("flares",line)) {mode=19;continue;}; + if (!strcmp("props",line)) {mode=20;continue;}; + if (!strcmp("globeams",line)) {mode=21;continue;}; + if (!strcmp("wings",line)) {mode=22;continue;}; + if (!strcmp("turboprops",line)) {mode=23;continue;}; + if (!strcmp("fusedrag",line)) {mode=24;continue;}; + if (!strcmp("engoption",line)) {mode=25;continue;}; + if (!strcmp("brakes",line)) {mode=26;continue;}; + if (!strcmp("rotators",line)) {mode=27;continue;}; + if (!strcmp("screwprops",line)) {mode=28;continue;}; + if (!strncmp("set_beam_defaults", line, 17)) + { + sscanf(line,"set_beam_defaults %f, %f, %f, %f, %f, %s", &default_spring, &default_damp, &default_deform,&default_break,&default_beam_diameter, default_beam_material); + if (default_spring<0) default_spring=DEFAULT_SPRING; + if (default_damp<0) default_damp=DEFAULT_DAMP; + if (default_deform<0) default_deform=BEAM_DEFORM; + if (default_break<0) default_break=BEAM_BREAK; + if (default_beam_diameter<0) default_beam_diameter=DEFAULT_BEAM_DIAMETER; + continue; + } + if (!strcmp("backmesh",line)) + { + //close the current mesh + subtexcoords[free_sub]=free_texcoord; + subcabs[free_sub]=free_cab; + //make it normal + subisback[free_sub]=0; + free_sub++; + + //add an extra front mesh + int i; + int start; + //texcoords + if (free_sub==1) start=0; else start=subtexcoords[free_sub-2]; + for (i=start; i<subtexcoords[free_sub-1]; i++) + { + texcoords[free_texcoord]=texcoords[i];; + free_texcoord++; + } + //cab + if (free_sub==1) start=0; else start=subcabs[free_sub-2]; + for (i=start; i<subcabs[free_sub-1]; i++) + { + cabs[free_cab*3]=cabs[i*3]; + cabs[free_cab*3+1]=cabs[i*3+1]; + cabs[free_cab*3+2]=cabs[i*3+2]; + free_cab++; + } + //finish it, this is a window + subisback[free_sub]=2; + //close the current mesh + subtexcoords[free_sub]=free_texcoord; + subcabs[free_sub]=free_cab; + //make is transparent + free_sub++; + + + //add an extra back mesh + //texcoords + if (free_sub==1) start=0; else start=subtexcoords[free_sub-2]; + for (i=start; i<subtexcoords[free_sub-1]; i++) + { + texcoords[free_texcoord]=texcoords[i];; + free_texcoord++; + } + //cab + if (free_sub==1) start=0; else start=subcabs[free_sub-2]; + for (i=start; i<subcabs[free_sub-1]; i++) + { + cabs[free_cab*3]=cabs[i*3+1]; + cabs[free_cab*3+1]=cabs[i*3]; + cabs[free_cab*3+2]=cabs[i*3+2]; + free_cab++; + } + //we don't finish, there will be a submesh statement later + subisback[free_sub]=1; + continue; + }; + if (!strcmp("submesh",line)) + { + subtexcoords[free_sub]=free_texcoord; + subcabs[free_sub]=free_cab; + free_sub++; + //initialize the next + subisback[free_sub]=0; + continue; + }; + if (mode==1) + { + //parse nodes + int id; + float x,y,z; + char load='n'; + int type=NODE_NORMAL; + sscanf(line,"%i, %f, %f, %f, %c",&id,&x,&y,&z,&load); + if (load=='l') type=NODE_LOADED; + // printf("node %i : %f %f %f\n", id, x,y,z); + if (id!=free_node) + { + LogManager::getSingleton().logMessage("Error: lost sync in nodes numbers after node " + +StringConverter::toString(free_node)+"(got "+StringConverter::toString(id)+"instead)"); + exit(2); + }; + init_node(id, px+x*cos(ry)+z*sin(ry), py+y , pz+x*cos(ry+3.14159/2.0)+z*sin(ry+3.14159/2.0),type); + //friction + if (load=='f') nodes[id].friction=100.0; + //exhaust + if (load=='x' && !disable_smoke) + { + smokeId=id; + smokeNode = parent->createChildSceneNode(); + //ParticleSystemManager *pSysM=ParticleSystemManager::getSingletonPtr(); + char wname[256]; + sprintf(wname, "exhaust-%s",truckname); + //if (pSysM) smoker=pSysM->createSystem(wname, "tracks/Smoke"); + smoker=manager->createParticleSystem(wname, "tracks/Smoke"); + // ParticleSystem* pSys = ParticleSystemManager::getSingleton().createSystem("exhaust", "tracks/Smoke"); + if (smoker) + { + smokeNode->attachObject(smoker); + smokeNode->setPosition(nodes[smokeId].Position); + } + nodes[id].isHot=true; + } + //exhaust reference + if (load=='y' && !disable_smoke) + { + smokeRef=id; + nodes[id].isHot=true; + } + //contactless + if (load=='c') nodes[id].contactless=1; + //hook + if (load=='h') hookId=id; + //editor + if (load=='e') editorId=id; + //buoy + if (load=='b') nodes[id].buoyancy=10000.0; + free_node++; + } + if (mode==2) + { + //parse beams + int id1, id2; + char visible='v'; + int type=BEAM_NORMAL; + sscanf(line,"%i, %i, %c",&id1,&id2,&visible); + if (visible=='i') type=BEAM_INVISIBLE; + if (id1>=free_node || id2>=free_node) + { + LogManager::getSingleton().logMessage("Error: unknown node number in beams section (" + +StringConverter::toString(id1)+","+StringConverter::toString(id2)+")"); + exit(3); + }; + //skip if a beam already exists + int i; + for (i=0; i<free_beam; i++) + { + if ((beams[i].p1==&nodes[id1] && beams[i].p2==&nodes[id2]) || (beams[i].p1==&nodes[id2] && beams[i].p2==&nodes[id1])) + { + LogManager::getSingleton().logMessage("Skipping duplicate beam"); + continue; + } + } + // printf("beam : %i %i\n", id1, id2); + /* + if (visible=='r') + { + //this is a rope, add extra nodes + int numropeseg=5; + int i; + int lastid=id1; + int lastlastid=-1; + for (i=0; i<numropeseg-1; i++) + { + //insert a node + Vector3 nodep=nodes[id1].Position+(float)(i+1)*(nodes[id2].Position-nodes[id1].Position)/(float)numropeseg; + init_node(free_node, nodep.x, nodep.y, nodep.z,NODE_NORMAL); + init_beam(free_beam , &nodes[lastid], &nodes[free_node], manager, parent, type, BEAM_BREAK); + //beams[free_beam].isrope=true; + beams[free_beam].k/=100.0; + beams[free_beam].d/=100.0; + free_beam++; + //if (lastlastid!=-1) + //{ + //extra reinforcement beams + // init_beam(free_beam , &nodes[lastlastid], &nodes[free_node], manager, parent, BEAM_INVISIBLE, BEAM_BREAK); + //beams[free_beam].isrope=true; + // beams[free_beam].k/=100.0; + // beams[free_beam].d/=100.0; + // free_beam++; + //} + lastlastid=lastid; + lastid=free_node; + free_node++; + } + //last segment + init_beam(free_beam , &nodes[lastid], &nodes[id2], manager, parent, type, BEAM_BREAK); + //beams[free_beam].isrope=true; + beams[free_beam].k/=100.0; + beams[free_beam].d/=100.0; + free_beam++; + //init_beam(free_beam , &nodes[lastlastid], &nodes[id2], manager, parent, BEAM_INVISIBLE, BEAM_BREAK); + //beams[free_beam].isrope=true; + //beams[free_beam].k/=100.0; + //beams[free_beam].d/=100.0; + //free_beam++; + } + else + { + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, type, BEAM_BREAK); + free_beam++; + } + */ + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, type, default_break, default_spring, default_damp); + beams[free_beam].isrope=(visible=='r'); + free_beam++; + } + if (mode==4) + { + //parse shocks + int id1, id2; + float s, d, sbound,lbound,precomp; + char type='n'; + sscanf(line,"%i, %i, %f, %f, %f, %f, %f, %c",&id1,&id2, &s, &d, &sbound, &lbound,&precomp,&type); + if (id1>=free_node || id2>=free_node) + { + LogManager::getSingleton().logMessage("Error: unknown node number in shocks section (" + +StringConverter::toString(id1)+","+StringConverter::toString(id2)+")"); + exit(4); + }; + // printf("beam : %i %i\n", id1, id2); + //bounded beam + int htype=BEAM_HYDRO; + if (type=='i') htype=BEAM_INVISIBLE_HYDRO; + + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, htype, default_break*4.0, s, d, -1.0, sbound, lbound,precomp); + if (type!='n' && type!='i') + { + active_shocks[free_active_shock]=free_beam; + free_active_shock++; + }; + free_beam++; + } + if (mode==3) + { + //parse fixes + int id; + sscanf(line,"%i",&id); + if (id>=free_node) + { + LogManager::getSingleton().logMessage("Error: unknown node number in fixes section (" + +StringConverter::toString(id)+")"); + exit(5); + }; + nodes[id].locked=1; + hasfixes=1; + } + if (mode==5) + { + //parse hydros + int id1, id2; + float ratio; + char option='n'; + sscanf(line,"%i, %i, %f, %c",&id1,&id2,&ratio, &option); + int htype=BEAM_HYDRO; + if (option=='i') htype=BEAM_INVISIBLE_HYDRO; + if (id1>=free_node || id2>=free_node) + { + LogManager::getSingleton().logMessage("Error: unknown node number in hydros section (" + +StringConverter::toString(id1)+","+StringConverter::toString(id2)+")"); + exit(6); + }; + // printf("beam : %i %i\n", id1, id2); + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, htype, default_break, default_spring, default_damp); + hydro[free_hydro]=free_beam;free_hydro++; + beams[free_beam].Lhydro=beams[free_beam].L; + beams[free_beam].hydroRatio=ratio; + beams[free_beam].hydroSpeed=(option=='s'); + free_beam++; + } + if (mode==6) + { + //parse wheels + float radius, width, mass, spring, damp; + int rays, node1, node2, snode, braked, propulsed, torquenode; + sscanf(line,"%f, %f, %i, %i, %i, %i, %i, %i, %i, %f, %f, %f, %s %s",&radius,&width,&rays,&node1,&node2,&snode,&braked,&propulsed,&torquenode,&mass,&spring,&damp, texf, texb); + addWheel(manager, parent, radius,width,rays,node1,node2,snode,braked,propulsed, torquenode, mass, spring, damp, texf, texb); + } + if (mode==7) + { + //parse globals + sscanf(line,"%f, %f, %s",&truckmass, &loadmass, texname); + // + LogManager::getSingleton().logMessage("BEAM: line: '"+String(line)+"'"); + LogManager::getSingleton().logMessage("BEAM: texname: '"+String(texname)+"'"); + + //we clone the material + char clonetex[256]; + sprintf(clonetex, "%s-%s",texname,truckname); + MaterialPtr mat=(MaterialPtr)(MaterialManager::getSingleton().getByName(texname)); + mat->clone(clonetex); + strcpy(texname, clonetex); + } + if (mode==8) + { + //parse cameras + int nodepos, nodedir, dir; + sscanf(line,"%i, %i, %i",&nodepos,&nodedir,&dir); + addCamera(nodepos, nodedir, dir); + } + if (mode==9) + { + //parse engine + float minrpm, maxrpm, torque, dratio, rear; + float gears[16]; + int numgears; + driveable=TRUCK; + sscanf(line,"%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f", &minrpm, &maxrpm, &torque, &dratio, &rear, &gears[0],&gears[1],&gears[2],&gears[3],&gears[4],&gears[5],&gears[6],&gears[7],&gears[8],&gears[9],&gears[10],&gears[11],&gears[12],&gears[13],&gears[14],&gears[15]); + for (numgears=0; numgears<16; numgears++) if (gears[numgears]==-1.0) break; + if (audio) audio->setupEngine(); + engine=new BeamEngine(minrpm, maxrpm, torque, rear, numgears, gears, dratio, audio); + //engine->start(); + } + + if (mode==10) + { + //parse texcoords + int id; + float x, y; + sscanf(line,"%i, %f, %f", &id, &x, &y); + texcoords[free_texcoord]=Vector3(id, x, y); + free_texcoord++; + } + + if (mode==11) + { + //parse cab + char type='n'; + int id1, id2, id3; + sscanf(line,"%i, %i, %i, %c", &id1, &id2, &id3,&type); + cabs[free_cab*3]=id1; + cabs[free_cab*3+1]=id2; + cabs[free_cab*3+2]=id3; + if (type=='c') {collcabs[free_collcab]=free_cab; free_collcab++;}; + if (type=='b') {buoycabs[free_buoycab]=free_cab; free_buoycab++; if (!buoyance) buoyance=new Buoyance(water, splashp, ripplep);}; + if (type=='D') + { + collcabs[free_collcab]=free_cab; free_collcab++; + buoycabs[free_buoycab]=free_cab; free_buoycab++; if (!buoyance) buoyance=new Buoyance(water, splashp, ripplep); + } + free_cab++; + } + + if (mode==12) + { + //parse commands + int id1, id2,keys,keyl; + float rate, shortl, longl; + char option='n'; + hascommands=1; + sscanf(line,"%i, %i, %f, %f, %f, %i, %i, %c", &id1, &id2, &rate, &shortl, &longl, &keys, &keyl,&option); + int htype=BEAM_HYDRO; + if (option=='i') htype=BEAM_INVISIBLE_HYDRO; + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, htype, default_break, default_spring, default_damp); + if (option=='r') beams[free_beam].isrope=true; + beams[free_beam].Lhydro=beams[free_beam].L; + //add short key + commandkey[keys].beams[commandkey[keys].bfree]=-free_beam; + commandkey[keys].bfree++; + //add long key + commandkey[keyl].beams[commandkey[keyl].bfree]=free_beam; + commandkey[keyl].bfree++; + beams[free_beam].commandRatio=rate; + beams[free_beam].commandShort=shortl; + beams[free_beam].commandLong=longl; + free_beam++; + + } + + if (mode==13) + { + //parse contacters + int id1; + sscanf(line,"%i", &id1); + contacters[free_contacter].nodeid=id1; + contacters[free_contacter].contacted=0; + contacters[free_contacter].opticontact=0; + free_contacter++;; + } + if (mode==14) + { + //parse ropes + int id1, id2; + sscanf(line,"%i, %i", &id1, &id2); + //add beam + if (id1>=free_node || id2>=free_node) + { + LogManager::getSingleton().logMessage("Error: unknown node number in ropes section (" + +StringConverter::toString(id1)+","+StringConverter::toString(id2)+")"); + exit(7); + }; + init_beam(free_beam , &nodes[id1], &nodes[id2], manager, parent, BEAM_NORMAL, default_break, default_spring, default_damp); + beams[free_beam].isrope=1; + //register rope + ropes[free_rope].beam=&beams[free_beam]; + ropes[free_rope].lockedto=0; + free_beam++; + free_rope++; + } + if (mode==15) + { + //parse ropables + int id1; + sscanf(line,"%i", &id1); + ropables[free_ropable]=id1; + free_ropable++;; + } + if (mode==16) + { + //parse ties + int id1; + float maxl, rate, shortl, longl; + char option='n'; + hascommands=1; + sscanf(line,"%i, %f, %f, %f, %f, %c", &id1, &maxl, &rate, &shortl, &longl, &option); + int htype=BEAM_HYDRO; + if (option=='i') htype=BEAM_INVISIBLE_HYDRO; + init_beam(free_beam , &nodes[id1], &nodes[0], manager, parent, htype, default_break, default_spring, default_damp); + beams[free_beam].L=maxl; + beams[free_beam].refL=maxl; + beams[free_beam].Lhydro=maxl; + beams[free_beam].isrope=1; + beams[free_beam].disabled=1; + beams[free_beam].mSceneNode->detachAllObjects(); + //add short key + commandkey[0].beams[commandkey[0].bfree]=-free_beam; + commandkey[0].bfree++; + //add long key + // commandkey[keyl].beams[commandkey[keyl].bfree]=free_beam; + // commandkey[keyl].bfree++; + beams[free_beam].commandRatio=rate; + beams[free_beam].commandShort=shortl; + beams[free_beam].commandLong=longl; + //register tie + ties[free_tie]=free_beam; + free_tie++; + free_beam++; + + } + + if (mode==17) + { + //help material + strcpy(helpmat,line); + hashelp=1; + } + if (mode==18) + { + //cinecam + float x,y,z; + int n1, n2, n3, n4, n5, n6, n7, n8; + sscanf(line,"%f, %f, %f, %i, %i, %i, %i, %i, %i, %i, %i", &x,&y,&z,&n1,&n2,&n3,&n4,&n5,&n6,&n7,&n8); + //add node + cinecameranodepos[freecinecamera]=free_node; + init_node(cinecameranodepos[freecinecamera], px+x*cos(ry)+z*sin(ry), py+y , pz+x*cos(ry+3.14159/2.0)+z*sin(ry+3.14159/2.0)); + free_node++; + //add beams + float spring=8000.0; + float damp=800.0; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n1], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n2], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n3], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n4], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n5], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n6], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n7], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + init_beam(free_beam , &nodes[cinecameranodepos[freecinecamera]], &nodes[n8], manager, parent, BEAM_INVISIBLE, default_break, spring, damp); + free_beam++; + freecinecamera++; + } + + if (mode==19) + { + //parse flares + int ref, nx, ny; + float ox, oy; + sscanf(line,"%i, %i, %i, %f, %f", &ref,&nx,&ny, &ox, &oy); + flares[free_flare].noderef=ref; + flares[free_flare].nodex=nx; + flares[free_flare].nodey=ny; + flares[free_flare].offsetx=ox; + flares[free_flare].offsety=oy; + flares[free_flare].snode = manager->getRootSceneNode()->createChildSceneNode(); + char flarename[256]; + sprintf(flarename, "flare-%s-%i", truckname, free_flare); + flares[free_flare].bbs=manager->createBillboardSet(flarename,1); + flares[free_flare].bbs->createBillboard(0,0,0); + flares[free_flare].bbs->setMaterialName("tracks/flare"); + flares[free_flare].snode->attachObject(flares[free_flare].bbs); + + flares[free_flare].light=manager->createLight(flarename); + flares[free_flare].light->setType(Light::LT_SPOTLIGHT); + flares[free_flare].light->setDiffuseColour( ColourValue(1.0, 1.0, 0.8)); + flares[free_flare].light->setSpecularColour( ColourValue(1.0, 1.0, 1.0)); + flares[free_flare].light->setAttenuation(500.0, 1.0, 0.1, 0.0); + flares[free_flare].light->setSpotlightRange( Degree(35), Degree(45) ); + //flares[free_flare].lnode->attachObject(flares[free_flare].light); + flares[free_flare].light->setCastShadows(false); + free_flare++; + } + if (mode==20) + { + //parse props + int ref, nx, ny; + float ox, oy, oz; + float rx, ry, rz; + char meshname[256]; + sscanf(line,"%i, %i, %i, %f, %f, %f, %f, %f, %f, %s", &ref,&nx,&ny, &ox, &oy, &oz, &rx, &ry, &rz, meshname); + props[free_prop].noderef=ref; + props[free_prop].nodex=nx; + props[free_prop].nodey=ny; + props[free_prop].offsetx=ox; + props[free_prop].offsety=oy; + props[free_prop].offsetz=oz; + props[free_prop].rot=Quaternion(Degree(rz), Vector3::UNIT_Z); + props[free_prop].rot=props[free_prop].rot*Quaternion(Degree(ry), Vector3::UNIT_Y); + props[free_prop].rot=props[free_prop].rot*Quaternion(Degree(rx), Vector3::UNIT_X); + props[free_prop].wheel=0; + props[free_prop].mirror=0; + props[free_prop].pale=0; + props[free_prop].spinner=0; + if (!strncmp("leftmirror", meshname, 10)) props[free_prop].mirror=1; + if (!strncmp("rightmirror", meshname, 11)) props[free_prop].mirror=-1; + if (!strncmp("dashboard", meshname, 9)) + { + //create a wheel + char propname[256]; + sprintf(propname, "prop-%s-%i-wheel", truckname, free_prop); + Entity *te = manager->createEntity(propname, "dirwheel.mesh"); + props[free_prop].wheel=manager->getRootSceneNode()->createChildSceneNode(); + props[free_prop].wheel->attachObject(te); + props[free_prop].wheelpos=Vector3(-0.67, -0.61,0.24); + if (!strncmp("dashboard-rh", meshname, 12)) props[free_prop].wheelpos=Vector3(0.67, -0.61,0.24); + } + char propname[256]; + sprintf(propname, "prop-%s-%i", truckname, free_prop); + Entity *te = manager->createEntity(propname, meshname); + props[free_prop].snode=manager->getRootSceneNode()->createChildSceneNode(); + props[free_prop].snode->attachObject(te); + //hack for the spinprops + if (!strncmp("spinprop", meshname, 8)) + { + props[free_prop].spinner=1; + props[free_prop].snode->getAttachedObject(0)->setCastShadows(false); + props[free_prop].snode->setVisible(false); + } + if (!strncmp("pale", meshname, 4)) + { + props[free_prop].pale=1; + } + //hack for the translucent drivers seat + if (!strncmp("seat", meshname, 4) && !driversseatfound) {driversseatfound=true; te->setMaterialName("driversseat");}; + props[free_prop].beacontype='n'; + if (!strncmp("beacon", meshname, 6)) + { + props[free_prop].bpos[0]=2.0*3.14*((Real)rand()/(Real)RAND_MAX); + props[free_prop].brate[0]=4.0*3.14+((Real)rand()/(Real)RAND_MAX)-0.5; + props[free_prop].beacontype='b'; + props[free_prop].bbs[0]=0; + //the light + props[free_prop].light[0]=manager->createLight(propname); + props[free_prop].light[0]->setType(Light::LT_SPOTLIGHT); + props[free_prop].light[0]->setDiffuseColour( ColourValue(1.0, 0.5, 0.0)); + props[free_prop].light[0]->setSpecularColour( ColourValue(1.0, 0.5, 0.0)); + props[free_prop].light[0]->setAttenuation(50.0, 1.0, 0.3, 0.0); + props[free_prop].light[0]->setSpotlightRange( Degree(35), Degree(45) ); + props[free_prop].light[0]->setCastShadows(false); + props[free_prop].light[0]->setVisible(false); + //the flare billboard + props[free_prop].bbsnode[0] = manager->getRootSceneNode()->createChildSceneNode(); + props[free_prop].bbs[0]=manager->createBillboardSet(propname,1); + props[free_prop].bbs[0]->createBillboard(0,0,0); + props[free_prop].bbs[0]->setMaterialName("tracks/beaconflare"); + props[free_prop].bbsnode[0]->attachObject(props[free_prop].bbs[0]); + props[free_prop].bbsnode[0]->setVisible(false); + } + if (!strncmp("redbeacon", meshname, 9)) + { + props[free_prop].bpos[0]=0.0; + props[free_prop].brate[0]=1.0; + props[free_prop].beacontype='r'; + props[free_prop].bbs[0]=0; + //the light + props[free_prop].light[0]=manager->createLight(propname); + props[free_prop].light[0]->setType(Light::LT_POINT); + props[free_prop].light[0]->setDiffuseColour( ColourValue(1.0, 0.0, 0.0)); + props[free_prop].light[0]->setSpecularColour( ColourValue(1.0, 0.0, 0.0)); + props[free_prop].light[0]->setAttenuation(50.0, 1.0, 0.3, 0.0); + props[free_prop].light[0]->setCastShadows(false); + props[free_prop].light[0]->setVisible(false); + //the flare billboard + props[free_prop].bbsnode[0] = manager->getRootSceneNode()->createChildSceneNode(); + props[free_prop].bbs[0]=manager->createBillboardSet(propname,1); + props[free_prop].bbs[0]->createBillboard(0,0,0); + props[free_prop].bbs[0]->setMaterialName("tracks/redbeaconflare"); + props[free_prop].bbsnode[0]->attachObject(props[free_prop].bbs[0]); + props[free_prop].bbsnode[0]->setVisible(false); + props[free_prop].bbs[0]->setDefaultDimensions(1.0, 1.0); + } + if (!strncmp("lightbar", meshname, 6)) + { + int k; + ispolice=true; + props[free_prop].beacontype='p'; + for (k=0; k<4; k++) + { + props[free_prop].bpos[k]=2.0*3.14*((Real)rand()/(Real)RAND_MAX); + props[free_prop].brate[k]=4.0*3.14+((Real)rand()/(Real)RAND_MAX)-0.5; + props[free_prop].bbs[k]=0; + //the light + char rpname[256]; + sprintf(rpname,"%s-%i", propname, k); + props[free_prop].light[k]=manager->createLight(rpname); + props[free_prop].light[k]->setType(Light::LT_SPOTLIGHT); + if (k>1) + { + props[free_prop].light[k]->setDiffuseColour( ColourValue(1.0, 0.0, 0.0)); + props[free_prop].light[k]->setSpecularColour( ColourValue(1.0, 0.0, 0.0)); + } + else + { + props[free_prop].light[k]->setDiffuseColour( ColourValue(0.0, 0.5, 1.0)); + props[free_prop].light[k]->setSpecularColour( ColourValue(0.0, 0.5, 1.0)); + } + props[free_prop].light[k]->setAttenuation(50.0, 1.0, 0.3, 0.0); + props[free_prop].light[k]->setSpotlightRange( Degree(35), Degree(45) ); + props[free_prop].light[k]->setCastShadows(false); + props[free_prop].light[k]->setVisible(false); + //the flare billboard + props[free_prop].bbsnode[k] = manager->getRootSceneNode()->createChildSceneNode(); + props[free_prop].bbs[k]=manager->createBillboardSet(rpname,1); + props[free_prop].bbs[k]->createBillboard(0,0,0); + if (k>1) + props[free_prop].bbs[k]->setMaterialName("tracks/brightredflare"); + else + props[free_prop].bbs[k]->setMaterialName("tracks/brightblueflare"); + props[free_prop].bbsnode[k]->attachObject(props[free_prop].bbs[k]); + props[free_prop].bbsnode[k]->setVisible(false); + } + } + + free_prop++; + } + if (mode==21) + { + //parse globeams + sscanf(line,"%f, %f, %f, %s", &default_deform,&default_break,&default_beam_diameter, default_beam_material); + fadeDist=1000.0; + } + if (mode==22) + { + //parse wings + int nds[8]; + float txes[8]; + char type; + float cratio, mind, maxd; + char afname[256]; + sscanf(line,"%i, %i, %i, %i, %i, %i, %i, %i, %f, %f, %f, %f, %f, %f, %f, %f, %c, %f, %f, %f, %s", + &nds[0], + &nds[1], + &nds[2], + &nds[3], + &nds[4], + &nds[5], + &nds[6], + &nds[7], + &txes[0], + &txes[1], + &txes[2], + &txes[3], + &txes[4], + &txes[5], + &txes[6], + &txes[7], + &type, + &cratio, + &mind, + &maxd, + afname + ); + //visuals + char wname[256]; + sprintf(wname, "wing-%s-%i",truckname, free_wing); + char wnamei[256]; + sprintf(wnamei, "wingobj-%s-%i",truckname, free_wing); + wings[free_wing].fa=new FlexAirfoil(manager, wname, nodes, nds[0], nds[1], nds[2], nds[3], nds[4], nds[5], nds[6], nds[7], texname, Vector2(txes[0], txes[1]), Vector2(txes[2], txes[3]), Vector2(txes[4], txes[5]), Vector2(txes[6], txes[7]), type, cratio, mind, maxd, afname, turboprops ); + Entity *ec = manager->createEntity(wnamei, wname); + wings[free_wing].cnode = manager->getRootSceneNode()->createChildSceneNode(); + wings[free_wing].cnode->attachObject(ec); + //induced drag + if (wingstart==-1) {wingstart=free_wing;wingarea=warea(nodes[wings[free_wing].fa->nfld].Position, nodes[wings[free_wing].fa->nfrd].Position, nodes[wings[free_wing].fa->nbld].Position, nodes[wings[free_wing].fa->nbrd].Position);} + else + { + if (nds[1]!=wings[free_wing-1].fa->nfld) + { + //discontinuity + //inform ... [truncated message content] |
From: <ror...@us...> - 2007-06-24 10:17:31
|
Revision: 20 http://roreditor.svn.sourceforge.net/roreditor/?rev=20&view=rev Author: rorthomas Date: 2007-06-24 03:17:29 -0700 (Sun, 24 Jun 2007) Log Message: ----------- removed unused file updated bugreport Modified Paths: -------------- trunk/lib/ror/bugreport.py Removed Paths: ------------- trunk/editor.cfg Deleted: trunk/editor.cfg =================================================================== --- trunk/editor.cfg 2007-06-24 10:03:23 UTC (rev 19) +++ trunk/editor.cfg 2007-06-24 10:17:29 UTC (rev 20) @@ -1 +0,0 @@ -C:\games\RoR-0.31a_\RoR.exe \ No newline at end of file Modified: trunk/lib/ror/bugreport.py =================================================================== --- trunk/lib/ror/bugreport.py 2007-06-24 10:03:23 UTC (rev 19) +++ trunk/lib/ror/bugreport.py 2007-06-24 10:17:29 UTC (rev 20) @@ -5,7 +5,7 @@ class BugReportFrame(wx.Frame): def __init__(self, *args, **kwds): - kwds["style"] = wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN + kwds["style"] = wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN wx.Frame.__init__(self, *args, **kwds) self.panel = wx.Panel(self, wx.ID_ANY) @@ -30,7 +30,9 @@ def generateSysinfo(self): import platform - txt = "" + txt = "==========================\n" + txt += "Platform/Software Information:\n" + txt += "==========================\n" txt += "Platform: %s, %s\n" % (platform.platform(), platform.version()) txt += "Architecture: " + ", ".join(platform.architecture()) + "\n" txt += "Python version:" + "".join(platform.python_version()) + "\n" @@ -39,6 +41,11 @@ if hwinfo == "": return txt += hwinfo + txt += self.getLogs() + + txt += "\n==========================\n" + txt += "==========================\n" + self.writeFile(BUGREPORT_FILENAME, txt) def writeFile(self, filename, content): @@ -59,6 +66,87 @@ # import pywin32_postinstall # pywin32_postinstall.install() + def getLogs(self): + txt = "" + try: + txt += "==========================\n" + txt += "RoR Ogre.log following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile(os.path.join(ogrelogfn,"Ogre.log")) + except: + txt += "RoR Ogre.log ERROR\n" + pass + try: + txt += "==========================\n" + txt += "RoR ogre.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile(os.path.join(ogrelogfn,"ogre.cfg")) + except: + txt += "RoR ogre.cfg ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoR plugins.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile(os.path.join(ogrelogfn,"plugins.cfg")) + except: + txt += "RoR plugins.cfg ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoR.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile(os.path.join(ogrelogfn,"RoR.cfg")) + except: + txt += "RoR.cfg ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoR resources.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile(os.path.join(ogrelogfn,"resources.cfg")) + except: + txt += "RoR resources.cfg ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoRToolkit Ogre.log following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile("Ogre.log") + except: + txt += "RoRToolkit Ogre.log ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoRToolkit ogre.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile("ogre.cfg") + except: + txt += "RoRToolkit ogre.cfg ERROR\n" + pass + + try: + txt += "==========================\n" + txt += "RoRToolkit plugins.cfg following\n" + txt += "==========================\n" + ogrelogfn = rorsettings.getSettings().getRoRDir() + txt += self.readFile("plugins.cfg") + except: + txt += "RoRToolkit plugins.cfg ERROR\n" + pass + return txt def getHWInfos(self): @@ -71,7 +159,8 @@ self.Close() return "" - txt = "Hardware Information:\n" + txt = "==========================\n" + txt += "Hardware Information:\n" txt += "==========================\n" try: dlg = wx.MessageDialog(self, "This program will now try to figure out some Hardware Information. That can take a minute or so.", "Notice", wx.OK | wx.ICON_INFORMATION) @@ -122,57 +211,7 @@ txt += "Sound card: %s\n" % hw.sound_board.product except: pass - - try: - txt += "==========================\n" - txt += "Ogre.log following\n" - txt += "==========================\n" - ogrelogfn = rorsettings.getSettings().getRoRDir() - txt += self.readFile(os.path.join(ogrelogfn,"Ogre.log")) - except: - txt += "Ogre.log ERROR\n" - pass - - try: - txt += "==========================\n" - txt += "ogre.cfg following\n" - txt += "==========================\n" - ogrelogfn = rorsettings.getSettings().getRoRDir() - txt += self.readFile(os.path.join(ogrelogfn,"ogre.cfg")) - except: - txt += "ogre.cfg ERROR\n" - pass - - try: - txt += "==========================\n" - txt += "plugins.cfg following\n" - txt += "==========================\n" - ogrelogfn = rorsettings.getSettings().getRoRDir() - txt += self.readFile(os.path.join(ogrelogfn,"plugins.cfg")) - except: - txt += "plugins.cfg ERROR\n" - pass - - try: - txt += "==========================\n" - txt += "RoR.cfg following\n" - txt += "==========================\n" - ogrelogfn = rorsettings.getSettings().getRoRDir() - txt += self.readFile(os.path.join(ogrelogfn,"RoR.cfg")) - except: - txt += "RoR.cfg ERROR\n" - pass - - try: - txt += "==========================\n" - txt += "resources.cfg following\n" - txt += "==========================\n" - ogrelogfn = rorsettings.getSettings().getRoRDir() - txt += self.readFile(os.path.join(ogrelogfn,"resources.cfg")) - except: - txt += "resources.cfg ERROR\n" - pass - + return txt def LoadHWFile(self): @@ -188,9 +227,9 @@ def __do_layout(self): sizer_panel = wx.BoxSizer(wx.VERTICAL) sizer_panel.Add(self.lblText1, 0, wx.EXPAND, 0) - sizer_panel.Add(self.TextCtrlOwn, 0, wx.EXPAND, 0) + sizer_panel.Add(self.TextCtrlOwn, -1, wx.EXPAND, 0) sizer_panel.Add(self.lblText2, 0, wx.EXPAND, 0) - sizer_panel.Add(self.TextCtrl, 0, wx.EXPAND, 0) + sizer_panel.Add(self.TextCtrl, -1, wx.EXPAND, 0) sizer_panel.Add(self.btnSubmit, 0, wx.EXPAND, 0) sizer_panel.Add(self.btnCancel, 0, wx.EXPAND, 0) self.panel.SetSizer(sizer_panel) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-25 01:15:45
|
Revision: 23 http://roreditor.svn.sourceforge.net/roreditor/?rev=23&view=rev Author: rorthomas Date: 2007-06-24 18:15:41 -0700 (Sun, 24 Jun 2007) Log Message: ----------- * removed psyco because of socket problems * bug submitting is now working Modified Paths: -------------- trunk/lib/ror/bugreport.py trunk/rortoolkit.py Modified: trunk/lib/ror/bugreport.py =================================================================== --- trunk/lib/ror/bugreport.py 2007-06-24 14:21:24 UTC (rev 22) +++ trunk/lib/ror/bugreport.py 2007-06-25 01:15:41 UTC (rev 23) @@ -54,7 +54,7 @@ outfile.close() def readFile(self, filename): - outfile = open(filename, 'r', encoding = 'utf-8') + outfile = open(filename, 'r') t = outfile.read() outfile.close() return t @@ -220,8 +220,62 @@ self.TextCtrl.LoadFile(BUGREPORT_FILENAME) def onSubmit(self, event=None): + import base64 + import socket + + #combine files + self.TextCtrl.SaveFile(BUGREPORT_FILENAME) + hwinfos = self.readFile(BUGREPORT_FILENAME) + + self.TextCtrlOwn.SaveFile(BUGREPORT_FILENAME) + owninfos = self.readFile(BUGREPORT_FILENAME) + + txt = owninfos + "\r\n" + hwinfos + + bugreport = base64.b64encode(txt) + txt = "action=bugreport&bugreport=%s" % bugreport + msg = """POST /index.php HTTP/1.0\r +Host: repository.rigsofrods.com\r +Content-Type: application/x-www-form-urlencoded\r +Content-Length: %d\r + +%s""" % (len(txt), txt) + + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect(('repository.rigsofrods.com', 80)) + #print "sending: %s" % msg + s.send(msg) + data = s.recv(9046) + s.close() + if data.find("successfully submitted") >= 0: + dlg = wx.MessageDialog(self, "Bugreport successfully submitted! Thanks for reporting!", "successfull", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + else: + dlg = wx.MessageDialog(self, "Erro while submitting Bugreport! Please use the Forums to report the bug!", "error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + #print 'Received', repr(data) self.Close() + return + #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + #s.connect(('repository.rigsofrods.com', 443)) + #ssl_sock = socket.ssl(s) + #print repr(ssl_sock.server()) + #print repr(ssl_sock.issuer()) + # Set a simple HTTP request -- use httplib in actual code. + #ssl_sock.write(msg) + + # Read a chunk of data. Will not necessarily + # read all the data returned by the server. + #print ssl_sock.read() + + # Note that you need to close the underlying socket, not the SSL object. + #del ssl_sock + #s.close() + def onExit(self, event=None): self.Close() Modified: trunk/rortoolkit.py =================================================================== --- trunk/rortoolkit.py 2007-06-24 14:21:24 UTC (rev 22) +++ trunk/rortoolkit.py 2007-06-25 01:15:41 UTC (rev 23) @@ -12,7 +12,7 @@ # Import Psyco if available try: import psyco - psyco.full() + #psyco.full() #psyco.log() #psyco.profile() except ImportError: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-25 18:04:51
|
Revision: 27 http://roreditor.svn.sourceforge.net/roreditor/?rev=27&view=rev Author: rorthomas Date: 2007-06-25 11:04:46 -0700 (Mon, 25 Jun 2007) Log Message: ----------- *updated setup: ** directx is now installed automatically ** pywin is now installed automatically * updated setup splash screen Modified Paths: -------------- trunk/setup.nsi trunk/splash.bmp Modified: trunk/setup.nsi =================================================================== --- trunk/setup.nsi 2007-06-25 17:46:49 UTC (rev 26) +++ trunk/setup.nsi 2007-06-25 18:04:46 UTC (rev 27) @@ -143,20 +143,20 @@ Function InstallDirectX InitPluginsDir - File /oname=$PLUGINSDIR\dxwebsetup.exe "tools/dxwebsetup.exe" + File /oname=$PLUGINSDIR\dxwebsetup.exe "tools\dxwebsetup.exe" Banner::show /NOUNLOAD "Installing lastest DirectX ..." - ExecWait '"dxwebsetup.exe /Q"' + ExecWait '"$PLUGINSDIR\dxwebsetup.exe /Q"' Delete $PLUGINSDIR\dxwebsetup.exe Banner::destroy FunctionEnd -Function InstallDirectX +Function InstallPyWin32 InitPluginsDir - File /oname=$PLUGINSDIR\pywin32.exe "tools/pywin32-210.win32-py2.5.exe" + File /oname=$PLUGINSDIR\pywin32-setup.exe "tools\pywin32-setup.exe" Banner::show /NOUNLOAD "Installing Python for Windows ..." - ExecWait '"pywin32.exe /Q"' - Delete $PLUGINSDIR\dxwebsetup.exe + ExecWait '"$PLUGINSDIR\pywin32-setup.exe"' + Delete $PLUGINSDIR\pywin32-setup.exe Banner::destroy FunctionEnd @@ -178,7 +178,11 @@ Call InstallDirectX SectionEnd -Section "Full Installation" SEC03 +Section "Install PyWin32" SEC03 + Call InstallPyWin32 +SectionEnd + +Section "Full Installation" SEC04 SetOutPath "$INSTDIR" SetOverwrite try File "ogre.cfg" @@ -201,6 +205,7 @@ SetOverwrite try File "/r" "lib" File "/r" "media" + File "/r" "tools" SectionEnd Section -AdditionalIcons Modified: trunk/splash.bmp =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-26 01:22:46
|
Revision: 32 http://roreditor.svn.sourceforge.net/roreditor/?rev=32&view=rev Author: rorthomas Date: 2007-06-25 18:22:44 -0700 (Mon, 25 Jun 2007) Log Message: ----------- updated terraineditor Modified Paths: -------------- trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/lib/rorterraineditor/RoRTerrainSelectedObjectOgreWindow.py trunk/lib/rorterraineditor/RoRTerrainSelectedObjectTopOgreWindow.py trunk/media/materials/mysimple.material Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-06-25 22:19:55 UTC (rev 31) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-06-26 01:22:44 UTC (rev 32) @@ -73,9 +73,9 @@ self.ogreTimer.Start(25) #create statusbar - self.statusbar = self.CreateStatusBar(3, 0, wx.ID_ANY, "mainstatusbar") - self.statusbar.SetStatusWidths([-1, 80, 80]) - self.statusbar.SetStatusText("-", 1) + self.statusbar = self.CreateStatusBar(4, 0, wx.ID_ANY, "mainstatusbar") + self.statusbar.SetStatusWidths([-1, 300, 300, 80]) + #self.statusbar.SetStatusText("", 1) #create toolbar #self.toolbar = wx.ToolBar(self, wx.ID_ANY, style = wx.TB_HORZ_TEXT) @@ -94,7 +94,7 @@ self.waterlevelctrl.max = 300 self.Bind(wx.EVT_SCROLL, self.OnChangeWaterLevel, self.waterlevelctrl) - self.CurrEntName = wx.StaticText(self, wx.ID_ANY, "\n\n\n") + #self.CurrEntName = wx.StaticText(self, wx.ID_ANY, "\n\n\n") #self.PosText = wx.StaticText(self, wx.ID_ANY, "Position: x,y,z") #self.terrPosX = wx.TextCtrl(self, wx.ID_ANY) #self.terrPosY = wx.TextCtrl(self, wx.ID_ANY) @@ -208,9 +208,20 @@ def updateObjPosRot(self, event=None): if self.terrainOgreWin.mSelected is None: + self.statusbar.SetStatusText("", 1) return - n = self.terrainOgreWin.mSelected.getParentNode() - self.CurrEntName.Label = "selected Object:\n%s" % n.getName() + n = self.terrainOgreWin.mSelected.getParentNode() + comment = self.terrainOgreWin.getCommentsForObject(n.getName()).lstrip('/') + if comment.strip() != "": + txt = "%s / %s" % (n.getName(), comment) + else: + txt = "%s" % n.getName() + self.statusbar.SetStatusText(txt, 1) + + posx, posy, posz, rotx, roty, rotz = self.terrainOgreWin.getSelectionPositionRotation() + txt = "%0.2f, %0.2f, %0.2f / %0.2f, %0.2f, %0.2f" % (posx, posy, posz, rotx, roty, rotz) + self.statusbar.SetStatusText(txt, 2) + #pos = n.getPosition() #self.terrPosX.SetValue(str(round(pos.x,2))) #self.terrPosY.SetValue(str(round(pos.y,2))) @@ -220,8 +231,8 @@ #self.terrRotY.SetValue(str(round(ogre.Radian(rot.getYaw(False)).valueDegrees(),2))) #self.terrRotZ.SetValue(str(round(ogre.Radian(rot.getRoll(False)).valueDegrees(),2))) - def OnChangeObjPosRot(self, event=None): - pass + #def OnChangeObjPosRot(self, event=None): + # pass def OnChangeTerrainNameChange(self, event=None): self.terrainOgreWin.TerrainName = self.terrainNamectrl.GetValue() @@ -311,7 +322,7 @@ def OnTimer(self, event): #fill labels with some information, all windows have the same FPS! txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) - self.statusbar.SetStatusText(txt, 2) + self.statusbar.SetStatusText(txt, 3) self.updateObjPosRot() def OnExit(self, event): @@ -363,7 +374,7 @@ sizer_settings.Add(self.terrainName, 0, wx.EXPAND, 0) sizer_settings.Add(self.terrainNamectrl, 0, wx.EXPAND, 0) - sizer_settings.Add(self.CurrEntName, 0, wx.EXPAND, 0) + #sizer_settings.Add(self.CurrEntName, 0, wx.EXPAND, 0) #sizer_settings.Add(self.PosText, 0, wx.EXPAND, 0) #sizer_terrPos = wx.BoxSizer(wx.HORIZONTAL) #sizer_terrPos.Add(self.terrPosX, 0, wx.EXPAND, 0) Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-06-25 22:19:55 UTC (rev 31) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-06-26 01:22:44 UTC (rev 32) @@ -4,7 +4,6 @@ from ror.truckparser import * from wxogre.OgreManager import * from wxogre.wxOgreWindow import * - from random import random ADDEDBY = "//added by the terrrain editor:\n" @@ -35,11 +34,24 @@ self.meshes = {} self.moveVector = None self.moveForce = 0 + self.selectionMaterial = None + self.selectionMaterialAnimState = 0 wxOgreWindow.__init__(self, self.parent, self.ID, size = self.size, **self.kwargs) + + def animateSelection(self): + if not self.selectionMaterial is None: + self.selectionMaterialAnimState += 0.01 + if self.selectionMaterialAnimState >= 0.4: + self.selectionMaterialAnimState = - 0.4 + val = 0.6 + abs(self.selectionMaterialAnimState) + #print val + self.selectionMaterial.setDiffuse(1, 0.3, 0, val) + self.selectionMaterial.setSpecular(1, 0.3, 0, val) + def OnFrameStarted(self): self.cameraLandCollision() - self.arrowScale = 0.1 + self.animateSelection() if not self.TranslateNode is None: if self.mSelected: if self.TranslationRotationMode: @@ -123,34 +135,6 @@ #create objects self.populateScene() - - - def populateScene(self): - self.sceneManager.AmbientLight = 0.5, 0.5, 0.5 - - l = self.sceneManager.createLight("MainLight" + self.rand) - l.setPosition(20,80,50) - fadeColour = (0.93, 0.86, 0.76) - self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) - self.renderWindow.getViewport(0).BackgroundColour = fadeColour - - self.sceneManager.setWorldGeometry('media/terrain.cfg') - plane = ogre.Plane() - plane.d = 5000 - plane.normal = -ogre.Vector3.UNIT_Y - - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); - self.sceneManager.setSkyDome(True, 'Examples/CloudySky', 4.0, 8.0) - - self.MainLight = self.sceneManager.createLight('MainLight') - self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) - - #create the camera Axes object - self.camAxesNode = self.sceneManager.getRootSceneNode().createChildSceneNode("camaxes" + self.rand) - self.camAxesEnt = self.sceneManager.createEntity('camAxesEnt' + self.rand, 'axes.mesh') - self.camAxesNode.attachObject(self.camAxesEnt) - def loadOdef(self, objname): try: f=open(self.rordir+"\\data\\objects\\%s.odef" % (objname), 'r') @@ -263,7 +247,7 @@ objname = (arr[6]).strip().split(" ") #print objname if objname[0][0:5] == "truck" and len(objname) > 1: - print "#############loading truck..." + print "loading truck..." fn = self.rordir + "\\data\\trucks\\"+objname[-1].strip() n, entname = self.createTruckMesh(fn) self.comments[entname] = comm @@ -275,7 +259,7 @@ n.setPosition(x, y, z) continue if objname[0][0:4] == "load" and len(objname) > 1: - print "#################loading load...." + print "loading load...." fn = self.rordir + "\\data\\trucks\\"+objname[-1].strip() n, entname = self.createTruckMesh(fn) self.comments[entname] = comm @@ -330,6 +314,33 @@ def formatFloat(self, fl): return "%12s" % ("%0.6f" % (float(fl))) + + def getCommentsForObject(self, entname): + if entname in self.comments.keys(): + #print self.comments[entname] + return self.comments[entname]; + else: + return "" + + def getSelectionPositionRotation(self): + if not self.mSelected is None: + return self.getPositionRotation(self.mSelected.getParentNode()) + + def getPositionRotation(self, obj): + scale = obj.getScale() + obj.setScale(1, 1, 1) + obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + pos = obj.getPosition() + rot = obj.getOrientation() + rot.normalise() + obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + obj.setScale(scale) + + rotx = ogre.Radian(rot.getPitch(False)).valueDegrees() + roty = ogre.Radian(rot.getRoll(False)).valueDegrees() + rotz = -ogre.Radian(rot.getYaw(False)).valueDegrees() + return pos.x, pos.y, pos.z, rotx, roty, rotz + def SaveTerrnFile(self, fn = None): if fn is None: fn = self.terrnfile @@ -367,17 +378,8 @@ for c in self.comments[k]: lines.append(c) - - truck = self.trucks[k] - scale = truck.getScale() - truck.setScale(1, 1, 1) - pos = truck.getPosition() - rot = truck.getOrientation() - truck.setScale(scale) + posx, posy, posz, rotx, roty, rotz = self.getPositionRotation(self.trucks[k]) - rotx = ogre.Radian(rot.getPitch(False)).valueDegrees() - rotz = ogre.Radian(rot.getRoll(False)).valueDegrees() - roty = - ogre.Radian(rot.getYaw(False)).valueDegrees() if rotx != 0: rotx -= 180 if roty != 0: @@ -385,9 +387,9 @@ if rotz != 0: rotz -= 180 truckstring = k.split(".")[-1] + "\t " + k - ar = [self.formatFloat(pos.x), - self.formatFloat(pos.y), - self.formatFloat(pos.z), + ar = [self.formatFloat(posx), + self.formatFloat(posy), + self.formatFloat(posz), self.formatFloat(rotx), self.formatFloat(roty), self.formatFloat(rotz), @@ -402,24 +404,11 @@ for c in self.comments[k]: lines.append(c) - - meshe = self.meshes[k] - scale = meshe.getScale() - meshe.setScale(1, 1, 1) - meshe.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - pos = meshe.getPosition() - rot = meshe.getOrientation() - rot.normalise() - meshe.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - meshe.setScale(scale) - - rotx = ogre.Radian(rot.getPitch(False)).valueDegrees() - roty = ogre.Radian(rot.getRoll(False)).valueDegrees() - rotz = - ogre.Radian(rot.getYaw(False)).valueDegrees() + posx, posy, posz, rotx, roty, rotz = self.getPositionRotation(self.meshes[k]) meshstring = k.split("_")[-1] - ar = [self.formatFloat(pos.x), - self.formatFloat(pos.y), - self.formatFloat(pos.z), + ar = [self.formatFloat(posx), + self.formatFloat(posy), + self.formatFloat(posz), self.formatFloat(rotx), self.formatFloat(roty), self.formatFloat(rotz), @@ -522,14 +511,17 @@ if not mat is None: mat.copyDetailsTo(selectedmat) newmat = ogre.MaterialManager.getSingleton().getByName(newmatname) - newmat.setSelfIllumination(0,1,1) - newmat.setDiffuse(0,1,1,1) - newmat.setAmbient(0,1,1) - newmat.setSpecular(0,1,1,1) + newmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) + newmat.setSelfIllumination(1, 0.3, 0) + newmat.setDiffuse(1, 0.3, 0, 0.5) + newmat.setAmbient(1, 0.3, 0) + newmat.setSpecular(1, 0.3, 0, 0.5) + self.selectionMaterial = newmat #self.mSelected.getSubEntity(0).setMaterialName(snewmatname) self.mSelected.setMaterialName(newmatname) self.mSelected.getParentSceneNode().showBoundingBox(True) self.reattachArrows(self.mSelected) + self.arrowScale = self.mSelected.getBoundingRadius() / 100 def LoadTerrnFile(self, filename): @@ -540,14 +532,17 @@ self.processTerrnFile(content) def populateScene(self): - self.sceneManager.AmbientLight = 0.5, 0.5, 0.5 + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - l = self.sceneManager.createLight("MainLight") - l.setPosition(20,80,50) - fadeColour = (0.93, 0.86, 0.76) + fadeColour = (0.8, 0.8, 0.8) self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) self.renderWindow.getViewport(0).BackgroundColour = fadeColour + l = self.sceneManager.createLight("MainLight") + l.setPosition(20,80,50) + + + #create the camera Axes object self.camAxesNode = None self.camAxesEnt = None @@ -628,6 +623,10 @@ def ObjectResetRotation(self): if self.mSelected: self.mSelected.getParentNode().resetOrientation() + self.mSelected.getParentNode().rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.RotateNode.resetOrientation() + self.RotateNode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + def selectarrow(self, arrow): if self.SelectedArrow.getSubEntity(0).getMaterialName()[-3:] != "sel": @@ -669,7 +668,7 @@ continue if not self.mSelected is None and self.mSelected.getName() == r.movable.getName(): continue - print r.movable.getMovableType(), r.movable.getName() + #print r.movable.getMovableType(), r.movable.getName() if not self.SelectedArrow is None: self.deselectarrow(self.SelectedArrow) self.SelectedArrow = None @@ -941,9 +940,9 @@ return #print event.m_keyCode - d = 5 + d = 2 if event.ShiftDown(): - d = 30 + d = 15 if event.m_keyCode == 65: # A, wx.WXK_LEFT: self.moveVector = ogre.Vector3(-1,0,0) self.moveForce = d Modified: trunk/lib/rorterraineditor/RoRTerrainSelectedObjectOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainSelectedObjectOgreWindow.py 2007-06-25 22:19:55 UTC (rev 31) +++ trunk/lib/rorterraineditor/RoRTerrainSelectedObjectOgreWindow.py 2007-06-26 01:22:44 UTC (rev 32) @@ -35,9 +35,11 @@ def OnFrameStarted(self): # sync with main if not self.mainWindow.mSelected is None: + self.radius = self.mainWindow.mSelected.getBoundingRadius() * 2 + height = self.mainWindow.mSelected.getBoundingBox().getMaximum().y n = self.mainWindow.mSelected.getParentNode() - pos = n.getPosition() - self.camera.lookAt(pos) + pos = n.getPosition() + ogre.Vector3(0, height*0.4, 0) + self.camera.lookAt(pos + ogre.Vector3(0, height/2, 0)) dx = math.cos(self.camalpha) * self.radius dy = math.sin(self.camalpha) * self.radius self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) Modified: trunk/lib/rorterraineditor/RoRTerrainSelectedObjectTopOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainSelectedObjectTopOgreWindow.py 2007-06-25 22:19:55 UTC (rev 31) +++ trunk/lib/rorterraineditor/RoRTerrainSelectedObjectTopOgreWindow.py 2007-06-26 01:22:44 UTC (rev 32) @@ -41,6 +41,8 @@ pos = n.getPosition() terrainHeight = self.getTerrainHeight(pos) camHeight = self.distance + self.camera.setNearClipDistance(camHeight) + self.camera.setFarClipDistance(camHeight * 10) self.camera.setPosition(pos + ogre.Vector3(0.1, camHeight, 0.1)) self.camera.lookAt(pos) wxOgreWindow.OnFrameStarted(self) @@ -48,10 +50,12 @@ def SceneInitialisation(self): # create a camera self.camera = self.sceneManager.createCamera('SharedCamera' + self.rand) - self.camera.lookAt(ogre.Vector3(0, 0, 0)) - self.camera.setPosition(ogre.Vector3(0, 0, 100)) - self.camera.nearClipDistance = 0.1 - self.camera.setAutoAspectRatio(True) + + self.camera.setProjectionType(ogre.ProjectionType.PT_ORTHOGRAPHIC) + self.camera.setNearClipDistance(5) + self.camera.setPosition(ogre.Vector3(0.1,-100,0)) + self.camera.lookAt(ogre.Vector3(0,0,0)) + #self.camera.setAutoAspectRatio(True) # create the Viewport" self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) Modified: trunk/media/materials/mysimple.material =================================================================== --- trunk/media/materials/mysimple.material 2007-06-25 22:19:55 UTC (rev 31) +++ trunk/media/materials/mysimple.material 2007-06-26 01:22:44 UTC (rev 32) @@ -10,7 +10,7 @@ { texture water.jpg scroll_anim 0.01 0.01 - alpha_op_ex source1 src_manual src_current 0.9 + alpha_op_ex source1 src_manual src_current 0.75 } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-28 05:02:31
|
Revision: 36 http://roreditor.svn.sourceforge.net/roreditor/?rev=36&view=rev Author: rorthomas Date: 2007-06-27 22:02:30 -0700 (Wed, 27 Jun 2007) Log Message: ----------- Modified Paths: -------------- trunk/svn.bat trunk/svn.py Modified: trunk/svn.bat =================================================================== --- trunk/svn.bat 2007-06-28 04:42:23 UTC (rev 35) +++ trunk/svn.bat 2007-06-28 05:02:30 UTC (rev 36) @@ -1 +1 @@ -%systemdrive%\python25\python.exe co.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +%systemdrive%\python25\python.exe svn.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/svn.py =================================================================== --- trunk/svn.py 2007-06-28 04:42:23 UTC (rev 35) +++ trunk/svn.py 2007-06-28 05:02:30 UTC (rev 36) @@ -7,23 +7,29 @@ print event_dict['path'] def svnupdate(): - import pysvn print "checkout" - client = pysvn.Client() path = os.path.dirname(os.path.abspath(__file__)) - client.update(path, - recurse = True, - revision=pysvn.Revision(pysvn.opt_revision_kind.head), - ignore_externals = False) + try: + import pysvn + client = pysvn.Client() + client.callback_notify = notify + client.update(path, + recurse = True, + revision = pysvn.Revision(pysvn.opt_revision_kind.head), + ignore_externals = False) + except: + print "error while checkout!" def svncheckout(): - import pysvn print "update" - client = pysvn.Client() - #check out the current version of the pysvn project path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "svnco") - client.callback_notify = notify - client.checkout(URL, path) + try: + import pysvn + client = pysvn.Client() + client.callback_notify = notify + client.checkout(URL, path) + except: + print "error while checkout!" def main(): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-29 08:29:04
|
Revision: 63 http://roreditor.svn.sourceforge.net/roreditor/?rev=63&view=rev Author: rorthomas Date: 2007-06-29 01:29:01 -0700 (Fri, 29 Jun 2007) Log Message: ----------- * deleted old settings class * added new settingsManager and logger * added update bat script * added config files for logging and editor.ini * modified existing classes to use new settingsManager and logger - not completed Modified Paths: -------------- trunk/lib/ror/starter.py trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/lib/rortruckeditor/MainFrame.py trunk/lib/rortruckeditor/RoRTruckOgreWindow.py Added Paths: ----------- trunk/lib/ror/editor.ini trunk/lib/ror/logger.py trunk/lib/ror/logging.ini trunk/lib/ror/settingsManager.py trunk/update.bat trunk/update.py Removed Paths: ------------- trunk/lib/ror/rorsettings.py Added: trunk/lib/ror/editor.ini =================================================================== --- trunk/lib/ror/editor.ini (rev 0) +++ trunk/lib/ror/editor.ini 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1,6 @@ +[RigsOfRods] +basepath = C:\games\RoR-0.31a + +[gui] +usegui = yes + Added: trunk/lib/ror/logger.py =================================================================== --- trunk/lib/ror/logger.py (rev 0) +++ trunk/lib/ror/logger.py 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1,22 @@ +import os, os.path, sys, logging,logging.config + +LOGCONFIGFILE = "logging.ini" + +# "extended" singleton +_rorlogger = None +def log(): + global _rorlogger + if _rorlogger is None: + _rorlogger = RoRLogger() + return _rorlogger.getLog() + +class RoRLogger(): + logconfigfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), LOGCONFIGFILE) + + def __init__(self): + logging.config.fileConfig(self.logconfigfilename) + self.myLog = logging.getLogger("root") + self.myLog.info("logging initialised") + + def getLog(self): + return self.myLog Added: trunk/lib/ror/logging.ini =================================================================== --- trunk/lib/ror/logging.ini (rev 0) +++ trunk/lib/ror/logging.ini 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1,41 @@ +#lines with # are comments! +#please refer to http://docs.python.org/lib/logging-config-fileformat.html + +#list of loggin-targets +[loggers] +keys=root + +#list of handlers +[handlers] +keys=consolelog,filelog + +#list of formatters +[formatters] +keys=full,short + +#main logging-target +[logger_root] +level=NOTSET +handlers=consolelog,filelog + +[handler_filelog] +class=FileHandler +level=DEBUG +formatter=full +args=('editorlog.txt', 'w') + +#console-output-handler +[handler_consolelog] +class=StreamHandler +level=DEBUG +formatter=short +args=(sys.stdout,) + +#logging formats +[formatter_full] +format=%(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s +datefmt= + +[formatter_short] +format=%(asctime)s | %(levelname)s | %(message)s +datefmt= Deleted: trunk/lib/ror/rorsettings.py =================================================================== --- trunk/lib/ror/rorsettings.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/ror/rorsettings.py 2007-06-29 08:29:01 UTC (rev 63) @@ -1,40 +0,0 @@ -import os, os.path - - -_set = None -def getSettings(): - global _set - if _set is None: - _set = RoRSettings() - return _set - -class RoRSettings: - rordir = None - configfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "editor.cfg") - def __init__(self): - self.LoadRoRDir() - - def getRoRDir(self): - return self.rordir - - def setRoRDir(self, dir): - self.rordir = dir - self.SaveRoRDir() - - def LoadRoRDir(self): - try: - f = open(self.configfilename,'r') - self.rordir = os.path.abspath(f.read()) - f.close() - print "Loaded RoR Directory: %s" % self.rordir - print "Loading..." - except: - print "error while loading rordir: %s" % self.configfilename - - def SaveRoRDir(self): - try: - f = open(self.configfilename,'w') - f.write(self.rordir) - f.close() - except: - print "error while saving rordir: %s" % os.path.abspath("editor.cfg") Added: trunk/lib/ror/settingsManager.py =================================================================== --- trunk/lib/ror/settingsManager.py (rev 0) +++ trunk/lib/ror/settingsManager.py 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1,54 @@ +import os, os.path, sys, ConfigParser +import logger + +CONFIGFILE = "editor.ini" + +# singleton pattern +_rorsettings = None +def getSettingsManager(): + global _rorsettings + if _rorsettings is None: + _rorsettings = RoRSettings() + return _rorsettings + +class RoRSettings: + myConfig = None + configfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), CONFIGFILE) + + def __init__(self): + self.loadSettings() + + def loadSettings(self): + try: + self.myConfig = ConfigParser.ConfigParser() + self.myConfig.read(self.configfilename) + logger.log().info("Settings loaded") + except Exception, e: + logger.log().exception(str(e)) + + def getSetting(self, group, key): + try: + return self.myConfig.get(group, key) + except Exception, e: + logger.log().exception(str(e)) + return "" + + def saveSettings(self): + try: + fp = open(self.configfilename, 'w') + self.myConfig.write(fp) + fp.close() + logger.log().info("Settings saved") + except Exception, e: + logger.log().exception(str(e)) + + def setSetting(self, section, option, value): + try: + if not self.myConfig.has_section(section): + self.myConfig.add_section(section) + self.myConfig.set(section, option, value) + self.saveSettings() + return True + except Exception, e: + logger.log().exception(str(e)) + return False Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/ror/starter.py 2007-06-29 08:29:01 UTC (rev 63) @@ -1,11 +1,14 @@ #Thomas Fischer 31/05/2007, th...@th... from wxogre.OgreManager import * from ror.RoROgreWindow import * -from ror.rorsettings import * from ror.rorcommon import * from subprocess import Popen -import wx +from ror.logger import log +from ror.settingsManager import getSettingsManager + +import wx, os, os.path + class SettingsDialog(wx.Frame): rordir = None def __init__(self, *args, **kwds): @@ -36,7 +39,7 @@ self.btnExit = wx.Button(self.panel, wx.ID_ANY, "Exit") self.Bind(wx.EVT_BUTTON, self.OnExit, self.btnExit) - self.rordir = getSettings().getRoRDir() + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") #print self.rordir if not self.rordir is None: if self.checkRoRDir(self.rordir): @@ -63,36 +66,41 @@ svn.run() def OnStartRoR(self, event=None): - #escape spaces! - path = os.path.join(self.rordir, "RoR.exe") - print path - p = Popen(path, shell=False, cwd=self.rordir) - #sts = os.waitpid(p.pid, 0) + try: + path = os.path.join(self.rordir, "RoR.exe") + log().info("starting RoR: %s" % path) + p = Popen(path, shell = False, cwd = self.rordir) + #sts = os.waitpid(p.pid, 0) + except Exception, e: + log().exception(str(e)) def OnTruckEditor(self, event=None): - import rortruckeditor.MainFrame try: + import rortruckeditor.MainFrame self.Close() + log().info("starting Truckeditor") app = rortruckeditor.MainFrame.startApp() del app - except: - pass + except Exception, e: + log().exception(str(e)) def OnBugReport(self, event=None): - import ror.bugreport - #try: - ror.bugreport.showBugReportFrame() - #except: - # pass + try: + log().info("starting bugreporter") + import ror.bugreport + ror.bugreport.showBugReportFrame() + except Exception, e: + log().exception(str(e)) def OnTerrainEditor(self, event=None): - import rorterraineditor.MainFrame try: + import rorterraineditor.MainFrame + log().info("starting Terraineditor") self.Close() app = rorterraineditor.MainFrame.startApp() del app - except: - pass + except Exception, e: + log().exception(str(e)) def checkRoRDir(self, fn): # withoutspaces = (fn.find(" ") == -1) @@ -123,7 +131,7 @@ #newpath = newpath.replace(" ", "\ ") self.rordir = newpath self.lblRoRDir.SetLabel(newpath) - getSettings().setRoRDir(newpath) + getSettingsManager().setSetting("RigsOfRods", "BasePath", newpath) #self.btnStartRoR.Enable(True) self.btnStartTruckEditor.Enable(True) self.btnStartTerrainEditor.Enable(True) Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-06-29 08:29:01 UTC (rev 63) @@ -1,7 +1,10 @@ #Thomas Fischer 31/05/2007, th...@th... from wxogre.OgreManager import * from ror.RoROgreWindow import * -from ror.rorsettings import * + +from ror.logger import log +from ror.settingsManager import getSettingsManager + from ror.rorcommon import * from RoRTerrainOgreWindow import * from RoRTerrainSelectedObjectOgreWindow import * @@ -48,7 +51,7 @@ self.splitter.SetSashPosition(100) self.splitter.SetMinimumPaneSize(200) - self.rordir = getSettings().getRoRDir() + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") #ogre windows self.terrainOgreWin = RoRTerrainOgreWindow(self.splitterleft, wx.ID_ANY, rordir=self.rordir) Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-06-29 08:29:01 UTC (rev 63) @@ -844,7 +844,7 @@ myManualObject.position(float(node[1]),float(node[2]),float(node[3])) print len(p.tree['submeshgroups']) - if not 'submeshgroups' in p.tree.keys() or len(p.tree['submeshgroups']) == 0: + if len(p.tree['submeshgroups']) > 0: faces = [] for smobj in p.tree['submeshgroups']: for cabobj in smobj['cab']: Modified: trunk/lib/rortruckeditor/MainFrame.py =================================================================== --- trunk/lib/rortruckeditor/MainFrame.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/rortruckeditor/MainFrame.py 2007-06-29 08:29:01 UTC (rev 63) @@ -1,7 +1,10 @@ #Thomas Fischer 31/05/2007, th...@th... from wxogre.OgreManager import * from ror.RoROgreWindow import * -from ror.rorsettings import * + +from ror.logger import log +from ror.settingsManager import getSettingsManager + from ror.rorcommon import * from RoRTruckOgreWindow import * @@ -44,7 +47,7 @@ self.splitter.SetSashPosition(100) self.splitter.SetMinimumPaneSize(200) - self.rordir = getSettings().getRoRDir() + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") #ogre windows self.truckOgreWin = RoRTruckOgreWindow(self.splitterleft, wx.ID_ANY) Modified: trunk/lib/rortruckeditor/RoRTruckOgreWindow.py =================================================================== --- trunk/lib/rortruckeditor/RoRTruckOgreWindow.py 2007-06-28 22:29:21 UTC (rev 62) +++ trunk/lib/rortruckeditor/RoRTruckOgreWindow.py 2007-06-29 08:29:01 UTC (rev 63) @@ -2,7 +2,10 @@ import wx, os, os.path import ogre.renderer.OGRE as ogre from ror.truckparser import * -from ror.rorsettings import * + +from ror.logger import log +from ror.settingsManager import getSettingsManager + from ror.rorcommon import * from wxogre.OgreManager import * from wxogre.wxOgreWindow import * @@ -17,7 +20,7 @@ class RoRTruckOgreWindow(wxOgreWindow): def __init__(self, parent, ID, size = wx.Size(200,200), **kwargs): self.parent = parent - self.rordir = getSettings().getRoRDir() + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") self.World = OgreNewt.World() self.sceneManager = None self.uvFrame = None Added: trunk/update.bat =================================================================== --- trunk/update.bat (rev 0) +++ trunk/update.bat 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1 @@ +%systemdrive%\python25\python.exe update.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Added: trunk/update.py =================================================================== --- trunk/update.py (rev 0) +++ trunk/update.py 2007-06-29 08:29:01 UTC (rev 63) @@ -0,0 +1,9 @@ +import sys, os, os.path + +def main(): + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + import ror.svn + ror.svn.run() + +if __name__=="__main__": + main() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-29 08:34:26
|
Revision: 64 http://roreditor.svn.sourceforge.net/roreditor/?rev=64&view=rev Author: rorthomas Date: 2007-06-29 01:34:25 -0700 (Fri, 29 Jun 2007) Log Message: ----------- * renamed log file Modified Paths: -------------- trunk/lib/ror/logging.ini trunk/ogre.cfg Modified: trunk/lib/ror/logging.ini =================================================================== --- trunk/lib/ror/logging.ini 2007-06-29 08:29:01 UTC (rev 63) +++ trunk/lib/ror/logging.ini 2007-06-29 08:34:25 UTC (rev 64) @@ -22,7 +22,7 @@ class=FileHandler level=DEBUG formatter=full -args=('editorlog.txt', 'w') +args=('editorlog.log', 'w') #console-output-handler [handler_consolelog] Modified: trunk/ogre.cfg =================================================================== --- trunk/ogre.cfg 2007-06-29 08:29:01 UTC (rev 63) +++ trunk/ogre.cfg 2007-06-29 08:34:25 UTC (rev 64) @@ -8,12 +8,3 @@ RTT Preferred Mode=PBuffer VSync=Yes Video Mode=1024 x 480 - -[Direct3D9 Rendering Subsystem] -Allow NVPerfHUD=No -Anti aliasing=None -Floating-point mode=Fastest -Full Screen=Yes -Rendering Device=RADEON X850 Series -VSync=No -Video Mode=800 x 600 @ 32-bit colour This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-06-30 00:59:32
|
Revision: 68 http://roreditor.svn.sourceforge.net/roreditor/?rev=68&view=rev Author: rorthomas Date: 2007-06-29 17:59:28 -0700 (Fri, 29 Jun 2007) Log Message: ----------- * added opengl/directx combobox selector to starter * removed BSP manager from default plugins.cfg Modified Paths: -------------- trunk/lib/ror/starter.py trunk/plugins.cfg Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-06-29 22:32:03 UTC (rev 67) +++ trunk/lib/ror/starter.py 2007-06-30 00:59:28 UTC (rev 68) @@ -9,6 +9,11 @@ import wx, os, os.path +RENDERSYSTEMS = ['OpenGL', 'DirectX9'] + +DIRECTXLINE = "Plugin=RenderSystem_Direct3D9.dll" +OPENGLLINE = "Plugin=RenderSystem_GL.dll" + class SettingsDialog(wx.Frame): rordir = None def __init__(self, *args, **kwds): @@ -23,6 +28,9 @@ #self.btnStartRoR = wx.Button(self.panel, wx.ID_ANY, "Start RoR") #self.Bind(wx.EVT_BUTTON, self.OnStartRoR, self.btnStartRoR) + + self.cbbRenderEngine = wx.ComboBox(self.panel, wx.ID_ANY, RENDERSYSTEMS[0], style=wx.CB_READONLY, choices=RENDERSYSTEMS) + self.Bind(wx.EVT_COMBOBOX, self.OnSelectRenderer, self.cbbRenderEngine) self.btnStartTerrainEditor = wx.Button(self.panel, wx.ID_ANY, "Start Terrain Editor") self.Bind(wx.EVT_BUTTON, self.OnTerrainEditor, self.btnStartTerrainEditor) @@ -60,7 +68,35 @@ self.btnStartTerrainEditor.Enable(False) self.__set_properties() self.__do_layout() + + self.renderSystem = RENDERSYSTEMS[0] + def OnSelectRenderer(self, id=None, func=None): + self.renderSystem = self.cbbRenderEngine.GetCurrentSelection() + self.updateRenderer() + + def updateRenderer(self): + filename = os.path.join(os.getcwd(), "plugins.cfg") + f=open(filename, 'r') + content = f.readlines() + f.close() + print self.renderSystem + for i in range(0, len(content)): + if content[i].find(OPENGLLINE) >= 0: + if self.renderSystem == 0: + content[i] = OPENGLLINE+"\n" + else: + content[i] = "#"+OPENGLLINE+"\n" + elif content[i].find(DIRECTXLINE) >= 0: + if self.renderSystem == 1: + content[i] = DIRECTXLINE+"\n" + else: + content[i] = "#"+DIRECTXLINE+"\n" + + f=open(filename, 'w') + f.writelines(content) + f.close() + def OnUpdate(self, event=None): import svn svn.run() @@ -149,18 +185,19 @@ def __do_layout(self): sizer_panel = wx.BoxSizer(wx.VERTICAL) - sizer_panel.Add(self.lblRoRDir, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) + sizer_panel.Add(self.lblRoRDir, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) #sizer_panel.Add(self.btnStartRoR, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnStartTerrainEditor, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnStartTruckEditor, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnBugReport, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnUpdate, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) + sizer_panel.Add(self.cbbRenderEngine, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnStartTerrainEditor, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnStartTruckEditor, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnBugReport, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnUpdate, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) self.panel.SetSizer(sizer_panel) sizer_main = wx.BoxSizer(wx.VERTICAL) - sizer_main.Add(self.panel, 0, wx.EXPAND, 0) + sizer_main.Add(self.panel, 0, wx.EXPAND, 0) self.SetAutoLayout(True) self.SetSizer(sizer_main) Modified: trunk/plugins.cfg =================================================================== --- trunk/plugins.cfg 2007-06-29 22:32:03 UTC (rev 67) +++ trunk/plugins.cfg 2007-06-30 00:59:28 UTC (rev 68) @@ -3,6 +3,6 @@ #disable the directx plugin as it would require the latest directx system #Plugin=RenderSystem_Direct3D9.dll Plugin=Plugin_ParticleFX.dll -Plugin=Plugin_BSPSceneManager.dll +#Plugin=Plugin_BSPSceneManager.dll Plugin=Plugin_OctreeSceneManager.dll Plugin=Plugin_CgProgramManager.dll \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-03 01:38:57
|
Revision: 80 http://roreditor.svn.sourceforge.net/roreditor/?rev=80&view=rev Author: rorthomas Date: 2007-07-02 18:38:56 -0700 (Mon, 02 Jul 2007) Log Message: ----------- * application restarts itself after an update automatically Modified Paths: -------------- trunk/lib/ror/svngui.py Added Paths: ----------- trunk/updaterestart.bat trunk/updaterestart.py Modified: trunk/lib/ror/svngui.py =================================================================== --- trunk/lib/ror/svngui.py 2007-07-03 01:27:22 UTC (rev 79) +++ trunk/lib/ror/svngui.py 2007-07-03 01:38:56 UTC (rev 80) @@ -21,13 +21,21 @@ self.pr.Hide() del self.pr + def restart(self): + path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..\\..")) + path = os.path.join(path, "updaterestart.bat") + log().info("restarting ...") + p = Popen(path, shell = True) + sys.exit(0) + def showfinished(self): if self.changes == 2: dlg = wx.MessageDialog(self.pr, "No Update available!", "Info", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() + self.restart() elif self.changes > 2: - dlg = wx.MessageDialog(self.pr, "Update finished!\nPlease restart the Application!", "Info", wx.OK | wx.ICON_INFORMATION) + dlg = wx.MessageDialog(self.pr, "Update finished!\nThe Application now restarts itself!", "Info", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() Added: trunk/updaterestart.bat =================================================================== --- trunk/updaterestart.bat (rev 0) +++ trunk/updaterestart.bat 2007-07-03 01:38:56 UTC (rev 80) @@ -0,0 +1 @@ +%systemdrive%\python25\python.exe updaterestart.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Added: trunk/updaterestart.py =================================================================== --- trunk/updaterestart.py (rev 0) +++ trunk/updaterestart.py 2007-07-03 01:38:56 UTC (rev 80) @@ -0,0 +1,12 @@ +import sys, os, os.path +from subprocess import Popen + +def main(): + import time + time.sleep(1) + path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "rortoolkit.bat") + p = Popen(path, shell = True) + sys.exit(0) + +if __name__=="__main__": + main() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-06 00:16:23
|
Revision: 86 http://roreditor.svn.sourceforge.net/roreditor/?rev=86&view=rev Author: rorthomas Date: 2007-07-05 17:16:10 -0700 (Thu, 05 Jul 2007) Log Message: ----------- * added bat shortcuts for depchecker * added ogrecmdlinetools to tools\ Modified Paths: -------------- trunk/lib/ror/depchecker/ror_mesh.py Added Paths: ----------- trunk/depchecker.bat trunk/depchecker.py trunk/tools/OgreCommandLineTools/ trunk/tools/OgreCommandLineTools/OgreMain.dll trunk/tools/OgreCommandLineTools/OgreMaterialUpgrade.exe trunk/tools/OgreCommandLineTools/OgreMeshUpgrade.exe trunk/tools/OgreCommandLineTools/OgreXmlConverter.exe trunk/tools/OgreCommandLineTools/Readme.txt trunk/tools/OgreCommandLineTools/devil.dll trunk/tools/OgreCommandLineTools/ilu.dll trunk/tools/OgreCommandLineTools/ilut.dll trunk/tools/OgreCommandLineTools/zlib1.dll Added: trunk/depchecker.bat =================================================================== --- trunk/depchecker.bat (rev 0) +++ trunk/depchecker.bat 2007-07-06 00:16:10 UTC (rev 86) @@ -0,0 +1 @@ +%systemdrive%\python25\python.exe depchecker.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Added: trunk/depchecker.py =================================================================== --- trunk/depchecker.py (rev 0) +++ trunk/depchecker.py 2007-07-06 00:16:10 UTC (rev 86) @@ -0,0 +1,28 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + +def main(): + """ + main method + """ + + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + import ror.settingsManager + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(path,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + import ror.depchecker + ror.depchecker.main() + + +if __name__=="__main__": + main() \ No newline at end of file Modified: trunk/lib/ror/depchecker/ror_mesh.py =================================================================== --- trunk/lib/ror/depchecker/ror_mesh.py 2007-07-05 23:52:07 UTC (rev 85) +++ trunk/lib/ror/depchecker/ror_mesh.py 2007-07-06 00:16:10 UTC (rev 86) @@ -1,7 +1,8 @@ -import os, os.path, re +import sys, os, os.path, re import subprocess -CONVERTERBIN = "C:\\OgreCommandLineTools\\OgreXmlConverter.exe" +# todo remove this hardcoded stuff here! +CONVERTERBIN = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..\\..\\..\\tools\\OgreCommandLineTools\\OgreXmlConverter.exe")) REs = [r".*material\s?=[\"\']([a-zA-Z0-9_/\-\\]*)[\"\'].*"] def readFile(filename): Added: trunk/tools/OgreCommandLineTools/OgreMain.dll =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/OgreMain.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/OgreMaterialUpgrade.exe =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/OgreMaterialUpgrade.exe ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/OgreMeshUpgrade.exe =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/OgreMeshUpgrade.exe ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/OgreXmlConverter.exe =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/OgreXmlConverter.exe ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/Readme.txt =================================================================== --- trunk/tools/OgreCommandLineTools/Readme.txt (rev 0) +++ trunk/tools/OgreCommandLineTools/Readme.txt 2007-07-06 00:16:10 UTC (rev 86) @@ -0,0 +1,108 @@ +OGRE COMMAND-LINE UTILITIES +=========================== + +This archive contains a few prebuilt command-line tools for manipulating your +media. For further info, visit http://www.ogre3d.org + +OgreXMLConverter +---------------- +Converts between the binary and XML formats for .mesh and .skeleton. Will also +allow you to generate LOD information if you are converting to the binary +format. This tool is necessary to convert from the XML to OGRE's native runtime +format if your exporter produces XML. You can find the XML Schema for the .mesh +and .skeleton formats in the Ogre source under Tools/XMLConverter/docs. + +Usage: OgreXMLConverter [options] sourcefile [destfile] + +Available options: +-i = interactive mode - prompt for options +(The next 4 options are only applicable when converting XML to Mesh) +-l lodlevels = number of LOD levels +-d loddist = distance increment to reduce LOD +-p lodpercent = Percentage triangle reduction amount per LOD +-f lodnumtris = Fixed vertex reduction per LOD +-e = DON'T generate edge lists (for stencil shadows) +-r = DON'T reorganise vertex buffers to OGRE recommended format. +-t = Generate tangents (for normal mapping) +-o = DON'T optimise out redundant tracks & keyframes +-d3d = Prefer D3D packed colour formats (default on Windows) +-gl = Prefer GL packed colour formats (default on non-Windows) +-E endian = Set endian mode 'big' 'little' or 'native' (default) +-q = Quiet mode, less output +-log filename = name of the log file (default: 'OgreXMLConverter.log') +sourcefile = name of file to convert +destfile = optional name of file to write to. If you don't + specify this OGRE works it out through the extension + and the XML contents if the source is XML. For example + test.mesh becomes test.xml, test.xml becomes test.mesh + if the XML document root is <mesh> etc. + +Because the default behaviour is to convert binary to XML and vice versa, you +can simply drag files onto this converter and it will convert between the 2 +formats, although you will not be able to use it to generate LOD levels this +way. + +OgreMeshUpgrade +--------------- + +This tool upgrades a .mesh file from any previous version of OGRE to the latest +version. You will be advised in Ogre.log if your meshes are of an old version; +OGRE can still load old versions but performance may not be as good as it would +be with the latest version. You are advised to upgrade your meshes whenever you +update to another major version of OGRE. + +Usage: OgreMeshUpgrader [options] sourcefile [destfile] +-i = Interactive mode, prompt for options +-l lodlevels = number of LOD levels +-d loddist = distance increment to reduce LOD +-p lodpercent = Percentage triangle reduction amount per LOD +-f lodnumtris = Fixed vertex reduction per LOD +-e = DON'T generate edge lists (for stencil shadows) +-t = Generate tangents (for normal mapping) +-r = DON'T reorganise buffers to recommended format +-d3d = Convert to D3D colour formats +-gl = Convert to GL colour formats +-srcd3d = Interpret ambiguous colours as D3D style +-srcgl = Interpret ambiguous colours as GL style +-E endian = Set endian mode 'big' 'little' or 'native' (default) +sourcefile = name of file to convert +destfile = optional name of file to write to. If you don't + specify this OGRE overwrites the existing file. + +Again you can drag files onto this tool, so long as you don't mind it +overwriting the file in place. If you'd prefer to keep a backup, make a copy or +use the command line to upgrade to a different file. + +Reorganising vertex buffers: this tool now allows you to restructure the vertex +buffers in your mesh. If you are upgrading from a version prior to 0.15.0, then +you should answer 'y' when asked if you want to reorganise the buffers, since +0.15.0 and later allows more efficient structures in the binary mesh. You will +then be shown the buffer structures for each of the geometry sections; you can +either reorganise the buffers yourself, or use 'automatic' mode, which is +recommended unless you know what you're doing. + +OgreMaterialUpgrade +------------------- +Upgrades a .material script from any previous version of OGRE to the new +.material format. Note that upgraded scripts do not use any new features of the +material, and you may find that some attributes are re-written as their +'complex' variants rather than their simplified versions (e.g. "scene_blend add" +will be written as "scene_blend one one" because this is what 'add' maps down +to. + +You only need to run this tool if you have .material scripts from a version of +OGRE older than 0.13.0. Material scripts written for 0.13.0 onwards do not +need upgrading. + +Usage: + +OgreMaterialUpgrade sourcefile [destfile] +sourcefile = name of file to convert +destfile = optional name of file to write to. If you don't + specify this OGRE overwrites the existing file. + +Again you can drag files onto this tool, so long as you don't mind it +overwriting the file in place. If you'd prefer to keep a backup, make a copy or +use the command line to upgrade to a different file. + +Copyright 2004 The OGRE Team Added: trunk/tools/OgreCommandLineTools/devil.dll =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/devil.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/ilu.dll =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/ilu.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/ilut.dll =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/ilut.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/tools/OgreCommandLineTools/zlib1.dll =================================================================== (Binary files differ) Property changes on: trunk/tools/OgreCommandLineTools/zlib1.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-20 12:41:41
|
Revision: 111 http://roreditor.svn.sourceforge.net/roreditor/?rev=111&view=rev Author: rorthomas Date: 2007-07-20 05:41:36 -0700 (Fri, 20 Jul 2007) Log Message: ----------- * logging stubs * terrain editor undo/redo function Modified Paths: -------------- trunk/lib/ror/terrainparser.py trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/lib/wxogre/OgreManager.py trunk/terrainreadme.txt Modified: trunk/lib/ror/terrainparser.py =================================================================== --- trunk/lib/ror/terrainparser.py 2007-07-20 10:00:13 UTC (rev 110) +++ trunk/lib/ror/terrainparser.py 2007-07-20 12:41:36 UTC (rev 111) @@ -184,29 +184,6 @@ obj.additionaloptions = objname[1:] self.objects.append(obj) - - - def loadOdef(self, objname): - try: - f=open(self.rordir+"\\data\\objects\\%s.odef" % (objname), 'r') - content = f.readlines() - f.close() - meshname = content[0].strip() - scalearr = content[1].split(",") - self.myODefs[objname] = [] - if len(content) > 2: - for i in range(1,len(content)): - line = content[i] - if line.lower().strip() == "end": - break - self.myODefs[objname].append(line.split(",")) - return (meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2])) - else: - return (meshname, 1, 1, 1) - except Exception, err: - print "error while processing odef file of %s" % objname - print str(err) - def getObjectLines(self, object): lines = [] Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-07-20 10:00:13 UTC (rev 110) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-07-20 12:41:36 UTC (rev 111) @@ -77,8 +77,8 @@ self.ogreTimer.Start(25) #create statusbar - self.statusbar = self.CreateStatusBar(4, 0, wx.ID_ANY, "mainstatusbar") - self.statusbar.SetStatusWidths([-1, 300, 300, 80]) + self.statusbar = self.CreateStatusBar(5, 0, wx.ID_ANY, "mainstatusbar") + self.statusbar.SetStatusWidths([-1, 200, 130, 250, 80]) #self.statusbar.SetStatusText("", 1) #create toolbar @@ -214,10 +214,11 @@ self.terrainOgreWin.stickCurrentObjectToGround = self.btnStickToGround.GetValue() def updateObjPosRot(self, event=None): + self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) if self.terrainOgreWin.terrain is None: return if self.terrainOgreWin.selectedEntry is None: - self.statusbar.SetStatusText("", 1) + self.statusbar.SetStatusText("Nothing selected", 2) return entry = self.terrainOgreWin.selectedEntry #comment = self.terrainOgreWin.getCommentsForObject(n.getName()).lstrip('/') @@ -225,11 +226,11 @@ # txt = "%s / %s" % (n.getName(), comment) #else: txt = "%s %s" % (entry.data.name, " ".join(entry.data.additionaloptions)) - self.statusbar.SetStatusText(txt, 1) - + self.statusbar.SetStatusText(txt, 2) + posx, posy, posz, rotx, roty, rotz = self.terrainOgreWin.getSelectionPositionRotation() txt = "%0.2f, %0.2f, %0.2f / %0.2f, %0.2f, %0.2f" % (posx, posy, posz, rotx, roty, rotz) - self.statusbar.SetStatusText(txt, 2) + self.statusbar.SetStatusText(txt, 3) #pos = n.getPosition() #self.terrPosX.SetValue(str(round(pos.x,2))) @@ -332,7 +333,7 @@ def OnTimer(self, event): #fill labels with some information, all windows have the same FPS! txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) - self.statusbar.SetStatusText(txt, 3) + self.statusbar.SetStatusText(txt, 4) self.updateObjPosRot() def OnExit(self, event): Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-07-20 10:00:13 UTC (rev 110) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-07-20 12:41:36 UTC (rev 111) @@ -1,5 +1,5 @@ #Thomas Fischer 31/05/2007, th...@th... -import wx, os, os.path +import wx, os, os.path, copy import ogre.renderer.OGRE as ogre from ror.truckparser import * from ror.terrainparser import * @@ -7,6 +7,7 @@ from wxogre.wxOgreWindow import * from ror.rorcommon import * + ADDEDBY = "//added by the terrrain editor:\n" SHIFT_SPEED_FACTOR = 20 SLOW_DOWN_FACTOR = 0.75 @@ -14,19 +15,28 @@ # this class holds all the needed 3d data and also the underlying object data class Entry: + uuid = None node = None entity = None data = None manual = None +class HistoryEntry: + uuid = None + Position = None + Rotation = None class RoRTerrainOgreWindow(wxOgreWindow): terrain = None - clearlist = {'entity':[]} + commandhistory = [] + historypointer = 0 + selectedEntry = None selectedCoords = None + currentStatusMsg = "" + cameralandcollisionenabled = True entries = {} @@ -322,13 +332,11 @@ entry.node.detachAllObjects() self.sceneManager.destroySceneNode(entry.node.getName()) except: - print "A" pass if not entry.entity is None: try: self.sceneManager.destroyEntity(entry.entity) except: - print "B" pass if not entry.data is None: del entry.data @@ -360,14 +368,14 @@ self.updateDataStructures() if not self.terrain is None: return self.terrain.save(fn) - + def LoadTerrain(self, filename): if not self.terrain is None: self.free() - print filename + #print filename self.terrain = RoRTerrain(filename) - print len(self.terrain.objects) + #print len(self.terrain.objects) cfgfile = os.path.join(os.path.dirname(filename), self.terrain.TerrainConfig) self.sceneManager.setWorldGeometry(cfgfile) @@ -438,6 +446,7 @@ return entry = Entry() + entry.uuid = uuid entry.node = self.sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") entry.entity = self.sceneManager.createEntity(str(uuid)+"entity", meshname) entry.data = data @@ -481,6 +490,7 @@ truckFilename = self.rordir + "\\data\\trucks\\"+truckFilename entry = Entry() + entry.uuid = uuid entry.node, entry.entity, entry.manualobject = self.createTruckMesh(truckFilename, uuid) entry.data = data @@ -683,7 +693,68 @@ def controlSelectedObject(self,action, value): pass + + def addObjectToHistory(self, entry): + if len(self.commandhistory) > 0: + if self.historypointer < len(self.commandhistory): + del self.commandhistory[self.historypointer:] + + pos = entry.node.getPosition() + rot = entry.node.getOrientation() + + if len(self.commandhistory) > 0: + # check if double + hentry = self.commandhistory[-1] + if hentry.position == pos and hentry.rotation == rot: + return + hentry = HistoryEntry() + hentry.uuid = entry.uuid + hentry.position = pos + hentry.rotation = rot + self.commandhistory.append(hentry) + self.historypointer = len(self.commandhistory) + + def undoHistory(self): + if self.historypointer == 0: + return + self.SelectedArrow = None + + + self.historypointer -= 1 + hentry = self.commandhistory[self.historypointer] + self.entries[hentry.uuid].node.setPosition(hentry.position) + self.entries[hentry.uuid].node.setOrientation(hentry.rotation) + + # update node positions + self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + + #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) + self.currentStatusMsg = "undo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) + + def redoHistory(self): + if self.historypointer + 1 >= len(self.commandhistory): + return + self.SelectedArrow = None + + self.historypointer += 1 + hentry = self.commandhistory[self.historypointer] + self.entries[hentry.uuid].node.setPosition(hentry.position) + self.entries[hentry.uuid].node.setOrientation(hentry.rotation) + + # update node positions + self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + + #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) + self.currentStatusMsg = "redo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) + + def controlArrows(self, event): if self.SelectedArrow is None: return @@ -711,6 +782,7 @@ self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) self.RotateNode.setPosition(self.TranslateNode.getPosition()) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) elif self.SelectedArrow.getName() == 'movearrowsY': self.TranslateNode.translate(0,0,forcex,relativeTo=ogre.Node.TransformSpace.TS_LOCAL) @@ -718,6 +790,7 @@ self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) self.RotateNode.setPosition(self.TranslateNode.getPosition()) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) elif self.SelectedArrow.getName() == 'movearrowsZ': self.TranslateNode.translate(0,forcex,0,relativeTo=ogre.Node.TransformSpace.TS_LOCAL) @@ -725,18 +798,22 @@ self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) self.RotateNode.setPosition(self.TranslateNode.getPosition()) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) elif self.SelectedArrow.getName() == 'rotatearrowsX': self.RotateNode.yaw(forceDegree) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.yaw(forceDegree) elif self.SelectedArrow.getName() == 'rotatearrowsY': self.RotateNode.pitch(forceDegree) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.pitch(forceDegree) elif self.SelectedArrow.getName() == 'rotatearrowsZ': self.RotateNode.roll(forceDegree) if self.selectedEntry: + self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.roll(forceDegree) def onMouseEvent(self,event): @@ -772,6 +849,7 @@ if event.LeftDown() and event.ControlDown() and not self.selectedEntry is None: pos = self.getPointedPosition(event) if not pos is None: + self.addObjectToHistory(self.selectedEntry) self.TranslateNode.setPosition(pos) self.RotateNode.setPosition(pos) self.selectedEntry.node.setPosition(pos) @@ -800,7 +878,7 @@ d = 0.5 if event.ShiftDown(): d *= SHIFT_SPEED_FACTOR - + if event.m_keyCode == 65: # A, wx.WXK_LEFT: self.keyPress.x = -d elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: @@ -809,6 +887,10 @@ self.keyPress.z = -d elif event.m_keyCode == 83: # S, wx.WXK_DOWN: self.keyPress.z = d + elif event.m_keyCode == 70: # F + self.undoHistory() + elif event.m_keyCode == 71: # G + self.redoHistory() elif event.m_keyCode == wx.WXK_PAGEUP: self.keyPress.y = d elif event.m_keyCode == wx.WXK_PAGEDOWN: Modified: trunk/lib/wxogre/OgreManager.py =================================================================== --- trunk/lib/wxogre/OgreManager.py 2007-07-20 10:00:13 UTC (rev 110) +++ trunk/lib/wxogre/OgreManager.py 2007-07-20 12:41:36 UTC (rev 111) @@ -4,6 +4,7 @@ import ogre.renderer.OGRE as ogre from ror.logger import log +from ror.ogrelogger import initOgreLogging from ror.settingsManager import getSettingsManager # singleton implementation of OgreManager @@ -14,6 +15,15 @@ _ogremanager = OgreManager() return _ogremanager +class MyLog(ogre.LogListener): + def __init__(self): + # Creates a C++ log that will try and write to console and file + ogre.LogListener.__init__(self) + + def messageLogged(self, message, level, debug, logName): + print ">>>", message + return True + class OgreManager(): renderWindows = {} @@ -27,7 +37,13 @@ def init(self): #Root creation - self.ogreRoot = ogre.Root(self.getConfigPath('plugins.cfg'), self.getConfigPath('ogre.cfg'), "ogre.log") + self.ogreRoot = ogre.Root(self.getConfigPath('plugins.cfg'), self.getConfigPath('ogre.cfg'), "Ogre.log") + #logMgr = ogre.LogManager() + #currentLog = ogre.LogManager.getSingletonPtr().createLog("ogre.log" ,True, False, False) + #myLog = MyLog() + #currentLog.addListener ( myLog ) + #ogre.LogManager.getSingletonPtr().setDefaultLog(currentLog) + if not self.tryDetectRenderer(): self.ogreRoot.showConfigDialog() self.ogreRoot.initialise(False) Modified: trunk/terrainreadme.txt =================================================================== --- trunk/terrainreadme.txt 2007-07-20 10:00:13 UTC (rev 110) +++ trunk/terrainreadme.txt 2007-07-20 12:41:36 UTC (rev 111) @@ -25,6 +25,10 @@ T switch between bilinear and trilinear filtering R switch between solid, wireframe and point mode +History Functions: +F undo last movement/rotation +G redo last undo + ============================================================ How To Add Things ============================================================ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-23 08:40:07
|
Revision: 112 http://roreditor.svn.sourceforge.net/roreditor/?rev=112&view=rev Author: rorthomas Date: 2007-07-23 01:40:03 -0700 (Mon, 23 Jul 2007) Log Message: ----------- * bugreport: added editorlog.log * depchecker: added ability to remove missing files by comparing to original RoR files * added some depchecker 'plugins' * added unzip/unrar ability * terraineditor: removed 'saved' dialog * added installmod script, which is able to install modifications out of a .rar or .zip * 031a_deps.bin : saved dependency tree for Rigs of Rods 0.31a Modified Paths: -------------- trunk/lib/ror/bugreport.py trunk/lib/ror/depchecker.py trunk/lib/ror/depcheckerplugins/ror_mesh.py trunk/lib/ror/depcheckerplugins/ror_overlay.py trunk/lib/ror/depcheckerplugins/ror_terrn.py trunk/lib/ror/repoclient.py trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Added Paths: ----------- trunk/installmod.bat trunk/installmod.py trunk/lib/UnRAR/ trunk/lib/UnRAR/__init__.py trunk/lib/UnRAR/unrar.dll trunk/lib/UnZIP/ trunk/lib/UnZIP/__init__.py trunk/lib/ror/031a_deps.bin trunk/lib/ror/depcheckerplugins/ror_afl.py trunk/lib/ror/depcheckerplugins/ror_asm.py trunk/lib/ror/depcheckerplugins/ror_cfg.py trunk/lib/ror/depcheckerplugins/ror_cg.py trunk/lib/ror/depcheckerplugins/ror_compositor.py trunk/lib/ror/depcheckerplugins/ror_dll.py trunk/lib/ror/depcheckerplugins/ror_exe.py trunk/lib/ror/depcheckerplugins/ror_glsl.py trunk/lib/ror/depcheckerplugins/ror_hlsl.py trunk/lib/ror/depcheckerplugins/ror_msi.py trunk/lib/ror/depcheckerplugins/ror_particle.py trunk/lib/ror/depcheckerplugins/ror_psd.py trunk/lib/ror/depcheckerplugins/ror_raw.py trunk/lib/ror/depcheckerplugins/ror_skeleton.py trunk/lib/ror/depcheckerplugins/ror_txt.py trunk/lib/ror/depcheckerplugins/ror_wav.py trunk/lib/ror/depcheckerplugins/ror_xml.py trunk/lib/ror/depcheckerplugins/ror_zip.py trunk/testunrar.py trunk/testunzip.py Added: trunk/installmod.bat =================================================================== --- trunk/installmod.bat (rev 0) +++ trunk/installmod.bat 2007-07-23 08:40:03 UTC (rev 112) @@ -0,0 +1 @@ +%systemdrive%\python25\python.exe installmod.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Added: trunk/installmod.py =================================================================== --- trunk/installmod.py (rev 0) +++ trunk/installmod.py 2007-07-23 08:40:03 UTC (rev 112) @@ -0,0 +1,210 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path, shutil + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) +from ror.logger import log +from ror.settingsManager import getSettingsManager + +TEMPDIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "temp") + +def removetemp(reporterrors=True): + if os.path.isdir(TEMPDIR): + try: + shutil.rmtree(TEMPDIR) + except Exception, err: + if not reporterrors: + return + log().error(str(err)) + log().error("could not remove temporary diretory: %s! please delete by hand." % TEMPDIR) + sys.exit(1) + +def ExtractToTemp(filename): + file, extension = os.path.splitext(filename) + removetemp() + if extension.lower() == ".rar": + import UnRAR + os.mkdir(TEMPDIR) + dst = os.path.join(TEMPDIR, os.path.basename(filename)) + shutil.copyfile(filename, dst) + os.chdir(TEMPDIR) + UnRAR.Archive(os.path.basename(filename)).extract() + # change back to current path + os.chdir(os.path.dirname(os.path.abspath(__file__))) + return True + elif extension.lower() == ".zip": + import UnZIP + UnZIP.unzip(filename, TEMPDIR) + return True + else: + shutil.copyfile(filename, dst) + return False + +def installfile(maintarget, srcfile, dryrun): + file, extension = os.path.splitext(maintarget) + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + + if extension in ['.truck', '.load']: + path = os.path.join(rorpath, "data", "trucks") + elif extension in ['.terrn']: + path = os.path.join(rorpath, "data", "terrains") + else: + path = rorpath + if dryrun: + log().info("would install %s to %s" % (os.path.basename(srcfile), path)) + else: + log().info("installing %s to %s" % (os.path.basename(srcfile), path)) + shutil.copyfile(srcfile, os.path.join(path, os.path.basename(srcfile))) + +def searchFile(filename, top): + for root, dirs, files in os.walk(top, topdown=False): + if filename in files: + return os.path.join(root, filename) + return None + +def usage(): + print "usage (general): %s <filename> <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) + print "<filename> list" + print " list all found and valid modifications in filename" + print "" + print "<filename> listall --verbose" + print " list all found modifications in filename (valid and invalid)" + print "" + print "<filename> installall --verbose" + print " install all found modifications in filename" + print "" + print "<filename> install <modification> --verbose" + print " install a certain modifications in filename (valid and invalid)" + print "" + print "notes: the --verbose option is optional to increase the output for debugging" + print " the --dryrun option just prints out which files would be copied/installed." + sys.exit(0) + +def getTargets(verbose): + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", verbose) + targets = [] + for file in dc.files: + filename, extension = os.path.splitext(file) + if extension.lower() in ['.truck', '.terrn', '.load']: + targets.append(os.path.basename(file)) + + validtargets = [] + invalidtargets = [] + for target in targets: + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.everythingfound: + validtargets.append(target) + else: + invalidtargets.append(target) + return validtargets, invalidtargets + + +def main(): + if len(sys.argv) < 3: + usage() + + targetfile = sys.argv[1] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + + mode = sys.argv[2] + if not mode in ['list', 'listall', 'install', 'installall']: + usage() + if len(sys.argv) < 4 and mode in ['install']: + usage() + + # get optional flags + verbose = False + dryrun = False + for option in sys.argv: + if option == "--verbose": + verbose = True + if option == "--dryrun": + dryrun = True + + + import ror.settingsManager + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(path,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + filename = os.path.abspath(targetfile) + ExtractToTemp(filename) + + if mode == "install": + target = sys.argv[3] + import ror.depchecker + log().info("### validating target ...") + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.invalid: + log().error("### target invalid!") + log().info("### please use the list mode to get valid targets") + usage() + + log().info("### target valid!") + #print dc.dstree + installcounter = 0 + for file in dc.dstree: + filename = file['filename'] + filenamefound = searchFile(filename, TEMPDIR) + if filenamefound is None: + log().error("File %s not found in %s!" % (filename, TEMPDIR)) + sys.exit(1) + installfile(target, filenamefound, dryrun) + installcounter += 1 + if dryrun: + log().info("### would install %d files." % installcounter) + else: + log().info("### %d files installed, finished!" % installcounter) + + elif mode == "installall": + validtargets, invalidtargets = getTargets(verbose) + log().info("### installing %d found modifications:" % (len(validtargets))) + installcounter = 0 + for target in validtargets: + log().info("### installing modification '%s'" % target) + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + for file in dc.dstree: + filename = file['filename'] + filenamefound = searchFile(filename, TEMPDIR) + if filenamefound is None: + log().error("File %s not found in %s!" % (filename, TEMPDIR)) + sys.exit(1) + installfile(target, filenamefound, dryrun) + installcounter += 1 + if dryrun: + log().info("### would install %d files." % installcounter) + else: + log().info("### %d files installed, finished!" % installcounter) + + elif mode in ["list", "listall"]: + validtargets, invalidtargets = getTargets(verbose) + if mode == "listall": + if len(invalidtargets) > 0: + print "broken modifications found:" + for v in invalidtargets: + print " %-20s" % v + print "use the --verbose flag to find the missing files!" + else: + print "no broken modifications found:" + + if len(validtargets) > 0: + print "installable modifications found: " + for v in validtargets: + print " %-20s" % v + else: + print "no installable modifications found! :(" + removetemp(False) + + +if __name__=="__main__": + main() \ No newline at end of file Added: trunk/lib/UnRAR/__init__.py =================================================================== --- trunk/lib/UnRAR/__init__.py (rev 0) +++ trunk/lib/UnRAR/__init__.py 2007-07-23 08:40:03 UTC (rev 112) @@ -0,0 +1,524 @@ +# Copyright (c) 2003-2005 Jimmy Retzlaff +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +pyUnRAR is a ctypes based wrapper around the free UnRAR.dll. It +enables reading and unpacking of archives created with the +RAR/WinRAR archivers. There is a low-level interface which is very +similar to the C interface provided by UnRAR. There is also a +higher level interface which makes some common operations easier. +""" + +__version__ = '1.0' + +#from __future__ import generators + +import fnmatch +import os +import Queue +import threading +import time + +import ctypes.wintypes + +# Low level interface - see UnRARDLL\UNRARDLL.TXT + +ERAR_END_ARCHIVE = 10 +ERAR_NO_MEMORY = 11 +ERAR_BAD_DATA = 12 +ERAR_BAD_ARCHIVE = 13 +ERAR_UNKNOWN_FORMAT = 14 +ERAR_EOPEN = 15 +ERAR_ECREATE = 16 +ERAR_ECLOSE = 17 +ERAR_EREAD = 18 +ERAR_EWRITE = 19 +ERAR_SMALL_BUF = 20 +ERAR_UNKNOWN = 21 + +RAR_OM_LIST = 0 +RAR_OM_EXTRACT = 1 + +RAR_SKIP = 0 +RAR_TEST = 1 +RAR_EXTRACT = 2 + +RAR_VOL_ASK = 0 +RAR_VOL_NOTIFY = 1 + +RAR_DLL_VERSION = 3 + +# enum UNRARCALLBACK_MESSAGES +UCM_CHANGEVOLUME = 0 +UCM_PROCESSDATA = 1 +UCM_NEEDPASSWORD = 2 + +try: + unrar = ctypes.WinDLL(os.path.join(os.path.split(__file__)[0], 'unrar.dll')) +except WindowsError: + unrar = ctypes.WinDLL('unrar.dll') + +class RAROpenArchiveData(ctypes.Structure): + def __init__(self, ArcName=None, OpenMode=RAR_OM_LIST): + self.CmtBuf = ctypes.c_buffer(64*1024) + ctypes.Structure.__init__(self, ArcName=ArcName, OpenMode=OpenMode, _CmtBuf=ctypes.addressof(self.CmtBuf), CmtBufSize=ctypes.sizeof(self.CmtBuf)) + + _fields_ = [ + ('ArcName', ctypes.c_char_p), + ('OpenMode', ctypes.c_uint), + ('OpenResult', ctypes.c_uint), + ('_CmtBuf', ctypes.c_voidp), + ('CmtBufSize', ctypes.c_uint), + ('CmtSize', ctypes.c_uint), + ('CmtState', ctypes.c_uint), + ] + +class RAROpenArchiveDataEx(ctypes.Structure): + def __init__(self, ArcName=None, ArcNameW=u'', OpenMode=RAR_OM_LIST): + self.CmtBuf = ctypes.c_buffer(64*1024) + ctypes.Structure.__init__(self, ArcName=ArcName, ArcNameW=ArcNameW, OpenMode=OpenMode, _CmtBuf=ctypes.addressof(self.CmtBuf), CmtBufSize=ctypes.sizeof(self.CmtBuf)) + + _fields_ = [ + ('ArcName', ctypes.c_char_p), + ('ArcNameW', ctypes.c_wchar_p), + ('OpenMode', ctypes.c_uint), + ('OpenResult', ctypes.c_uint), + ('_CmtBuf', ctypes.c_voidp), + ('CmtBufSize', ctypes.c_uint), + ('CmtSize', ctypes.c_uint), + ('CmtState', ctypes.c_uint), + ('Flags', ctypes.c_uint), + ('Reserved', ctypes.c_uint*32), + ] + +class RARHeaderData(ctypes.Structure): + def __init__(self): + self.CmtBuf = ctypes.c_buffer(64*1024) + ctypes.Structure.__init__(self, _CmtBuf=ctypes.addressof(self.CmtBuf), CmtBufSize=ctypes.sizeof(self.CmtBuf)) + + _fields_ = [ + ('ArcName', ctypes.c_char*260), + ('FileName', ctypes.c_char*260), + ('Flags', ctypes.c_uint), + ('PackSize', ctypes.c_uint), + ('UnpSize', ctypes.c_uint), + ('HostOS', ctypes.c_uint), + ('FileCRC', ctypes.c_uint), + ('FileTime', ctypes.c_uint), + ('UnpVer', ctypes.c_uint), + ('Method', ctypes.c_uint), + ('FileAttr', ctypes.c_uint), + ('_CmtBuf', ctypes.c_voidp), + ('CmtBufSize', ctypes.c_uint), + ('CmtSize', ctypes.c_uint), + ('CmtState', ctypes.c_uint), + ] + +class RARHeaderDataEx(ctypes.Structure): + def __init__(self): + self.CmtBuf = ctypes.c_buffer(64*1024) + ctypes.Structure.__init__(self, _CmtBuf=ctypes.addressof(self.CmtBuf), CmtBufSize=ctypes.sizeof(self.CmtBuf)) + + _fields_ = [ + ('ArcName', ctypes.c_char*1024), + ('ArcNameW', ctypes.c_wchar*1024), + ('FileName', ctypes.c_char*1024), + ('FileNameW', ctypes.c_wchar*1024), + ('Flags', ctypes.c_uint), + ('PackSize', ctypes.c_uint), + ('PackSizeHigh', ctypes.c_uint), + ('UnpSize', ctypes.c_uint), + ('UnpSizeHigh', ctypes.c_uint), + ('HostOS', ctypes.c_uint), + ('FileCRC', ctypes.c_uint), + ('FileTime', ctypes.c_uint), + ('UnpVer', ctypes.c_uint), + ('Method', ctypes.c_uint), + ('FileAttr', ctypes.c_uint), + ('_CmtBuf', ctypes.c_voidp), + ('CmtBufSize', ctypes.c_uint), + ('CmtSize', ctypes.c_uint), + ('CmtState', ctypes.c_uint), + ('Reserved', ctypes.c_uint*1024), + ] + +def DosDateTimeToTimeTuple(dosDateTime): + """Convert an MS-DOS format date time to a Python time tuple. + """ + dosDate = dosDateTime >> 16 + dosTime = dosDateTime & 0xffff + day = dosDate & 0x1f + month = (dosDate >> 5) & 0xf + year = 1980 + (dosDate >> 9) + second = 2*(dosTime & 0x1f) + minute = (dosTime >> 5) & 0x3f + hour = dosTime >> 11 + return time.localtime(time.mktime((year, month, day, hour, minute, second, 0, 1, -1))) + +def _wrap(restype, function, argtypes): + result = function + result.argtypes = argtypes + result.restype = restype + return result + +RARGetDllVersion = _wrap(ctypes.c_int, unrar.RARGetDllVersion, []) + +RAROpenArchive = _wrap(ctypes.wintypes.HANDLE, unrar.RAROpenArchive, [ctypes.POINTER(RAROpenArchiveData)]) +RAROpenArchiveEx = _wrap(ctypes.wintypes.HANDLE, unrar.RAROpenArchiveEx, [ctypes.POINTER(RAROpenArchiveDataEx)]) + +RARReadHeader = _wrap(ctypes.c_int, unrar.RARReadHeader, [ctypes.wintypes.HANDLE, ctypes.POINTER(RARHeaderData)]) +RARReadHeaderEx = _wrap(ctypes.c_int, unrar.RARReadHeaderEx, [ctypes.wintypes.HANDLE, ctypes.POINTER(RARHeaderDataEx)]) + +_RARSetPassword = _wrap(ctypes.c_int, unrar.RARSetPassword, [ctypes.wintypes.HANDLE, ctypes.c_char_p]) +def RARSetPassword(*args, **kwargs): + _RARSetPassword(*args, **kwargs) + +RARProcessFile = _wrap(ctypes.c_int, unrar.RARProcessFile, [ctypes.wintypes.HANDLE, ctypes.c_int, ctypes.c_char_p, ctypes.c_char_p]) + +RARCloseArchive = _wrap(ctypes.c_int, unrar.RARCloseArchive, [ctypes.wintypes.HANDLE]) + +UNRARCALLBACK = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_uint, ctypes.c_long, ctypes.c_long, ctypes.c_long) +_RARSetCallback = _wrap(ctypes.c_int, unrar.RARSetCallback, [ctypes.wintypes.HANDLE, UNRARCALLBACK, ctypes.c_long]) +def RARSetCallback(*args, **kwargs): + _RARSetCallback(*args, **kwargs) + + +# Higher level interface + +class ArchiveHeaderBroken(Exception): pass +class InvalidRARArchive(Exception): pass +class FileOpenError(Exception): pass + +RARExceptions = { + ERAR_NO_MEMORY : MemoryError, + ERAR_BAD_DATA : ArchiveHeaderBroken, + ERAR_BAD_ARCHIVE : InvalidRARArchive, + ERAR_EOPEN : FileOpenError, + } + + +class _FileLikeObject: + """Implement a file like object accessible from RARFile.""" + + # UnRAR.dll's thread safety is unknown, so this queue is used + # to serialize access class-wide when using threads. + dllQueue = Queue.Queue(1) + dllQueue.put(None) + + def __init__(self, rarFile, mode): + """Called by RARFile.open, do not call directly.""" + self.rarFile = rarFile + self.mode = mode + self.instructionsForCallback = Queue.Queue() + self.dataFromCallback = Queue.Queue() + self.readBuffer = [] + self.readBufferLength = 0 + self.position = 0 + self.doneReading = False + self.name = self.rarFile.filename + self.lineQueue = Queue.Queue() + + def __del__(self): + self.close() + + def __iter__(self): + while True: + line = self.readline() + if line: + yield line + else: + break + + def close(self): + """Emulate file(...).close().""" + self.instructionsForCallback.put('Quit') + self._thread.join() + self.closed = True + + def flush(self): + """Emulate file(...).flush().""" + pass + + def read(self, size=-1): + """Emulate file(...).read(...).""" + if size < 0: + size = self.rarFile.size + + if not self.doneReading: + while self.readBufferLength < size and not self.doneReading: + if self.dataFromCallback.empty(): + self.instructionsForCallback.put('Read') + self.readBuffer.append(self.dataFromCallback.get()) + if self.readBuffer[-1] is None: + self.doneReading = True + del self.readBuffer[-1] + else: + self.readBufferLength += len(self.readBuffer[-1]) + + result = ''.join(self.readBuffer) + if len(result) <= size: + self.readBuffer = [] + self.readBufferLength = 0 + else: + self.readBuffer = [result[size:]] + self.readBufferLength = len(self.readBuffer[0]) + result = result[:size] + + self.position += len(result) + + if self.mode == 't': + result = result.replace('\r\n', '\n') + + # If threads remain open when Python shuts down them spurious + # exceptions can result. So we automatically try to close the + # file when appropriate (which ends the thread) in case the + # user doesn't. + if self.rarFile.size == self.position: + self.close() + + return result + + def readline(self, size=-1): + """Emulate file(...).readline(...).""" + if self.lineQueue.qsize() < 2: + buffer = self.read(256*1024) + if buffer: + if not self.lineQueue.empty(): + buffer = self.lineQueue.get() + buffer + buffer = buffer.split('\n') + for line in buffer[:-1]: + self.lineQueue.put(line+'\n') + if len(buffer) > 1: + if not buffer[-1]: + self.lineQueue.put(buffer[-1]+'\n') + else: + self.lineQueue.put(buffer[-1]) + + if self.lineQueue.empty(): + result = '' + else: + result = self.lineQueue.get() + + return result + + def readlines(self, sizehint=-1): + """Emulate file(...).readlines(...).""" + if 0 < sizehint < self.rarFile.size: + size = sizehint + else: + size = self.rarFile.size + + lines = [] + sizeRead = 0 + while True: + lines.append(self.readline()) + sizeRead += len(lines[-1]) + if 0 < size <= sizeRead or not lines[-1]: + break + + if not lines[-1]: + del lines[-1] + + return lines + + def xreadlines(self, sizehint=-1): + """Emulate file(...).xreadlines(...).""" + import xreadlines + return xreadlines.xreadlines(self) + + def seek(self, offset, whence=0): + """Emulate file(...).seek(...). + + Seeks cannot move backwards in the file. Seeking forward + requires decompressing the file until the seek-point which + can be time consuming. + """ + position = offset + if whence == 1: + position += self.position + elif whence == 2: + position += self.rarFile.size + + assert position >= self.position + read(position-self.position) + + def tell(self): + """Emulate file(...).tell().""" + return self.position + + def __callback(self, msg, UserData, P1, P2): + if msg == UCM_PROCESSDATA: + self.dllQueue.put(None) + self.dataFromCallback.put((ctypes.c_char*P2).from_address(P1).raw) + instruction = self.instructionsForCallback.get() + self.dllQueue.get() + if instruction == 'Quit': + return -1 + return 1 + + def expansionThread(self): + try: + self._thread = threading.currentThread() + threading.currentThread().setName(threading.currentThread().getName() + ' - ' + self.rarFile.filename) + RARSetCallback(self.rarFile.RAR._handle, UNRARCALLBACK(self.__callback), 0) + self.dllQueue.get() + try: + RARProcessFile(self.rarFile.RAR._handle, RAR_TEST, None, None) + finally: + self.dllQueue.put(None) + finally: + self.dataFromCallback.put(None) + + +class RARFile: + """Represent a file in an archive. Don't instantiate directly. + + Properties: + filename - name of the file in the archive including path (if any) + datetime - file date/time as a struct_time suitable for time.strftime + isdir - True if the file is a directory + size - size in bytes of the uncompressed file + comment - comment associated with the file + + Note - this is not currently intended to be a Python file-like object. + """ + + def __init__(self, RAR, headerData): + self.RAR = RAR + self.filename = headerData.FileName + self.datetime = DosDateTimeToTimeTuple(headerData.FileTime) + self.isdir = ((headerData.Flags & 0xE0) == 0xE0) + self.size = headerData.UnpSize + (headerData.UnpSizeHigh << 32) + if headerData.CmtState == 1: + self.comment = headerData.CmtBuf.value + else: + self.comment = None + + self._extracted = False + + def extract(self, filename=None): + """Extract the file to the file system.""" + + self._extracted = True + RARProcessFile(self.RAR._handle, RAR_EXTRACT, None, filename) + + def open(self, mode='rb'): + """Open a file-like object. + + Because of the style of the UnRAR.dll API for extracting files + without writing to disk, extraction must be done in a background + thread. This is encapsulated by pyUnRAR, but you should be aware + that calling this method results in a thread being spawned. + + >>> for fileInArchive in Archive('test.rar').iterfiles(): + ... if fileInArchive.filename.endswith('test.txt'): + ... print fileInArchive.open('rt').read() + This is only a test. + """ + + assert mode[0] == 'r' and (len(mode) == 1 or (len(mode) ==2 and mode[1] in 'bt')) + if 't' in mode: + mode = 't' + else: + mode = 'b' + + self._extracted = True + fileLikeObject = _FileLikeObject(self, mode) + expansionThread = threading.Thread(target=fileLikeObject.expansionThread) + expansionThread.setDaemon(True) + expansionThread.start() + return fileLikeObject + + def __str__(self): + return '<RARFile "%s" in "%s">' % (self.filename, self.RAR.archiveName) + + def _skip(self): + if not self._extracted: + RARProcessFile(self.RAR._handle, RAR_SKIP, None, None) + + +class Archive: + """Open and operate on an archive.""" + + def __init__(self, archiveName, password=None): + """Instantiate the archive. + + archiveName is the name of the RAR file. + password is used to decrypt the files in the archive. + + Properties: + comment - comment associated with the archive + + >>> print Archive('test.rar').comment + This is a test. + """ + self.archiveName = archiveName + archiveData = RAROpenArchiveDataEx(ArcNameW=self.archiveName, OpenMode=RAR_OM_EXTRACT) + self._handle = RAROpenArchiveEx(ctypes.byref(archiveData)) + + if archiveData.OpenResult != 0: + raise RARExceptions[archiveData.OpenResult] + + if archiveData.CmtState == 1: + self.comment = archiveData.CmtBuf.value + else: + self.comment = None + + if password: + RARSetPassword(self._handle, password) + + def __del__(self): + if self._handle and RARCloseArchive: + RARCloseArchive(self._handle) + + def extract(self, filespec='*'): + """Extract all files in the archive matching the filespec. + + >>> Archive('test.rar').extract('*.pyc') + """ + for rarFile in self.iterfiles(): + if fnmatch.fnmatch(rarFile.filename, filespec): + rarFile.extract() + + def iterfiles(self): + """Iterate over all the files in the archive. + + The yielded RARFile should not be stored, it is not valid once + the next iteration has occurred. + + >>> import os + >>> for fileInArchive in Archive('test.rar').iterfiles(): + ... print os.path.split(fileInArchive.filename)[-1], + ... print fileInArchive.isdir, + ... print fileInArchive.size, + ... print fileInArchive.comment, + ... print fileInArchive.datetime, + ... print time.strftime('%a, %d %b %Y %H:%M:%S', fileInArchive.datetime) + test True 0 None (2003, 6, 30, 1, 59, 48, 0, 181, 1) Mon, 30 Jun 2003 01:59:48 + test.txt False 20 None (2003, 6, 30, 2, 1, 2, 0, 181, 1) Mon, 30 Jun 2003 02:01:02 + this.py False 1030 None (2002, 2, 8, 16, 47, 48, 4, 39, 0) Fri, 08 Feb 2002 16:47:48 + """ + headerData = RARHeaderDataEx() + while not RARReadHeaderEx(self._handle, ctypes.byref(headerData)): + rarFile = RARFile(self, headerData) + yield rarFile + rarFile._skip() Added: trunk/lib/UnRAR/unrar.dll =================================================================== (Binary files differ) Property changes on: trunk/lib/UnRAR/unrar.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/lib/UnZIP/__init__.py =================================================================== --- trunk/lib/UnZIP/__init__.py (rev 0) +++ trunk/lib/UnZIP/__init__.py 2007-07-23 08:40:03 UTC (rev 112) @@ -0,0 +1,12 @@ +import sys, zipfile, os, os.path + +def unzip(file, dir): + os.mkdir(dir) + zfobj = zipfile.ZipFile(file) + for name in zfobj.namelist(): + if name.endswith('/'): + os.mkdir(os.path.join(dir, name)) + else: + outfile = open(os.path.join(dir, name), 'wb') + outfile.write(zfobj.read(name)) + outfile.close() Added: trunk/lib/ror/031a_deps.bin =================================================================== --- trunk/lib/ror/031a_deps.bin (rev 0) +++ trunk/lib/ror/031a_deps.bin 2007-07-23 08:40:03 UTC (rev 112) @@ -0,0 +1,18659 @@ +(dp0 +S'SideBar.mesh' +p1 +(dp2 +S'requires' +p3 +(dp4 +S'material' +p5 +(lp6 +S'Grey' +p7 +asS'file' +p8 +(lp9 +S'SideBar.material' +p10 +assS'requiredby' +p11 +(dp12 +g5 +(lp13 +sg8 +(lp14 +S'fl6-volvo.truck' +p15 +ag15 +assS'optional' +p16 +(dp17 +g5 +(lp18 +sg8 +(lp19 +ssS'provides' +p20 +(dp21 +g5 +(lp22 +sg8 +(lp23 +S'SideBar.mesh' +p24 +asssS'sign-dir-john-cast.mesh' +p25 +(dp26 +g3 +(dp27 +g5 +(lp28 +S'sign-nhelens' +p29 +asg8 +(lp30 +S'signs.material' +p31 +assg11 +(dp32 +g5 +(lp33 +sg8 +(lp34 +S'sign-dir-john-cast.odef' +p35 +assg16 +(dp36 +g5 +(lp37 +sg8 +(lp38 +ssg20 +(dp39 +g5 +(lp40 +sg8 +(lp41 +S'sign-dir-john-cast.mesh' +p42 +asssS'derooyrwheelface.png' +p43 +(dp44 +g3 +(dp45 +g5 +(lp46 +sg8 +(lp47 +ssg11 +(dp48 +g5 +(lp49 +sg8 +(lp50 +ssg16 +(dp51 +g5 +(lp52 +sg8 +(lp53 +ssg20 +(dp54 +g5 +(lp55 +sg8 +(lp56 +S'derooyrwheelface.png' +p57 +asssS'locked-off.png' +p58 +(dp59 +g3 +(dp60 +g5 +(lp61 +sg8 +(lp62 +ssg11 +(dp63 +g5 +(lp64 +sg8 +(lp65 +S'tracks.material' +p66 +assg16 +(dp67 +g5 +(lp68 +sg8 +(lp69 +ssg20 +(dp70 +g5 +(lp71 +sg8 +(lp72 +S'locked-off.png' +p73 +asssS'smitmast.mesh.xml' +p74 +(dp75 +g20 +(dp76 +ssS'airneedles.overlay' +p77 +(dp78 +g20 +(dp79 +ssS'EarthClearSkyFog.png' +p80 +(dp81 +g3 +(dp82 +g5 +(lp83 +sg8 +(lp84 +ssg11 +(dp85 +g5 +(lp86 +sg8 +(lp87 +ssg16 +(dp88 +g5 +(lp89 +sg8 +(lp90 +ssg20 +(dp91 +g5 +(lp92 +sg8 +(lp93 +S'EarthClearSkyFog.png' +p94 +asssS'dodgewheelface.png' +p95 +(dp96 +g3 +(dp97 +g5 +(lp98 +sg8 +(lp99 +ssg11 +(dp100 +g5 +(lp101 +sg8 +(lp102 +S'dodge.material' +p103 +assg16 +(dp104 +g5 +(lp105 +sg8 +(lp106 +ssg20 +(dp107 +g5 +(lp108 +sg8 +(lp109 +S'dodgewheelface.png' +p110 +asssS'myobs.mesh.xml' +p111 +(dp112 +g20 +(dp113 +ssS'wahoo.png' +p114 +(dp115 +g3 +(dp116 +g5 +(lp117 +sg8 +(lp118 +ssg11 +(dp119 +g5 +(lp120 +sg8 +(lp121 +S'wahoo.material' +p122 +assg16 +(dp123 +g5 +(lp124 +sg8 +(lp125 +ssg20 +(dp126 +g5 +(lp127 +sg8 +(lp128 +S'wahoo.png' +p129 +asssS'aspen-mini.png' +p130 +(dp131 +g3 +(dp132 +g5 +(lp133 +sg8 +(lp134 +ssg11 +(dp135 +g5 +(lp136 +sg8 +(lp137 +S'aspen.terrn' +p138 +assg16 +(dp139 +g5 +(lp140 +sg8 +(lp141 +ssg20 +(dp142 +g5 +(lp143 +sg8 +(lp144 +S'aspen-mini.png' +p145 +asssS'tatrawheelband.png' +p146 +(dp147 +g3 +(dp148 +g5 +(lp149 +sg8 +(lp150 +ssg11 +(dp151 +g5 +(lp152 +sg8 +(lp153 +S't813.material' +p154 +assg16 +(dp155 +g5 +(lp156 +sg8 +(lp157 +ssg20 +(dp158 +g5 +(lp159 +sg8 +(lp160 +S'tatrawheelband.png' +p161 +asssS'liebherr-mini.png' +p162 +(dp163 +g3 +(dp164 +g5 +(lp165 +sg8 +(lp166 +ssg11 +(dp167 +g5 +(lp168 +sg8 +(lp169 +S'liebherr.truck' +p170 +assg16 +(dp171 +g5 +(lp172 +sg8 +(lp173 +ssg20 +(dp174 +g5 +(lp175 +sg8 +(lp176 +S'liebherr-mini.png' +p177 +asssS'mirror.png' +p178 +(dp179 +g3 +(dp180 +g5 +(lp181 +sg8 +(lp182 +ssg11 +(dp183 +g5 +(lp184 +sg8 +(lp185 +S'common.material' +p186 +assg16 +(dp187 +g5 +(lp188 +sg8 +(lp189 +ssg20 +(dp190 +g5 +(lp191 +sg8 +(lp192 +S'mirror.png' +p193 +asssS'myobs.mesh' +p194 +(dp195 +g3 +(dp196 +g5 +(lp197 +S'myobs-white' +p198 +asg8 +(lp199 +S'myobs.material' +p200 +assg11 +(dp201 +g5 +(lp202 +sg8 +(lp203 +S'myobs.odef' +p204 +assg16 +(dp205 +g5 +(lp206 +sg8 +(lp207 +ssg20 +(dp208 +g5 +(lp209 +sg8 +(lp210 +S'myobs.mesh' +p211 +asssS'roadquay.mesh' +p212 +(dp213 +g3 +(dp214 +g5 +(lp215 +S'road' +p216 +asg8 +(lp217 +S'road.material' +p218 +assg11 +(dp219 +g5 +(lp220 +sg8 +(lp221 +S'roadquay.odef' +p222 +assg16 +(dp223 +g5 +(lp224 +sg8 +(lp225 +ssg20 +(dp226 +g5 +(lp227 +sg8 +(lp228 +S'roadquay.mesh' +p229 +asssS'island-15h.jpg' +p230 +(dp231 +g3 +(dp232 +g5 +(lp233 +sg8 +(lp234 +ssg11 +(dp235 +g5 +(lp236 +sg8 +(lp237 +ssg16 +(dp238 +g5 +(lp239 +sg8 +(lp240 +ssg20 +(dp241 +g5 +(lp242 +sg8 +(lp243 +S'island-15h.jpg' +p244 +asssS'turbotwin-mini.png' +p245 +(dp246 +g3 +(dp247 +g5 +(lp248 +sg8 +(lp249 +ssg11 +(dp250 +g5 +(lp251 +sg8 +(lp252 +S'turbotwin.truck' +p253 +assg16 +(dp254 +g5 +(lp255 +sg8 +(lp256 +ssg20 +(dp257 +g5 +(lp258 +sg8 +(lp259 +S'turbotwin-mini.png' +p260 +asssS'NACA64.1.412.afl' +p261 +(dp262 +g20 +(dp263 +ssS'ae86wheelband.png' +p264 +(dp265 +g3 +(dp266 +g5 +(lp267 +sg8 +(lp268 +ssg11 +(dp269 +g5 +(lp270 +sg8 +(lp271 +S'Toyota86mat.material' +p272 +assg16 +(dp273 +g5 +(lp274 +sg8 +(lp275 +ssg20 +(dp276 +g5 +(lp277 +sg8 +(lp278 +S'ae86wheelband.png' +p279 +asssS'lopress-on.png' +p280 +(dp281 +g3 +(dp282 +g5 +(lp283 +sg8 +(lp284 +ssg11 +(dp285 +g5 +(lp286 +sg8 +(lp287 +g66 +assg16 +(dp288 +g5 +(lp289 +sg8 +(lp290 +ssg20 +(dp291 +g5 +(lp292 +sg8 +(lp293 +S'lopress-on.png' +p294 +asssS'rightmirror.mesh.xml' +p295 +(dp296 +g20 +(dp297 +ssS'sphere.mesh' +p298 +(dp299 +g3 +(dp300 +g5 +(lp301 +S'BaseWhite' +p302 +asg8 +(lp303 +ssg11 +(dp304 +g5 +(lp305 +sg8 +(lp306 +ssg16 +(dp307 +g5 +(lp308 +sg8 +(lp309 +ssg20 +(dp310 +g5 +(lp311 +sg8 +(lp312 +S'sphere.mesh' +p313 +asssS'C1.material' +p314 +(dp315 +g3 +(dp316 +g5 +(lp317 +sg8 +(lp318 +S'C1.jpg' +p319 +aS'C1beam.jpg' +p320 +assg11 +(dp321 +g5 +(lp322 +sg8 +(lp323 +S'C1.truck' +p324 +assg16 +(dp325 +g5 +(lp326 +sg8 +(lp327 +ssg20 +(dp328 +g5 +(lp329 +S'C1' +p330 +aS'C1beam' +p331 +asg8 +(lp332 +S'C1.material' +p333 +asssg324 +(dp334 +g3 +(dp335 +g5 +(lp336 +S'C1' +p337 +asg8 +(lp338 +g314 +assg11 +(dp339 +g5 +(lp340 +sg8 +(lp341 +S'island.terrn' +p342 +assg16 +(dp343 +g5 +(lp344 +S'tracks/C1help' +p345 +asg8 +(lp346 +S'C1-mini.png' +p347 +assg20 +(dp348 +g5 +(lp349 +sg8 +(lp350 +S'C1.truck' +p351 +asssS'semiflat.material' +p352 +(dp353 +g3 +(dp354 +g5 +(lp355 +sg8 +(lp356 +S'semiflat.png' +p357 +assg11 +(dp358 +g5 +(lp359 +sg8 +(lp360 +S'semiflat.load' +p361 +assg16 +(dp362 +g5 +(lp363 +sg8 +(lp364 +ssg20 +(dp365 +g5 +(lp366 +S'tracks/semiflat' +p367 +asg8 +(lp368 +S'semiflat.material' +p369 +asssS'sign-dir-john-cast.mesh.xml' +p370 +(dp371 +g20 +(dp372 +ssS'checkchecked.png' +p373 +(dp374 +g3 +(dp375 +g5 +(lp376 +sg8 +(lp377 +ssg11 +(dp378 +g5 +(lp379 +sg8 +(lp380 +S'truck_editor.material' +p381 +assg16 +(dp382 +g5 +(lp383 +sg8 +(lp384 +ssg20 +(dp385 +g5 +(lp386 +sg8 +(lp387 +S'checkchecked.png' +p388 +asssS'road-block2.mesh' +p389 +(dp390 +g3 +(dp391 +g5 +(lp392 +S'road' +p393 +asg8 +(lp394 +g218 +assg11 +(dp395 +g5 +(lp396 +sg8 +(lp397 +S'road-block2.odef' +p398 +assg16 +(dp399 +g5 +(lp400 +sg8 +(lp401 +ssg20 +(dp402 +g5 +(lp403 +sg8 +(lp404 +S'road-block2.mesh' +p405 +asssS'altimeter.png' +p406 +(dp407 +g3 +(dp408 +g5 +(lp409 +sg8 +(lp410 +ssg11 +(dp411 +g5 +(lp412 +sg8 +(lp413 +S'dashboard.material' +p414 +assg16 +(dp415 +g5 +(lp416 +sg8 +(lp417 +ssg20 +(dp418 +g5 +(lp419 +sg8 +(lp420 +S'altimeter.png' +p421 +asssS'Blur0_vs.glsl' +p422 +(dp423 +g20 +(dp424 +ssS'sign-dir-cold-cast.odef' +p425 +(dp426 +g3 +(dp427 +g5 +(lp428 +sg8 +(lp429 +S'sign-dir-cold-cast.mesh' +p430 +assg11 +(dp431 +g5 +(lp432 +sg8 +(lp433 +S'nhelens.terrn' +p434 +assg16 +(dp435 +g5 +(lp436 +sg8 +(lp437 +ssg20 +(dp438 +g5 +(lp439 +sg8 +(lp440 +S'sign-dir-cold-cast.odef' +p441 +asssS'airintake.mesh.xml' +p442 +(dp443 +g20 +(dp444 +ssS'redarrow.png' +p445 +(dp446 +g3 +(dp447 +g5 +(lp448 +sg8 +(lp449 +ssg11 +(dp450 +g5 +(lp451 +sg8 +(lp452 +g414 +assg16 +(dp453 +g5 +(lp454 +sg8 +(lp455 +ssg20 +(dp456 +g5 +(lp457 +sg8 +(lp458 +S'redarrow.png' +p459 +asssS'nhelens-12h.jpg' +p460 +(dp461 +g3 +(dp462 +g5 +(lp463 +sg8 +(lp464 +ssg11 +(dp465 +g5 +(lp466 +sg8 +(lp467 +ssg16 +(dp468 +g5 +(lp469 +sg8 +(lp470 +ssg20 +(dp471 +g5 +(lp472 +sg8 +(lp473 +S'nhelens-12h.jpg' +p474 +asssS'semi.png' +p475 +(dp476 +g3 +(dp477 +g5 +(lp478 +sg8 +(lp479 +ssg11 +(dp480 +g5 +(lp481 +sg8 +(lp482 +S'semi.material' +p483 +assg16 +(dp484 +g5 +(lp485 +sg8 +(lp486 +ssg20 +(dp487 +g5 +(lp488 +sg8 +(lp489 +S'semi.png' +p490 +asssS'clutch-off.png' +p491 +(dp492 +g3 +(dp493 +g5 +(lp494 +sg8 +(lp495 +ssg11 +(dp496 +g5 +(lp497 +sg8 +(lp498 +g66 +assg16 +(dp499 +g5 +(lp500 +sg8 +(lp501 +ssg20 +(dp502 +g5 +(lp503 +sg8 +(lp504 +S'clutch-off.png' +p505 +asssS'hsi.png' +p506 +(dp507 +g3 +(dp508 +g5 +(lp509 +sg8 +(lp510 +ssg11 +(dp511 +g5 +(lp512 +sg8 +(lp513 +g414 +assg16 +(dp514 +g5 +(lp515 +sg8 +(lp516 +ssg20 +(dp517 +g5 +(lp518 +sg8 +(lp519 +S'hsi.png' +p520 +asssS'boxtrailer.load' +p521 +(dp522 +g3 +(dp523 +g5 +(lp524 +S'tracks/fl6-volvo' +p525 +asg8 +(lp526 +S'fl6-volvo.material' +p527 +assg11 +(dp528 +g5 +(lp529 +sg8 +(lp530 +ssg16 +(dp531 +g5 +(lp532 +S'tracks/boxtrailerhelp' +p533 +asg8 +(lp534 +S'boxtrailer-mini.png' +p535 +assg20 +(dp536 +g5 +(lp537 +sg8 +(lp538 +S'boxtrailer.load' +p539 +asssS'chapel.odef' +p540 +(dp541 +g3 +(dp542 +g5 +(lp543 +sg8 +(lp544 +S'chapel.mesh' +p545 +assg11 +(dp546 +g5 +(lp547 +sg8 +(lp548 +g138 +ag434 +assg16 +(dp549 +g5 +(lp550 +sg8 +(lp551 +ssg20 +(dp552 +g5 +(lp553 +sg8 +(lp554 +S'chapel.odef' +p555 +asssS'sign-descent.png' +p556 +(dp557 +g3 +(dp558 +g5 +(lp559 +sg8 +(lp560 +ssg11 +(dp561 +g5 +(lp562 +sg8 +(lp563 +g31 +assg16 +(dp564 +g5 +(lp565 +sg8 +(lp566 +ssg20 +(dp567 +g5 +(lp568 +sg8 +(lp569 +S'sign-descent.png' +p570 +asssS'wrecker.material' +p571 +(dp572 +g3 +(dp573 +g5 +(lp574 +sg8 +(lp575 +S'wrecker.png' +p576 +aS'wrecker_emissive.png' +p577 +aS'wreckerhelp.png' +p578 +assg11 +(dp579 +g5 +(lp580 +sg8 +(lp581 +S'wrecker.truck' +p582 +ag582 +aS'Scanialoader.truck' +p583 +assg16 +(dp584 +g5 +(lp585 +sg8 +(lp586 +ssg20 +(dp587 +g5 +(lp588 +S'tracks/wrecker' +p589 +aS'tracks/wreckerhelp' +p590 +asg8 +(lp591 +S'wrecker.material' +p592 +asssS'an-12.material' +p593 +(dp594 +g3 +(dp595 +g5 +(lp596 +sg8 +(lp597 +S'an-12.png' +p598 +aS'an12wheelface.png' +p599 +aS'an12wheelband.png' +p600 +aS'prop.png' +p601 +assg11 +(dp602 +g5 +(lp603 +sg8 +(lp604 +S'an12nacelle.mesh' +p605 +aS'an12fairing-right.mesh' +p606 +aS'an-12.truck' +p607 +aS'an12turret.mesh' +p608 +aS'an12fairing-left.mesh' +p609 +aS'pale.mesh' +p610 +assg16 +(dp611 +g5 +(lp612 +sg8 +(lp613 +ssg20 +(dp614 +g5 +(lp615 +S'tracks/An12' +p616 +aS'tracks/an12wheelface' +p617 +aS'tracks/an12wheelband' +p618 +aS'prop' +p619 +asg8 +(lp620 +S'an-12.material' +p621 +asssS'buildicon.png' +p622 +(dp623 +g3 +(dp624 +g5 +(lp625 +sg8 +(lp626 +ssg11 +(dp627 +g5 +(lp628 +sg8 +(lp629 +g381 +assg16 +(dp630 +g5 +(lp631 +sg8 +(lp632 +ssg20 +(dp633 +g5 +(lp634 +sg8 +(lp635 +S'buildicon.png' +p636 +asssS'robot.mesh' +p637 +(dp638 +g3 +(dp639 +g5 +(lp640 +S'Material' +p641 +asg8 +(lp642 +S'robot.material' +p643 +assg11 +(dp644 +g5 +(lp645 +sg8 +(lp646 +ssg16 +(dp647 +g5 +(lp648 +sg8 +(lp649 +ssg20 +(dp650 +g5 +(lp651 +sg8 +(lp652 +S'robot.mesh' +p653 +asssS'resources.cfg' +p654 +(dp655 +g20 +(dp656 +ssS'pbrake-on.png' +p657 +(dp658 +g3 +(dp659 +g5 +(lp660 +sg8 +(lp661 +ssg11 +(dp662 +g5 +(lp663 +sg8 +(lp664 +g66 +assg16 +(dp665 +g5 +(lp666 +sg8 +(lp667 +ssg20 +(dp668 +g5 +(lp669 +sg8 +(lp670 +S'pbrake-on.png' +p671 +asssS'clack.wav' +p672 +(dp673 +g3 +(dp674 +g5 +(lp675 +sg8 +(lp676 +ssg11 +(dp677 +g5 +(lp678 +sg8 +(lp679 +ssg16 +(dp680 +g5 +(lp681 +sg8 +(lp682 +ssg20 +(dp683 +g5 +(lp684 +sg8 +(lp685 +S'clack.wav' +p686 +asssS'dashbar.png' +p687 +(dp688 +g3 +(dp689 +g5 +(lp690 +sg8 +(lp691 +ssg11 +(dp692 +g5 +(lp693 +sg8 +(lp694 +g414 +assg16 +(dp695 +g5 +(lp696 +sg8 +(lp697 +ssg20 +(dp698 +g5 +(lp699 +sg8 +(lp700 +S'dashbar.png' +p701 +asssS'adi.png' +p702 +(dp703 +g3 +(dp704 +g5 +(lp705 +sg8 +(lp706 +ssg11 +(dp707 +g5 +(lp708 +sg8 +(lp709 +g414 +assg16 +(dp710 +g5 +(lp711 +sg8 +(lp712 +ssg20 +(dp713 +g5 +(lp714 +sg8 +(lp715 +S'adi.png' +p716 +asssS'road-slab5.mesh.xml' +p717 +(dp718 +g20 +(dp719 +ssS'roadborderleft.mesh' +p720 +(dp721 +g3 +(dp722 +g5 +(lp723 +S'road' +p724 +asg8 +(lp725 +g218 +assg11 +(dp726 +g5 +(lp727 +sg8 +(lp728 +S'roadborderleft.odef' +p729 +assg16 +(dp730 +g5 +(lp731 +sg8 +(lp732 +ssg20 +(dp733 +g5 +(lp734 +sg8 +(lp735 +S'roadborderleft.mesh' +p736 +asssS'dafwheelband.png' +p737 +(dp738 +g3 +(dp739 +g5 +(lp740 +sg8 +(lp741 +ssg11 +(dp742 +g5 +(lp743 +sg8 +(lp744 +S'flatdaf.material' +p745 +aS'daf.material' +p746 +assg16 +(dp747 +g5 +(lp748 +sg8 +(lp749 +ssg20 +(dp750 +g5 +(lp751 +sg8 +(lp752 +S'dafwheelband.png' +p753 +asssS'starter.wav' +p754 +(dp755 +g3 +(dp756 +g5 +(lp757 +sg8 +(lp758 +ssg11 +(dp759 +g5 +(lp760 +sg8 +(lp761 +ssg16 +(dp762 +g5 +(lp763 +sg8 +(lp764 +ssg20 +(dp765 +g5 +(lp766 +sg8 +(lp767 +S'starter.wav' +p768 +asssS'robot.mesh.xml' +p769 +(dp770 +g20 +(dp771 +ssS'redbeacon.mesh.xml' +p772 +(dp773 +g20 +(dp774 +ssS'aspen-12h.jpg' +p775 +(dp776 +g3 +(dp777 +g5 +(lp778 +sg8 +(lp779 +ssg11 +(dp780 +g5 +(lp781 +sg8 +(lp782 +ssg16 +(dp783 +g5 +(lp784 +sg8 +(lp785 +ssg20 +(dp786 +g5 +(lp787 +sg8 +(lp788 +S'aspen-12h.jpg' +p789 +asssS'wheelprop.mesh' +p790 +(dp791 +g3 +(dp792 +g5 +(lp793 +S'tracks/daffwheelface' +p794 +asg8 +(lp795 +g746 +assg11 +(dp796 +g5 +(lp797 +sg8 +(lp798 +S'daf.truck' +p799 +ag799 +assg16 +(dp800 +g5 +(lp801 +sg8 +(lp802 +ssg20 +(dp803 +g5 +(lp804 +sg8 +(lp805 +S'wheelprop.mesh' +p806 +asssS'acontainer.material' +p807 +(dp808 +g3 +(dp809 +g5 +(lp810 +sg8 +(lp811 +S'acontainer.png' +p812 +assg11 +(dp813 +g5 +(lp814 +sg8 +(lp815 +S'acontainer.load' +p816 +assg16 +(dp817 +g5 +(lp818 +sg8 +(lp819 +ssg20 +(dp820 +g5 +(lp821 +S'tracks/acontainer' +p822 +asg8 +(lp823 +S'acontainer.material' +p824 +asssS'aspen.raw' +p825 +(dp826 +g3 +(dp827 +g5 +(lp828 +sg8 +(lp829 +ssg11 +(dp830 +g5 +(lp831 +sg8 +(lp832 +S'aspen.cfg' +p833 +assg16 +(dp834 +g5 +(lp835 +sg8 +(lp836 +ssg20 +(dp837 +g5 +(lp838 +sg8 +(lp839 +S'aspen.raw' +p840 +asssS'flatdaf.png' +p841 +(dp842 +g3 +(dp843 +g5 +(lp844 +sg8 +(lp845 +ssg11 +(dp846 +g5 +(lp847 +sg8 +(lp848 +g745 +assg16 +(dp849 +g5 +(lp850 +sg8 +(lp851 +ssg20 +(dp852 +g5 +(lp853 +sg8 +(lp854 +S'flatdaf.png' +p855 +asssS'island-14h.jpg' +p856 +(dp857 +g3 +(dp858 +g5 +(lp859 +sg8 +(lp860 +ssg11 +(dp861 +g5 +(lp862 +sg8 +(lp863 +ssg16 +(dp864 +g5 +(lp865 +sg8 +(lp866 +ssg20 +(dp867 +g5 +(lp868 +sg8 +(lp869 +S'island-14h.jpg' +p870 +asssg10 +(dp871 +g3 +(dp872 +g5 +(lp873 +sg8 +(lp874 +ssg11 +(dp875 +g5 +(lp876 +sg8 +(lp877 +g1 +assg16 +(dp878 +g5 +(lp879 +sg8 +(lp880 +ssg20 +(dp881 +g5 +(lp882 +S'Grey' +p883 +asg8 +(lp884 +S'SideBar.material' +p885 +asssS'lab.mesh' +p886 +(dp887 +g3 +(dp888 +g5 +(lp889 +S'lab' +p890 +asg8 +(lp891 +S'lab.material' +p892 +assg11 +(dp893 +g5 +(lp894 +sg8 +(lp895 +S'lab.odef' +p896 +assg16 +(dp897 +g5 +(lp898 +sg8 +(lp899 +ssg20 +(dp900 +g5 +(lp901 +sg8 +(lp902 +S'lab.mesh' +p903 +asssS'road-slab.mesh' +p904 +(dp905 +g3 +(dp906 +g5 +(lp907 +S'road' +p908 +asg8 +(lp909 +g218 +assg11 +(dp910 +g5 +(lp911 +sg8 +(lp912 +S'road-slab.odef' +p913 +assg16 +(dp914 +g5 +(lp915 +sg8 +(lp916 +ssg20 +(dp917 +g5 +(lp918 +sg8 +(lp919 +S'road-slab.mesh' +p920 +asssS'aspen-9h.jpg' +p921 +(dp922 +g3 +(dp923 +g5 +(lp924 +sg8 +(lp925 +ssg11 +(dp926 +g5 +(lp927 +sg8 +(lp928 +ssg16 +(dp929 +g5 +(lp930 +sg8 +(lp931 +ssg20 +(dp932 +g5 +(lp933 +sg8 +(lp934 +S'aspen-9h.jpg' +p935 +asssS'Blur0_ps20.hlsl' +p936 +(dp937 +g20 +(dp938 +ssS'renault-mini.png' +p939 +(dp940 +g3 +(dp941 +g5 +(lp942 +sg8 +(lp943 +ssg11 +(dp944 +g5 +(lp945 +sg8 +(lp946 +S'renault.truck' +p947 +assg16 +(dp948 +g5 +(lp949 +sg8 +(lp950 +ssg20 +(dp951 +g5 +(lp952 +sg8 +(lp953 +S'renault-mini.png' +p954 +asssS'beam.mesh.xml' +p955 +(dp956 +g20 +(dp957 +ssS'daf_emissive.png' +p958 +(dp959 +g3 +(dp960 +g5 +(lp961 +sg8 +(lp962 +ssg11 +(dp963 +g5 +(lp964 +sg8 +(lp965 +g746 +assg16 +(dp966 +g5 +(lp967 +sg8 +(lp968 +ssg20 +(dp969 +g5 +(lp970 +sg8 +(lp971 +S'daf_emissive.png' +p972 +asssS'smallhouse.material' +p973 +(dp974 +g3 +(dp975 +g5 +(lp976 +sg8 +(lp977 +S'smallhouse.jpg' +p978 +assg11 +(dp979 +g5 +(lp980 +sg8 +(lp981 +S'smallhouse.mesh' +p982 +assg16 +(dp983 +g5 +(lp984 +sg8 +(lp985 +ssg20 +(dp986 +g5 +(lp987 +S'tracks/smallhouse' +p988 +asg8 +(lp989 +S'smallhouse.material' +p990 +asssS'road-runway-band.odef' +p991 +(dp992 +g3 +(dp993 +g5 +(lp994 +sg8 +(lp995 +S'road-runway-band.mesh' +p996 +assg11 +(dp997 +g5 +(lp998 +sg8 +(lp999 +g342 +ag138 +ag434 +assg16 +(dp1000 +g5 +(lp1001 +sg8 +(lp1002 +ssg20 +(dp1003 +g5 +(lp1004 +sg8 +(lp1005 +S'road-runway-band.odef' +p1006 +asssS'an-12.png' +p1007 +(dp1008 +g3 +(dp1009 +g5 +(lp1010 +sg8 +(lp1011 +ssg11 +(dp1012 +g5 +(lp1013 +sg8 +(lp1014 +g593 +assg16 +(dp1015 +g5 +(lp1016 +sg8 +(lp1017 +ssg20 +(dp1018 +g5 +(lp1019 +sg8 +(lp1020 +S'an-12.png' +p1021 +asssS'road.odef' +p1022 +(dp1023 +g3 +(dp1024 +g5 +(lp1025 +sg8 +(lp1026 +S'road.mesh' +p1027 +assg11 +(dp1028 +g5 +(lp1029 +sg8 +(lp1030 +g342 +ag138 +ag434 +assg16 +(dp1031 +g5 +(lp1032 +sg8 +(lp1033 +ssg20 +(dp1034 +g5 +(lp1035 +sg8 +(lp1036 +S'road.odef' +p1037 +asssS'sign-bump.odef' +p1038 +(dp1039 +g3 +(dp1040 +g5 +(lp1041 +sg8 +(lp1042 +S'sign-bump.mesh' +p1043 +assg11 +(dp1044 +g5 +(lp1045 +sg8 +(lp1046 +g138 +ag434 +assg16 +(dp1047 +g5 +(lp1048 +sg8 +(lp1049 +ssg20 +(dp1050 +g5 +(lp1051 +sg8 +(lp1052 +S'sign-bump.odef' +p1053 +asssS'hydrostop.wav' +p1054 +(dp1055 +g3 +(dp1056 +g5 +(lp1057 +sg8 +(lp1058 +ssg11 +(dp1059 +g5 +(lp1060 +sg8 +(lp1061 +ssg16 +(dp1062 +g5 +(lp1063 +sg8 +(lp1064 +ssg20 +(dp1065 +g5 +(lp1066 +sg8 +(lp1067 +S'hydrostop.wav' +p1068 +asssS'aspen-17h.jpg' +p1069 +(dp1070 +g3 +(dp1071 +g5 +(lp1072 +sg8 +(lp1073 +ssg11 +(dp1074 +g5 +(lp1075 +sg8 +(lp1076 +ssg16 +(dp1077 +g5 +(lp1078 +sg8 +(lp1079 +ssg20 +(dp1080 +g5 +(lp1081 +sg8 +(lp1082 +S'aspen-17h.jpg' +p1083 +asssS'hangardoor.material' +p1084 +(dp1085 +g3 +(dp1086 +g5 +(lp1087 +sg8 +(lp1088 +S'hangardoor.png' +p1089 +assg11 +(dp1090 +g5 +(lp1091 +sg8 +(lp1092 +S'hangardoor.mesh' +p1093 +assg16 +(dp1094 +g5 +(lp1095 +sg8 +(lp1096 +ssg20 +(dp1097 +g5 +(lp1098 +S'hangardoor' +p1099 +asg8 +(lp1100 +S'hangardoor.material' +p1101 +asssS'liebherr.png' +p1102 +(dp1103 +g3 +(dp1104 +g5 +(lp1105 +sg8 +(lp1106 +ssg11 +(dp1107 +g5 +(lp1108 +sg8 +(lp1109 +S'liebherr.material' +p1110 +assg16 +(dp1111 +g5 +(lp1112 +sg8 +(lp1113 +ssg20 +(dp1114 +g5 +(lp1115 +sg8 +(lp1116 +S'liebherr.png' +p1117 +asssS'multibenne_emissive.png' +p1118 +(dp1119 +g3 +(dp1120 +g5 +(lp1121 +sg8 +(lp1122 +ssg11 +(dp1123 +g5 +(lp1124 +sg8 +(lp1125 +S'multibenne.material' +p1126 +assg16 +(dp1127 +g5 +(lp1128 +sg8 +(lp1129 +ssg20 +(dp1130 +g5 +(lp1131 +sg8 +(lp1132 +S'multibenne_emissive.png' +p1133 +asssS'turbo.wav' +p1134 +(dp1135 +g3 +(dp1136 +g5 +(lp1137 +sg8 +(lp1138 +ssg11 +(dp1139 +g5 +(lp1140 +sg8 +(lp1141 +ssg16 +(dp1142 +g5 +(lp1143 +sg8 +(lp1144 +ssg20 +(dp1145 +g5 +(lp1146 +sg8 +(lp1147 +S'turbo.wav' +p1148 +asssS't813.png' +p1149 +(dp1150 +g3 +(dp1151 +g5 +(lp1152 +sg8 +(lp1153 +ssg11 +(dp1154 +g5 +(lp1155 +sg8 +(lp1156 +g154 +assg16 +(dp1157 +g5 +(lp1158 +sg8 +(lp1159 +ssg20 +(dp1160 +g5 +(lp1161 +sg8 +(lp1162 +S't813.png' +p1163 +asssS'seat.mesh.xml' +p1164 +(dp1165 +g20 +(dp1166 +ssS'island-mini.png' +p1167 +(dp1168 +g3 +(dp1169 +g5 +(lp1170 +sg8 +(lp1171 +ssg11 +(dp1172 +g5 +(lp1173 +sg8 +(lp1174 +g342 +assg16 +(dp1175 +g5 +(lp1176 +sg8 +(lp1177 +ssg20 +(dp1178 +g5 +(lp1179 +sg8 +(lp1180 +S'island-mini.png' +p1181 +asssS'OgreCore.zip' +p1182 +(dp1183 +g20 +(dp1184 +ssS'RenderSystem_Direct3D9.dll' +p1185 +(dp1186 +g20 +(dp1187 +ssS'dodgewheelband.png' +p1188 +(dp1189 +g3 +(dp1190 +g5 +(lp1191 +sg8 +(lp1192 +ssg11 +(dp1193 +g5 +(lp1194 +sg8 +(lp1195 +g103 +assg16 +(dp1196 +g5 +(lp1197 +sg8 +(lp1198 +ssg20 +(dp1199 +g5 +(lp1200 +sg8 +(lp1201 +S'dodgewheelband.png' +p1202 +asssS'sign-dir-cold-cast.mesh.xml' +p1203 +(dp1204 +g20 +(dp1205 +ssS'RustySteel.jpg' +p1206 +(dp1207 +g3 +(dp1208 +g5 +(lp1209 +sg8 +(lp1210 +ssg11 +(dp1211 +g5 +(lp1212 +sg8 +(lp1213 +g186 +assg16 +(dp1214 +g5 +(lp1215 +sg8 +(lp1216 +ssg20 +(dp1217 +g5 +(lp1218 +sg8 +(lp1219 +S'RustySteel.jpg' +p1220 +asssS'island-7h.jpg' +p1221 +(dp1222 +g3 +(dp1223 +g5 +(lp1224 +sg8 +(lp1225 +ssg11 +(dp1226 +g5 +(lp1227 +sg8 +(lp1228 +ssg16 +(dp1229 +g5 +(lp1230 +sg8 +(lp1231 +ssg20 +(dp1232 +g5 +(lp1233 +sg8 +(lp1234 +S'island-7h.jpg' +p1235 +asssS'sign-dir-fish.odef' +p1236 +(dp1237 +g3 +(dp1238 +g5 +(lp1239 +sg8 +(lp1240 +S'sign-dir-fish.mesh' +p1241 +assg11 +(dp1242 +g5 +(lp1243 +sg8 +(lp1244 +g434 +assg16 +(dp1245 +g5 +(lp1246 +sg8 +(lp1247 +ssg20 +(dp1248 +g5 +(lp1249 +sg8 +(lp1250 +S'sign-dir-fish.odef' +p1251 +asssS'island-12h.jpg' +p1252 +(dp1253 +g3 +(dp1254 +g5 +(lp1255 +sg8 +(lp1256 +ssg11 +(dp1257 +g5 +(lp1258 +sg8 +(lp1259 +ssg16 +(dp1260 +g5 +(lp1261 +sg8 +(lp1262 +ssg20 +(dp1263 +g5 +(lp1264 +sg8 +(lp1265 +S'island-12h.jpg' +p1266 +asssS'caliber.png' +p1267 +(dp1268 +g3 +(dp1269 +g5 +(lp1270 +sg8 +(lp1271 +ssg11 +(dp1272 +g5 +(lp1273 +sg8 +(lp1274 +S'caliber.material' +p1275 +assg16 +(dp1276 +g5 +(lp1277 +sg8 +(lp1278 +ssg20 +(dp1279 +g5 +(lp1280 +sg8 +(lp1281 +S'caliber.png' +p1282 +asssS'C1.jpg' +p1283 +(dp1284 +g3 +(dp1285 +g5 +(lp1286 +sg8 +(lp1287 +ssg11 +(dp1288 +g5 +(lp1289 +sg8 +(lp1290 +g314 +assg16 +(dp1291 +g5 +(lp1292 +sg8 +(lp1293 +ssg20 +(dp1294 +g5 +(lp1295 +sg8 +(lp1296 +S'C1.jpg' +p1297 +asssS'wheelband1.jpg' +p1298 +(dp1299 +g3 +(dp1300 +g5 +(lp1301 +sg8 +(lp1302 +ssg11 +(dp1303 +g5 +(lp1304 +sg8 +(lp1305 +g186 +assg16 +(dp1306 +g5 +(lp1307 +sg8 +(lp1308 +ssg20 +(dp1309 +g5 +(lp1310 +sg8 +(lp1311 +S'wheelband1.jpg' +p1312 +asssS'pedal.png' +p1313 +(dp1314 +g3 +(dp1315 +g5 +(lp1316 +sg8 +(lp1317 +ssg11 +(dp1318 +g5 +(lp1319 +sg8 +(lp1320 +g414 +assg16 +(dp1321 +g5 +(lp1322 +sg8 +(lp1323 +ssg20 +(dp1324 +g5 +(lp1325 +sg8 +(lp1326 +S'pedal.png' +p1327 +asssS'mouse.png' +p1328 +(dp1329 +g3 +(dp1330 +g5 +(lp1331 +sg8 +(lp1332 +ssg11 +(dp1333 +g5 +(lp1334 +sg8 +(lp1335 +g381 +assg16 +(dp1336 +g5 +(lp1337 +sg8 +(lp1338 +ssg20 +(dp1339 +g5 +(lp1340 +sg8 +(lp1341 +S'mouse.png' +p1342 +asssS'sign-dir-cold-left.mesh.xml' +p1343 +(dp1344 +g20 +(dp1345 +ssS'ILUT.dll' +p1346 +(dp1347 +g20 +(dp1348 +ssS'door.wav' +p1349 +(dp1350 +g3 +(dp1351 +g5 +(lp1352 +sg8 +(lp1353 +ssg11 +(dp1354 +g5 +(lp1355 +sg8 +(lp1356 +ssg16 +(dp1357 +g5 +(lp1358 +sg8 +(lp1359 +ssg20 +(dp1360 +g5 +(lp1361 +sg8 +(lp1362 +S'door.wav' +p1363 +asssS'nhelens.raw' +p1364 +(dp1365 +g3 +(dp1366 +g5 +(lp1367 +sg8 +(lp1368 +ssg11 +(dp1369 +g5 +(lp1370 +sg8 +(lp1371 +S'nhelens.cfg' +p1372 +assg16 +(dp1373 +g5 +(lp1374 +sg8 +(lp1375 +ssg20 +(dp1376 +g5 +(lp1377 +sg8 +(lp1378 +S'nhelens.raw' +p1379 +asssS'mouse.overlay' +p1380 +(dp1381 +g20 +(dp1382 +ssS'flatdafrwheelface.png' +p1383 +(dp1384 +g3 +(dp1385 +g5 +(lp1386 +sg8 +(lp1387 +ssg11 +(dp1388 +g5 +(lp1389 +sg8 +(lp1390 +g745 +assg16 +(dp1391 +g5 +(lp1392 +sg8 +(lp1393 +ssg20 +(dp1394 +g5 +(lp1395 +sg8 +(lp1396 +S'flatdafrwheelface.png' +p1397 +asssS'ripple.png' +p1398 +(dp1399 +g3 +(dp1400 +g5 +(lp1401 +sg8 +(lp1402 +ssg11 +(dp1403 +g5 +(lp1404 +sg8 +(lp1405 +g66 +assg16 +(dp1406 +g5 +(lp1407 +sg8 +(lp1408 +ssg20 +(dp1409 +g5 +(lp1410 +sg8 +(lp1411 +S'ripple.png' +p1412 +asssS'nhelens-15h.jpg' +p1413 +(dp1414 +g3 +(dp1415 +g5 +(lp1416 +sg8 +(lp1417 +ssg11 +(dp1418 +g5 +(lp1419 +sg8 +(lp1420 +ssg16 +(dp1421 +g5 +(lp1422 +sg8 +(lp1423 +ssg20 +(dp1424 +g5 +(lp1425 +sg8 +(lp1426 +S'nhelens-15h.jpg' +p1427 +asssS'road-block5.odef' +p1428 +(dp1429 +g3 +(dp1430 +g5 +(lp1431 +sg8 +(lp1432 +S'road-block5.mesh' +p1433 +assg11 +(dp1434 +g5 +(lp1435 +sg8 +(lp1436 +ssg16 +(dp1437 +g5 +(lp1438 +sg8 +(lp1439 +ssg20 +(dp1440 +g5 +(lp1441 +sg8 +(lp1442 +S'road-block5.odef' +p1443 +asssS'agoral-mini.png' +p1444 +(dp1445 +g3 +(dp1446 +g5 +(lp1447 +sg8 +(lp1448 +ssg11 +(dp1449 +g5 +(lp1450 +sg8 +(lp1451 +S'agoral.truck' +p1452 +assg16 +(dp1453 +g5 +(lp1454 +sg8 +(lp1455 +ssg20 +(dp1456 +g5 +(lp1457 +sg8 +(lp1458 +S'agoral-mini.png' +p1459 +asssS'blackdot.png' +p1460 +(dp1461 +g3 +(dp1462 +g5 +(lp1463 +sg8 +(lp1464 +ssg11 +(dp1465 +g5 +(lp1466 +sg8 +(lp1467 +g414 +assg16 +(dp1468 +g5 +(lp1469 +sg8 +(lp1470 +ssg20 +(dp1471 +g5 +(lp1472 +sg8 +(lp1473 +S'blackdot.png' +p1474 +asssS'acontainer.png' +p1475 +(dp1476 +g3 +(dp1477 +g5 +(lp1478 +sg8 +(lp1479 +ssg11 +(dp1480 +g5 +(lp1481 +sg8 +(lp1482 +g807 +assg16 +(dp1483 +g5 +(lp1484 +sg8 +(lp1485 +ssg20 +(dp1486 +g5 +(lp1487 +sg8 +(lp1488 +S'acontainer.png' +p1489 +asssS'sign-rocks.odef' +p1490 +(dp1491 +g3 +(dp1492 +g5 +(lp1493 +sg8 +(lp1494 +S'sign-rocks.mesh' +p1495 +assg11 +(dp1496 +g5 +(lp1497 +sg8 +(lp1498 +g138 +ag434 +assg16 +(dp1499 +g5 +(lp1500 +sg8 +(lp1501 +ssg20 +(dp1502 +g5 +(lp1503 +sg8 +(lp1504 +S'sign-rocks.odef' +p1505 +asssS'sign-dir-cargo.mesh' +p1506 +(dp1507 +g3 +(dp1508 +g5 +(lp1509 +S'sign-nhelens' +p1510 +asg8 +(lp1511 +g31 +assg11 +(dp1512 +g5 +(lp1513 +sg8 +(lp1514 +S'sign-dir-cargo.odef' +p1515 +assg16 +(dp1516 +g5 +(lp1517 +sg8 +(lp1518 +ssg20 +(dp1519 +g5 +(lp1520 +sg8 +(lp1521 +S'sign-dir-cargo.mesh' +p1522 +asssS'engine.overlay' +p1523 +(dp1524 +g20 +(dp1525 +ssS'road-park.mesh' +p1526 +(dp1527 +g3 +(dp1528 +g5 +(lp1529 +S'road' +p1530 +asg8 +(lp1531 +g218 +assg11 +(dp1532 +g5 +(lp1533 +sg8 +(lp1534 +S'road-park.odef' +p1535 +assg16 +(dp1536 +g5 +(lp1537 +sg8 +(lp1538 +ssg20 +(dp1539 +g5 +(lp1540 +sg8 +(lp1541 +S'road-park.mesh' +p1542 +asssS'whiteneedle.png' +p1543 +(dp1544 +g3 +(dp1545 +g5 +(lp1546 +sg8 +(lp1547 +ssg11 +(dp1548 +g5 +(lp1549 +sg8 +(lp1550 +g414 +assg16 +(dp1551 +g5 +(lp1552 +sg8 +(lp1553 +ssg20 +(dp1554 +g5 +(lp1555 +sg8 +(lp1556 +S'whiteneedle.png' +p1557 +asssS'secured-on.png' +p1558 +(dp1559 +g3 +(dp1560 +g5 +(lp1561 +sg8 +(lp1562 +ssg11 +(dp1563 +g5 +(lp1564 +sg8 +(lp1565 +g66 +assg16 +(dp1566 +g5 +(lp1567 +sg8 +(lp1568 +ssg20 +(dp1569 +g5 +(lp1570 +sg8 +(lp1571 +S'secured-on.png' +p1572 +asssS'sign-pos-castle.odef' +p1573 +(dp1574 +g3 +(dp1575 +g5 +(lp1576 +sg8 +(lp1577 +S'sign-pos-castle.mesh' +p1578 +assg11 +(dp1579 +g5 +(lp1580 +sg8 +(lp1581 +g434 +assg16 +(dp1582 +g5 +(lp1583 +sg8 +(lp1584 +ssg20 +(dp1585 +g5 +(lp1586 +sg8 +(lp1587 +S'sign-pos-castle.odef' +p1588 +asssS'Caelum.dll' +p1589 +(dp1590 +g20 +(dp1591 +ssS'sign-pos-castle.mesh' +p1592 +(dp1593 +g3 +(dp1594 +g5 +(lp1595 +S'sign-nhelens' +p1596 +asg8 +(lp1597 +g31 +assg11 +(dp1598 +g5 +(lp1599 +sg8 +(lp1600 +g1573 +assg16 +(dp1601 +g5 +(lp1602 +sg8 +(lp1603 +ssg20 +(dp1604 +g5 +(lp1605 +sg8 +(lp1606 +S'sign-pos-castle.mesh' +p1607 +asssS'unknown.png' +p1608 +(dp1609 +g3 +(dp1610 +g5 +(lp1611 +sg8 +(lp1612 +ssg11 +(dp1613 +g5 +(lp1614 +sg8 +(lp1615 +g66 +ag414 +ag381 +assg16 +(dp1616 +g5 +(lp1617 +sg8 +(lp1618 +ssg20 +(dp1619 +g5 +(lp1620 +sg8 +(lp1621 +S'unknown.png' +p1622 +asssS'road-runway-end.odef' +p1623 +(dp1624 +g3 +(dp1625 +g5 +(lp1626 +sg8 +(lp1627 +S'road-runway-end.mesh' +p1628 +assg11 +(dp1629 +g5 +(lp1630 +sg8 +(lp1631 +g342 +ag138 +ag434 +assg16 +(dp1632 +g5 +(lp1633 +sg8 +(lp1634 +ssg20 +(dp1635 +g5 +(lp1636 +sg8 +(lp1637 +S'road-runway-end.odef' +p1638 +asssS'nedlloyd.mesh' +p1639 +(dp1640 +g3 +(dp1641 +g5 +(lp1642 +S'nedlloyd' +p1643 +asg8 +(lp1644 +S'nedlloyd.material' +p1645 +assg11 +(dp1646 +g5 +(lp1647 +sg8 +(lp1648 +S'nedlloyd.odef' +p1649 +assg16 +(dp1650 +g5 +(lp1651 +sg8 +(lp1652 +ssg20 +(dp1653 +g5 +(lp1654 +sg8 +(lp1655 +S'nedlloyd.mesh' +p1656 +asssS'semi.truck' +p1657 +(dp1658 +g3 +(dp1659 +g5 +(lp1660 +S'tracks/semi' +p1661 +asg8 +(lp1662 +S'dashboard.mesh' +p1663 +aS'leftmirror.mesh' +p1664 +aS'rightmirror.mesh' +p1665 +aS'seat.mesh' +p1666 +aS'seat.mesh' +p1667 +ag483 +ag483 +aS'semi-mini.png' +p1668 +assg11 +(dp1669 +g5 +(lp1670 +sg8 +(lp1671 +ssg16 +(dp1672 +g5 +(lp1673 +S'tracks/semihelp' +p1674 +asg8 +(lp1675 +S'semi-mini.png' +p1676 +assg20 +(dp1677 +g5 +(lp1678 +sg8 +(lp1679 +S'semi.truck' +p1680 +asssS'virtualdashboard.png' +p1681 +(dp1682 +g3 +(dp1683 +g5 +(lp1684 +sg8 +(lp1685 +ssg11 +(dp1686 +g5 +(lp1687 +sg8 +(lp1688 +ssg16 +(dp1689 +g5 +(lp1690 +sg8 +(lp1691 +ssg20 +(dp1692 +g5 +(lp1693 +sg8 +(lp1694 +S'virtualdashboard.png' +p1695 +asssg607 +(dp1696 +g3 +(dp1697 +g5 +(lp1698 +S'tracks/An12' +p1699 +asg8 +(lp1700 +S'an12nacelle.mesh' +p1701 +aS'an12nacelle.mesh' +p1702 +aS'an12nacelle.mesh' +p1703 +aS'an12nacelle.mesh' +p1704 +aS'pale.mesh' +p1705 +aS'pale.mesh' +p1706 +aS'pale.mesh' +p1707 +aS'pale.mesh' +p1708 +aS'spinprop.mesh' +p1709 +aS'pale.mesh' +p1710 +aS'pale.mesh' +p1711 +aS'pale.mesh' +p1712 +aS'pale.mesh' +p1713 +aS'spinprop.mesh' +p1714 +aS'pale.mesh' +p1715 +aS'pale.mesh' +p1716 +aS'pale.mesh' +p1717 +aS'pale.mesh' +p1718 +aS'spinprop.mesh' +p1719 +aS'pale.mesh' +p1720 +aS'pale.mesh' +p1721 +aS'pale.mesh' +p1722 +aS'pale.mesh' +p1723 +aS'spinprop.mesh' +p1724 +aS'redbeacon.mesh' +p1725 +aS'redbeacon.mesh' +p1726 +aS'an12turret.mesh' +p1727 +aS'an12fairing-left.mesh' +p1728 +aS'an12fairing-right.mesh' +p1729 +ag593 +aS'an-12-mini.png' +p1730 +assg11 +(dp1731 +g5 +(lp1732 +sg8 +(lp1733 +g342 +ag138 +assg16 +(dp1734 +g5 +(lp1735 +S'tracks/an-12help' +p1736 +asg8 +(lp1737 +S'an-12-mini.png' +p1738 +assg20 +(dp1739 +g5 +(lp1740 +sg8 +(lp1741 +S'an-12.truck' +p1742 +asssS'chp-start.mesh' +p1743 +(dp1744 +g3 +(dp1745 +g5 +(lp1746 +S'chp' +p1747 +asg8 +(lp1748 +S'chp.material' +p1749 +assg11 +(dp1750 +g5 +(lp1751 +sg8 +(lp1752 +S'chp-start.odef' +p1753 +assg16 +(dp1754 +g5 +(lp1755 +sg8 +(lp1756 +ssg20 +(dp1757 +g5 +(lp1758 +sg8 +(lp1759 +S'chp-start.mesh' +p1760 +asssS'starterstart.wav' +p1761 +(dp1762 +g3 +(dp1763 +g5 +(lp1764 +sg8 +(lp1765 +ssg11 +(dp1766 +g5 +(lp1767 +sg8 +(lp1768 +ssg16 +(dp1769 +g5 +(lp1770 +sg8 +(lp1771 +ssg20 +(dp1772 +g5 +(lp1773 +sg8 +(lp1774 +S'starterstart.wav' +p1775 +asssS'sign-leftturn.mesh' +p1776 +(dp1777 +g3 +(dp1778 +g5 +(lp1779 +S'sign-leftturn' +p1780 +asg8 +(lp1781 +g31 +assg11 +(dp1782 +g5 +(lp1783 +sg8 +(lp1784 +S'sign-leftturn.odef' +p1785 +assg16 +(dp1786 +g5 +(lp1787 +sg8 +(lp1788 +ssg20 +(dp1789 +g5 +(lp1790 +sg8 +(lp1791 +S'sign-leftturn.mesh' +p1792 +asssS'challywheelface.png' +p1793 +(dp1794 +g3 +(dp1795 +g5 +(lp1796 +sg8 +(lp1797 +ssg11 +(dp1798 +g5 +(lp1799 +sg8 +(lp1800 +S'challenger.material' +p1801 +assg16 +(dp1802 +g5 +(lp1803 +sg8 +(lp1804 +ssg20 +(dp1805 +g5 +(lp1806 +sg8 +(lp1807 +S'challywheelface.png' +p1808 +asssS'agoras.truck' +p1809 +(dp1810 +g3 +(dp1811 +g5 +(lp1812 +S'tracks/agora' +p1813 +asg8 +(lp1814 +S'dashboard.mesh' +p1815 +aS'leftmirror.mesh' +p1816 +aS'rightmirror.mesh' +p1817 +aS'seat.mesh' +p1818 +aS'agora.material' +p1819 +aS'agoras-mini.png' +p1820 +assg11 +(dp1821 +g5 +(lp1822 +sg8 +(lp1823 +ssg16 +(dp1824 +g5 +(lp1825 +S'tracks/agorashelp' +p1826 +asg8 +(lp1827 +S'agoras-mini.png' +p1828 +assg20 +(dp1829 +g5 +(lp1830 +sg8 +(lp1831 +S'agoras.truck' +p1832 +asssS'beacon.mesh.xml' +p1833 +(dp1834 +g20 +(dp1835 +ssS'flatdaf.truck' +p1836 +(dp1837 +g3 +(dp1838 +g5 +(lp1839 +S'tr... [truncated message content] |
From: <ror...@us...> - 2007-07-23 10:31:04
|
Revision: 113 http://roreditor.svn.sourceforge.net/roreditor/?rev=113&view=rev Author: rorthomas Date: 2007-07-23 03:31:00 -0700 (Mon, 23 Jul 2007) Log Message: ----------- * improved UnZIP * added 'n' option to truckparser.py * improved ror_mesh with timeout for waiting on ogrexmlconverter * installmod now callable from outside * checkmods commands added to automate the installmod command for all the files in it Modified Paths: -------------- trunk/installmod.py trunk/lib/UnZIP/__init__.py trunk/lib/ror/depchecker.py trunk/lib/ror/depcheckerplugins/ror_mesh.py trunk/lib/ror/truckparser.py Added Paths: ----------- trunk/checkmods.bat trunk/checkmods.py Added: trunk/checkmods.bat =================================================================== --- trunk/checkmods.bat (rev 0) +++ trunk/checkmods.bat 2007-07-23 10:31:00 UTC (rev 113) @@ -0,0 +1 @@ +%systemdrive%\python25\python.exe checkmods.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Added: trunk/checkmods.py =================================================================== --- trunk/checkmods.py (rev 0) +++ trunk/checkmods.py 2007-07-23 10:31:00 UTC (rev 113) @@ -0,0 +1,43 @@ +import os.path, sys, installmod, time + + +def getFiles(top): + fl = {} + for root, dirs, files in os.walk(top): + for f in files: + fn = os.path.join(root, f) + fl[fn] = {} + for fk in fl.keys(): + print "%10s %s" % ("", os.path.basename(fk)) + + print "found %d files!" % (len(fl.keys())) + return fl + +def main(): + dir = sys.argv[1] + mode = sys.argv[2] + files = getFiles(dir) + valid={} + counter = 0 + countervalid = 0 + for file in files.keys(): + print "## %s (%d/%d)##############################################" % (os.path.basename(file), counter, len(files)) + counter += 1 + mods = installmod.work(mode, file, True, False) + if len(mods) == 0: + print "!!! INVALID: ", os.path.basename(file) + else: + print "VALID: ", os.path.basename(file) + valid[file] = mods + print "#######################################################################" + time.sleep(0.01) + print "################################################" + print "################################################" + print "################################################" + for f in valid.keys(): + print f, valid[f] + print "%d of %d files containing valid mods!" % (len(valid), len(files)) + + +if __name__=="__main__": + main() \ No newline at end of file Modified: trunk/installmod.py =================================================================== --- trunk/installmod.py 2007-07-23 08:40:03 UTC (rev 112) +++ trunk/installmod.py 2007-07-23 10:31:00 UTC (rev 113) @@ -11,6 +11,7 @@ if os.path.isdir(TEMPDIR): try: shutil.rmtree(TEMPDIR) + #os.rmdir(TEMPDIR) except Exception, err: if not reporterrors: return @@ -20,14 +21,18 @@ def ExtractToTemp(filename): file, extension = os.path.splitext(filename) - removetemp() + removetemp(False) + os.mkdir(TEMPDIR) if extension.lower() == ".rar": import UnRAR - os.mkdir(TEMPDIR) dst = os.path.join(TEMPDIR, os.path.basename(filename)) shutil.copyfile(filename, dst) os.chdir(TEMPDIR) - UnRAR.Archive(os.path.basename(filename)).extract() + UnRAR.Archive(os.path.basename(filename)).extract() + + # remove .rar file instantly + os.unlink(os.path.join(TEMPDIR, os.path.basename(filename))) + # change back to current path os.chdir(os.path.dirname(os.path.abspath(__file__))) return True @@ -36,7 +41,8 @@ UnZIP.unzip(filename, TEMPDIR) return True else: - shutil.copyfile(filename, dst) + print filename, " to ", os.path.join(TEMPDIR, os.path.basename(filename)) + shutil.copyfile(filename, os.path.join(TEMPDIR, os.path.basename(filename))) return False def installfile(maintarget, srcfile, dryrun): @@ -81,7 +87,7 @@ def getTargets(verbose): import ror.depchecker - dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", verbose) + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", False) targets = [] for file in dc.files: filename, extension = os.path.splitext(file) @@ -98,52 +104,14 @@ invalidtargets.append(target) return validtargets, invalidtargets - -def main(): - if len(sys.argv) < 3: - usage() - - targetfile = sys.argv[1] - if not os.path.isfile(targetfile): - log().error("%s is not a valid target filename!" % targetfile) - usage() - mode = sys.argv[2] - if not mode in ['list', 'listall', 'install', 'installall']: - usage() - if len(sys.argv) < 4 and mode in ['install']: - usage() - - # get optional flags - verbose = False - dryrun = False - for option in sys.argv: - if option == "--verbose": - verbose = True - if option == "--dryrun": - dryrun = True - - - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() - - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - +def work(mode, targetfile, verbose, dryrun, installtarget=None): filename = os.path.abspath(targetfile) - ExtractToTemp(filename) - + ExtractToTemp(targetfile) if mode == "install": - target = sys.argv[3] + target = installtarget + log().info("### validating target ...") import ror.depchecker - log().info("### validating target ...") dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) if dc.invalid: log().error("### target invalid!") @@ -165,14 +133,20 @@ log().info("### would install %d files." % installcounter) else: log().info("### %d files installed, finished!" % installcounter) - + removetemp(False) + return [target] + elif mode == "installall": validtargets, invalidtargets = getTargets(verbose) log().info("### installing %d found modifications:" % (len(validtargets))) installcounter = 0 for target in validtargets: log().info("### installing modification '%s'" % target) + import ror.depchecker dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.dstree is None: + log().error("no dependenytree for File %s!" % (filename)) + continue for file in dc.dstree: filename = file['filename'] filenamefound = searchFile(filename, TEMPDIR) @@ -185,26 +159,74 @@ log().info("### would install %d files." % installcounter) else: log().info("### %d files installed, finished!" % installcounter) - + removetemp(False) + return validtargets elif mode in ["list", "listall"]: validtargets, invalidtargets = getTargets(verbose) if mode == "listall": if len(invalidtargets) > 0: - print "broken modifications found:" + log().info("broken modifications found:") for v in invalidtargets: - print " %-20s" % v - print "use the --verbose flag to find the missing files!" + log().info(" %-20s" % v) + log().info("use the --verbose flag to find the missing files!") else: - print "no broken modifications found:" + log().info("no broken modifications found") if len(validtargets) > 0: - print "installable modifications found: " + log().info("installable modifications found:") for v in validtargets: - print " %-20s" % v + log().info(" %-20s" % v) else: - print "no installable modifications found! :(" - removetemp(False) + log().info("no installable modifications found! :(") + # todo : remove workaround! + removetemp(False) + return validtargets + return None + +def main(): + if len(sys.argv) < 3: + usage() + targetfile = sys.argv[1] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + mode = sys.argv[2] + if not mode in ['list', 'listall', 'install', 'installall']: + usage() + if len(sys.argv) < 4 and mode in ['install']: + usage() + + # get optional flags + verbose = False + dryrun = False + for option in sys.argv: + if option == "--verbose": + verbose = True + if option == "--dryrun": + dryrun = True + + import ror.settingsManager + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(path,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + if len(sys.argv) == 4: + installtarget = sys.argv[3] + else: + installtarget = None + work(mode, targetfile, verbose, dryrun, installtarget) + + + if __name__=="__main__": main() \ No newline at end of file Modified: trunk/lib/UnZIP/__init__.py =================================================================== --- trunk/lib/UnZIP/__init__.py 2007-07-23 08:40:03 UTC (rev 112) +++ trunk/lib/UnZIP/__init__.py 2007-07-23 10:31:00 UTC (rev 113) @@ -1,12 +1,27 @@ import sys, zipfile, os, os.path def unzip(file, dir): - os.mkdir(dir) - zfobj = zipfile.ZipFile(file) - for name in zfobj.namelist(): - if name.endswith('/'): - os.mkdir(os.path.join(dir, name)) - else: - outfile = open(os.path.join(dir, name), 'wb') - outfile.write(zfobj.read(name)) - outfile.close() + try: + os.mkdir(dir) + except: + pass + try: + zfobj = zipfile.ZipFile(file) + for name in zfobj.namelist(): + if name.endswith('/'): + os.mkdir(os.path.join(dir, name)) + else: + dirnow = dir + dirnow = dirnow.replace("/", "\\") + subdirs = name.split("/") + if len(subdirs) > 0: + for subdir in subdirs: + dirnow = os.path.join(dirnow, subdir) + if not os.path.isdir(os.path.dirname(dirnow)): + os.mkdir(os.path.dirname(dirnow)) + outfile = open(dirnow, 'wb') + outfile.write(zfobj.read(name)) + outfile.close() + except Exception, err: + print str(err) + return \ No newline at end of file Modified: trunk/lib/ror/depchecker.py =================================================================== --- trunk/lib/ror/depchecker.py 2007-07-23 08:40:03 UTC (rev 112) +++ trunk/lib/ror/depchecker.py 2007-07-23 10:31:00 UTC (rev 113) @@ -359,7 +359,7 @@ fl[fn]['md5'] = self.md5Sum(fn) if self.verbose: for fk in fl.keys(): - infostr = "%10s %s" % ("", fk) + infostr = "%10s %s" % ("", os.path.basename(fk)) log().info(infostr) log().info("found %d files!" % (len(fl.keys()))) self.files = fl Modified: trunk/lib/ror/depcheckerplugins/ror_mesh.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_mesh.py 2007-07-23 08:40:03 UTC (rev 112) +++ trunk/lib/ror/depcheckerplugins/ror_mesh.py 2007-07-23 10:31:00 UTC (rev 113) @@ -1,5 +1,5 @@ import sys, os, os.path, re -import subprocess +import subprocess,os,sys,signal,pty,time,errno,thread from deptools import * @@ -19,12 +19,58 @@ print "calling " + cmd p = subprocess.Popen(cmd, shell = False, cwd = os.path.dirname(CONVERTERBIN), stderr = subprocess.PIPE, stdout = subprocess.PIPE) - p.wait() + smart_wait_for_subprocess(p, 10) if not os.path.isfile(os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml")): print "conversion of mesh file %s failed!" % filename print "mesh converted: " + filename +def smart_wait_for_subprocess(sp,timeout=30): + """ + Will wait for Process given to expire, and then kill it if + the time elapses (or never if timeout==0). + @param sp: Subprocess to watch + @param timeout: timeout length in seconds + """ + running=1 + try: + sleeps=timeout*4 + #Just wait around for termination... + + while sp.poll()==None: + #print>>efp,"WAITING:",sleeps + sleeps-=1 + time.sleep(.25) + os.kill(sp.pid,0) + if sleeps<=0 and timeout>0: + os.kill(sp.pid,signal.SIGTERM) + break + elif sleeps<=0: + break + #Did it REALLY exit? + try: + os.kill(sp.pid,0) + sleeps=20 + while sp.poll()==None: + #print>>efp,"KILLING:",sleeps + sleeps-=1 + time.sleep(.25) + + #No? KILL IT! + if sleeps<=0 and timeout>0: + #print>>efp,"KILLING2:",sleeps + os.kill(sp.pid,signal.SIGKILL) + break + elif sleeps<=0: + break + except: + running=0 + except: + #Make REALLY effing sure it exited. + os.kill(sp.pid,signal.SIGKILL) + #print>>efp,"KILLING2:",sleeps + + def parseRE(content): deps = [] for line in content: Modified: trunk/lib/ror/truckparser.py =================================================================== --- trunk/lib/ror/truckparser.py 2007-07-23 08:40:03 UTC (rev 112) +++ trunk/lib/ror/truckparser.py 2007-07-23 10:31:00 UTC (rev 113) @@ -169,8 +169,9 @@ {'name':'second node', 'type':'node'}, {'name':'options', 'type':'string', 'required':False, - 'default':None, + 'default':'n', 'validvalues':[ + 'n', # visible, default 'v', # visible, default 'i', # this beam is invisible. Very usefull to hide "cheating" structural beam, or to improve performances once the truck is textured. 'r', # this beam is a rope (opposes no force to compression) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-23 12:18:37
|
Revision: 114 http://roreditor.svn.sourceforge.net/roreditor/?rev=114&view=rev Author: rorthomas Date: 2007-07-23 05:18:36 -0700 (Mon, 23 Jul 2007) Log Message: ----------- * checkmods.py improved * installmod.py output improved * depchecker graphs fixed * truckparser fixed Modified Paths: -------------- trunk/checkmods.py trunk/installmod.py trunk/lib/ror/depchecker.py trunk/lib/ror/depcheckerplugins/ror_truck.py trunk/lib/ror/truckparser.py Modified: trunk/checkmods.py =================================================================== --- trunk/checkmods.py 2007-07-23 10:31:00 UTC (rev 113) +++ trunk/checkmods.py 2007-07-23 12:18:36 UTC (rev 114) @@ -1,5 +1,8 @@ import os.path, sys, installmod, time +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) +from ror.logger import log +from ror.settingsManager import getSettingsManager def getFiles(top): fl = {} @@ -8,9 +11,9 @@ fn = os.path.join(root, f) fl[fn] = {} for fk in fl.keys(): - print "%10s %s" % ("", os.path.basename(fk)) + log().info("%10s %s" % ("", os.path.basename(fk))) - print "found %d files!" % (len(fl.keys())) + log().info("found %d files!" % (len(fl.keys()))) return fl def main(): @@ -21,22 +24,21 @@ counter = 0 countervalid = 0 for file in files.keys(): - print "## %s (%d/%d)##############################################" % (os.path.basename(file), counter, len(files)) + log().info("## %s (%d/%d)##################################" % (os.path.basename(file), counter, len(files))) counter += 1 - mods = installmod.work(mode, file, True, False) + mods = installmod.work(mode, file, verbose=(len(sys.argv)== 4 and sys.argv[3] == "--verbose"), dryrun=True) if len(mods) == 0: - print "!!! INVALID: ", os.path.basename(file) + log().info("!!! INVALID: "+ os.path.basename(file)) else: - print "VALID: ", os.path.basename(file) + log().info("VALID: "+ os.path.basename(file)) valid[file] = mods - print "#######################################################################" + log().info("#######################################################################") time.sleep(0.01) - print "################################################" - print "################################################" - print "################################################" + log().info("===========================================================") + log().info("===== FINISHED found, valid mods:") for f in valid.keys(): - print f, valid[f] - print "%d of %d files containing valid mods!" % (len(valid), len(files)) + log().info( f + str(valid[f])) + log().info("%d of %d files containing valid mods!" % (len(valid), len(files))) if __name__=="__main__": Modified: trunk/installmod.py =================================================================== --- trunk/installmod.py 2007-07-23 10:31:00 UTC (rev 113) +++ trunk/installmod.py 2007-07-23 12:18:36 UTC (rev 114) @@ -41,7 +41,7 @@ UnZIP.unzip(filename, TEMPDIR) return True else: - print filename, " to ", os.path.join(TEMPDIR, os.path.basename(filename)) + log.info("copying "+filename+" to "+os.path.join(TEMPDIR, os.path.basename(filename))) shutil.copyfile(filename, os.path.join(TEMPDIR, os.path.basename(filename))) return False @@ -96,7 +96,9 @@ validtargets = [] invalidtargets = [] + log().info("### found %d targets, checking them separatly now" % len(targets)) for target in targets: + log().info("### checking target %s..." % target) dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) if dc.everythingfound: validtargets.append(target) @@ -108,6 +110,7 @@ def work(mode, targetfile, verbose, dryrun, installtarget=None): filename = os.path.abspath(targetfile) ExtractToTemp(targetfile) + log().info("### modinstaller started with %s, %s" % (mode, targetfile)) if mode == "install": target = installtarget log().info("### validating target ...") Modified: trunk/lib/ror/depchecker.py =================================================================== --- trunk/lib/ror/depchecker.py 2007-07-23 10:31:00 UTC (rev 113) +++ trunk/lib/ror/depchecker.py 2007-07-23 12:18:36 UTC (rev 114) @@ -14,6 +14,7 @@ RORDEPSFILENAME = "031a_deps.bin" MD5FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), MD5FILENAME) RORDEPSFILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), RORDEPSFILENAME) +GRAPHPATH = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", ".." ,"graphs")) class RoRDepChecker: def __init__(self, path, mode, dependfilename, verbose=True): @@ -42,7 +43,7 @@ if dependfilename != "": self.generateSingleDep() - if mode == "all": + if mode == "all" and verbose: self.tryGraph() def saveTree(self, filename): @@ -76,8 +77,10 @@ for rsub in req: if rr['filename'] == rsub['filename']: duplicate = True - #if not duplicate: - req.append(rr) + + # enable for graph functions (allows multiple arrows then) + if not duplicate: + req.append(rr) except: pass return req @@ -105,7 +108,7 @@ self.dstree = tree - if self.verbose: + if self.verbose and len(tree) > 1: self.tryGraph(tree) @@ -144,6 +147,8 @@ def drawGraph(self, tree = None): import pydot + if not os.path.isdir(GRAPHPATH): + os.mkdir(GRAPHPATH) edges = [] if tree is None: for filenameA in self.filedeps.keys(): @@ -152,7 +157,7 @@ for rel in fileA[REQUIRES][FILE]: e = (filenameA, rel) edges.append(e) - fn = 'dependencies.png' + os.path.join(GRAPHPATH, 'alldependencies.png') else: od = -1 parents = [] @@ -165,18 +170,16 @@ edges.append((parents[-1], f)) parents.append(f) elif d == od: - #print "2" - edges.append((parents[-1], f)) + #print "2", (parents[-2], f) + edges.append((parents[-2], f)) elif d < od: for i in range(0, od - d + 1): del parents[-1] #print "3", od - d, (parents[-1], f) edges.append((parents[-1], f)) parents.append(f) - - od = d - fn = 'dependencies_single.png' + fn = os.path.join(GRAPHPATH, self.dependfilename + '_dependencies.png') pass #edges = [(1,2), (1,3), (1,4), (3,4)] @@ -279,7 +282,8 @@ found = True break if not found and relation != OPTIONAL: - notfound[type].append(reqfile) + if not reqfile in notfound[type]: + notfound[type].append(reqfile) self.filedeps = newtree #print newtree self.everythingfound = False Modified: trunk/lib/ror/depcheckerplugins/ror_truck.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_truck.py 2007-07-23 10:31:00 UTC (rev 113) +++ trunk/lib/ror/depcheckerplugins/ror_truck.py 2007-07-23 12:18:36 UTC (rev 114) @@ -16,7 +16,6 @@ if 'props' in p.tree.keys(): for prop in p.tree['props']: props.append(prop['data'][-1]) - #print props #print truckname return { Modified: trunk/lib/ror/truckparser.py =================================================================== --- trunk/lib/ror/truckparser.py 2007-07-23 10:31:00 UTC (rev 113) +++ trunk/lib/ror/truckparser.py 2007-07-23 12:18:36 UTC (rev 114) @@ -521,7 +521,7 @@ # tree of the actual file's data tree = None - ### this will hold all comments + # this will hold all comments comments = None links = [ @@ -654,15 +654,26 @@ newargs.append(args[argnum]) args = newargs #ok + # continue to next line, do not further parse it! + continue else: # no other args except the command itself args = [] + # continue to next line, do not further parse it! + continue argumentsection = self.commands[cmdcheck] argumentsection_str = "command" else: argumentsection = self.sections[actualsection] argumentsection_str = "section" argumenttree = [] + + # debug stuff: + #print actualsection, argnum, args + #print (args), (argumentsection) + #if len(args) < len(argumentsection): + # print "too short!!" + for argnum in range(0, len(argumentsection)): if argnum >= len(args) and not self.argIsRequired(argumentsection[argnum]): continue This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-23 15:03:50
|
Revision: 117 http://roreditor.svn.sourceforge.net/roreditor/?rev=117&view=rev Author: rorthomas Date: 2007-07-23 08:03:49 -0700 (Mon, 23 Jul 2007) Log Message: ----------- * modinstaller can now uninstall mods * fixed cfg parser regarding ogre.cfg - file Modified Paths: -------------- trunk/installmod.py trunk/lib/ror/depchecker.py trunk/lib/ror/depcheckerplugins/ror_cfg.py trunk/lib/ror/depcheckerplugins/ror_material.py Modified: trunk/installmod.py =================================================================== --- trunk/installmod.py 2007-07-23 13:44:24 UTC (rev 116) +++ trunk/installmod.py 2007-07-23 15:03:49 UTC (rev 117) @@ -67,24 +67,6 @@ return os.path.join(root, filename) return None -def usage(): - print "usage (general): %s <filename> <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) - print "<filename> list" - print " list all found and valid modifications in filename" - print "" - print "<filename> listall --verbose" - print " list all found modifications in filename (valid and invalid)" - print "" - print "<filename> installall --verbose" - print " install all found modifications in filename" - print "" - print "<filename> install <modification> --verbose" - print " install a certain modifications in filename (valid and invalid)" - print "" - print "notes: the --verbose option is optional to increase the output for debugging" - print " the --dryrun option just prints out which files would be copied/installed." - sys.exit(0) - def getTargets(verbose): import ror.depchecker dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", False) @@ -110,12 +92,28 @@ invalidtargets.append(target) return validtargets, invalidtargets +def getRoRMods(verbose): + import ror.depchecker + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + dc = ror.depchecker.RoRDepChecker(rorpath, "getfiles", "", False) + targets = [] + for file in dc.files: + filename, extension = os.path.splitext(file) + if extension.lower() in ['.truck', '.terrn', '.load']: + targets.append(os.path.basename(file)) + newtargets = [] + md5s = dc.readMD5File() + for target in targets: + if not os.path.basename(target) in md5s.keys(): + newtargets.append(target) + return newtargets + def work(mode, targetfile, verbose, dryrun, installtarget=None): - filename = os.path.abspath(targetfile) - ExtractToTemp(targetfile) log().info("### modinstaller started with %s, %s" % (mode, targetfile)) if mode == "install": + filename = os.path.abspath(targetfile) + ExtractToTemp(targetfile) target = installtarget log().info("### validating target ...") import ror.depchecker @@ -144,6 +142,8 @@ return [target] elif mode == "installall": + filename = os.path.abspath(targetfile) + ExtractToTemp(targetfile) validtargets, invalidtargets = getTargets(verbose) log().info("### installing %d found modifications:" % (len(validtargets))) installcounter = 0 @@ -168,7 +168,10 @@ log().info("### %d files installed, finished!" % installcounter) removetemp(False) return validtargets + elif mode in ["list", "listall"]: + filename = os.path.abspath(targetfile) + ExtractToTemp(targetfile) validtargets, invalidtargets = getTargets(verbose) if mode == "listall": if len(invalidtargets) > 0: @@ -188,23 +191,104 @@ # todo : remove workaround! removetemp(False) return validtargets + + elif mode in ["listinstalled"]: + targets = getRoRMods(verbose) + log().info("### Found Mods:") + for target in targets: + log().info(" "+target) + if mode in ["uninstall"]: + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + log().info("### validating target ...") + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(rorpath, "dtree", targetfile, verbose) + if dc.invalid: + log().error("### target invalid! (Target not found)") + log().info("### please use the 'listinstalled' mode to get valid uninstallation targets") + return None + + log().info("### target valid!") + + #print dc.dstree + newtargets = [] + md5s = dc.readMD5File() + for file in dc.dstree: + filename = file['filename'] + if not os.path.basename(filename) in md5s.keys(): + newtargets.append(filename) + log().info("### removed %d files from dependency tree." % (len(dc.dstree)-len(newtargets))) + #print newtargets + if dryrun: + log().info("### would uninstall %d file(s):" % len(newtargets)) + else: + log().info("### uninstalling %d file(s):" % len(newtargets)) + for target in newtargets: + filenamefound = searchFile(target, rorpath) + if filenamefound is None: + log().error("### File not found: %s" % target) + continue + log().info(" %s" % filenamefound) + if not dryrun: + os.unlink(filenamefound) + + + return None - + +def usage(): + print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) + print "list <filename>" + print " list all found and valid modifications in filename" + print "" + print "listall <filename> --verbose" + print " list all found modifications in filename (valid and invalid)" + print "" + print "installall <filename> --verbose --dryrun" + print " install all found modifications in filename" + print "" + print "install <filename> <modification> --verbose --dryrun" + print " install a certain modifications in filename (valid and invalid)" + print "" + print "listinstalled" + print " lists all installed RoR Mods" + print "" + print "uninstall <modname> --verbose --dryrun" + print " uninstalls a mod" + print "" + print "notes: the --verbose option is optional to increase the output for debugging" + print " the --dryrun option is optional and prints out what would be done" + sys.exit(0) + def main(): - if len(sys.argv) < 3: + + # check for valid RoR Directory! + import ror.settingsManager + rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + if len(sys.argv) < 2: usage() - - targetfile = sys.argv[1] - if not os.path.isfile(targetfile): - log().error("%s is not a valid target filename!" % targetfile) - usage() - mode = sys.argv[2] - if not mode in ['list', 'listall', 'install', 'installall']: + mode = sys.argv[1] + if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall']: usage() if len(sys.argv) < 4 and mode in ['install']: usage() + + if mode in ['list', 'listall', 'install', 'installall']: + targetfile = sys.argv[2] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + elif mode in ['listinstalled']: + targetfile = rorpath + elif mode == 'uninstall': + targetfile = sys.argv[2] + + # get optional flags verbose = False dryrun = False @@ -214,12 +298,6 @@ if option == "--dryrun": dryrun = True - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() - # Import Psyco if available try: import psyco Modified: trunk/lib/ror/depchecker.py =================================================================== --- trunk/lib/ror/depchecker.py 2007-07-23 13:44:24 UTC (rev 116) +++ trunk/lib/ror/depchecker.py 2007-07-23 15:03:49 UTC (rev 117) @@ -121,6 +121,7 @@ l = line.split(" ") md5s[l[0]] = l[1] self.orgMD5s = md5s + return md5s def readFile(self, filename): f=open(filename, 'rb') Modified: trunk/lib/ror/depcheckerplugins/ror_cfg.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_cfg.py 2007-07-23 13:44:24 UTC (rev 116) +++ trunk/lib/ror/depcheckerplugins/ror_cfg.py 2007-07-23 15:03:49 UTC (rev 117) @@ -27,7 +27,7 @@ # ignore standart configuration files file = os.path.basename(filename).lower() - if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg']: + if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg', 'ogre.cfg']: return {OPTIONAL:{},REQUIRES:{},PROVIDES:{}} dep = [] Modified: trunk/lib/ror/depcheckerplugins/ror_material.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_material.py 2007-07-23 13:44:24 UTC (rev 116) +++ trunk/lib/ror/depcheckerplugins/ror_material.py 2007-07-23 15:03:49 UTC (rev 117) @@ -26,7 +26,8 @@ dep = parseRE(content, RE1) prov = parseRE(content, RE2) if len(dep) == 0: - print "no texture found in material file " + filename + #print "no texture found in material file " + filename + pass if len(prov) == 0: print "no material found in material file " + filename else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-23 15:18:27
|
Revision: 119 http://roreditor.svn.sourceforge.net/roreditor/?rev=119&view=rev Author: rorthomas Date: 2007-07-23 08:18:26 -0700 (Mon, 23 Jul 2007) Log Message: ----------- * added @ to .bat files, so the python.exe call is not shown Modified Paths: -------------- trunk/checkmods.bat trunk/depchecker.bat trunk/modtool.bat trunk/rortoolkit.bat trunk/terraineditor.bat trunk/truckeditor.bat trunk/update.bat trunk/updaterestart.bat Modified: trunk/checkmods.bat =================================================================== --- trunk/checkmods.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/checkmods.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe checkmods.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe checkmods.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/depchecker.bat =================================================================== --- trunk/depchecker.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/depchecker.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe depchecker.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe depchecker.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/modtool.bat =================================================================== --- trunk/modtool.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/modtool.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe modtool.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe modtool.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/rortoolkit.bat =================================================================== --- trunk/rortoolkit.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/rortoolkit.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe rortoolkit.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe rortoolkit.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/terraineditor.bat =================================================================== --- trunk/terraineditor.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/terraineditor.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe terraineditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe terraineditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/truckeditor.bat =================================================================== --- trunk/truckeditor.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/truckeditor.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe truckeditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe truckeditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/update.bat =================================================================== --- trunk/update.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/update.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe update.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe update.py %1 %2 %3 %4 %5 %6 %7 %8 %9 Modified: trunk/updaterestart.bat =================================================================== --- trunk/updaterestart.bat 2007-07-23 15:15:08 UTC (rev 118) +++ trunk/updaterestart.bat 2007-07-23 15:18:26 UTC (rev 119) @@ -1 +1 @@ -%systemdrive%\python25\python.exe updaterestart.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +@%systemdrive%\python25\python.exe updaterestart.py %1 %2 %3 %4 %5 %6 %7 %8 %9 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 10:54:30
|
Revision: 124 http://roreditor.svn.sourceforge.net/roreditor/?rev=124&view=rev Author: rorthomas Date: 2007-07-27 03:54:28 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * added postinstall script: adds the installation path to the .bat files! * updated all .bat files Modified Paths: -------------- trunk/checkmods.bat trunk/depchecker.bat trunk/modtool.bat trunk/rortoolkit.bat trunk/terraineditor.bat trunk/truckeditor.bat trunk/update.bat trunk/updaterestart.bat Added Paths: ----------- trunk/postinstall.py Modified: trunk/checkmods.bat =================================================================== --- trunk/checkmods.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/checkmods.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe checkmods.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t checkmods +@%systemdrive%\python25\python.exe checkmods.py %* \ No newline at end of file Modified: trunk/depchecker.bat =================================================================== --- trunk/depchecker.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/depchecker.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe depchecker.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t depchecker +@%systemdrive%\python25\python.exe depchecker.py %* \ No newline at end of file Modified: trunk/modtool.bat =================================================================== --- trunk/modtool.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/modtool.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe modtool.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t modtool +@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Added: trunk/postinstall.py =================================================================== --- trunk/postinstall.py (rev 0) +++ trunk/postinstall.py 2007-07-27 10:54:28 UTC (rev 124) @@ -0,0 +1,34 @@ +import sys, os, os.path, subprocess + +def getBATFiles(): + batfiles = [] + dir = os.path.dirname(os.path.abspath(__file__)) + for filename in os.listdir(dir): + filenameonly, extension = os.path.splitext(filename) + if extension.lower() == ".bat": + batfiles.append(os.path.join(dir, filename)) + return batfiles + +def saveFile(filename, lines): + f = open(filename, 'w') + f.writelines(lines) + f.close() + +def addPath(filename, installpath): + basename = os.path.basename(filename) + filenameonly, extension = os.path.splitext(basename) + thispath = os.path.join(installpath, filenameonly+".py") + pythonpath = "%systemdrive%\python25\python.exe" + content = ["@%s %s %%*" % (pythonpath, thispath)] + saveFile(filename, content) + +def main(): + installpath = os.path.dirname(os.path.abspath(__file__)) + for batfile in getBATFiles(): + addPath(batfile, installpath) + print "Post-Installed all .bat files, please restart the program now!" + cmd = os.path.join(installpath, sys.argv[1]+".bat") + subprocess.Popen(cmd, shell = True) + +if __name__=="__main__": + main() Modified: trunk/rortoolkit.bat =================================================================== --- trunk/rortoolkit.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/rortoolkit.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe rortoolkit.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t rortoolkit +@%systemdrive%\python25\python.exe rortoolkit.py %* \ No newline at end of file Modified: trunk/terraineditor.bat =================================================================== --- trunk/terraineditor.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/terraineditor.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe terraineditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t terraineditor +@%systemdrive%\python25\python.exe terraineditor.py %* \ No newline at end of file Modified: trunk/truckeditor.bat =================================================================== --- trunk/truckeditor.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/truckeditor.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe truckeditor.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t truckeditor +@%systemdrive%\python25\python.exe truckeditor.py %* \ No newline at end of file Modified: trunk/update.bat =================================================================== --- trunk/update.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/update.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe update.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t update +@%systemdrive%\python25\python.exe update.py %* \ No newline at end of file Modified: trunk/updaterestart.bat =================================================================== --- trunk/updaterestart.bat 2007-07-27 10:19:14 UTC (rev 123) +++ trunk/updaterestart.bat 2007-07-27 10:54:28 UTC (rev 124) @@ -1 +1,2 @@ -@%systemdrive%\python25\python.exe updaterestart.py %1 %2 %3 %4 %5 %6 %7 %8 %9 +...@po...t updaterestart +@%systemdrive%\python25\python.exe updaterestart.py %* \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 10:56:04
|
Revision: 125 http://roreditor.svn.sourceforge.net/roreditor/?rev=125&view=rev Author: rorthomas Date: 2007-07-27 03:56:01 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * added missing file Modified Paths: -------------- trunk/ogre.cfg Added Paths: ----------- trunk/postinstall.bat Modified: trunk/ogre.cfg =================================================================== --- trunk/ogre.cfg 2007-07-27 10:54:28 UTC (rev 124) +++ trunk/ogre.cfg 2007-07-27 10:56:01 UTC (rev 125) @@ -1,10 +1,10 @@ -Render System=OpenGL Rendering Subsystem +Render System=Direct3D9 Rendering Subsystem -[OpenGL Rendering Subsystem] -Colour Depth=32 -Display Frequency=60 -FSAA=6 +[Direct3D9 Rendering Subsystem] +Allow NVPerfHUD=No +Anti aliasing=None +Floating-point mode=Fastest Full Screen=Yes -RTT Preferred Mode=PBuffer -VSync=Yes -Video Mode=1024 x 480 +Rendering Device=RADEON X850 Series +VSync=No +Video Mode=800 x 600 @ 32-bit colour Added: trunk/postinstall.bat =================================================================== --- trunk/postinstall.bat (rev 0) +++ trunk/postinstall.bat 2007-07-27 10:56:01 UTC (rev 125) @@ -0,0 +1 @@ +@%systemdrive%\python25\python.exe postinstall.py %* \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 12:08:45
|
Revision: 130 http://roreditor.svn.sourceforge.net/roreditor/?rev=130&view=rev Author: rorthomas Date: 2007-07-27 05:08:44 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * moved depchecker console handling * replaced all "print"'s with log().info()or log().error() Modified Paths: -------------- trunk/depchecker.py trunk/lib/ror/depchecker.py trunk/lib/ror/depcheckerplugins/deptools.py trunk/lib/ror/depcheckerplugins/ror_cfg.py trunk/lib/ror/depcheckerplugins/ror_material.py trunk/lib/ror/depcheckerplugins/ror_mesh.py trunk/lib/ror/depcheckerplugins/ror_terrn.py trunk/lib/ror/depcheckerplugins/ror_truck.py trunk/lib/ror/ogrelogger.py trunk/lib/ror/starter.py trunk/lib/ror/svn.py trunk/lib/ror/truckparser.py Modified: trunk/depchecker.py =================================================================== --- trunk/depchecker.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/depchecker.py 2007-07-27 12:08:44 UTC (rev 130) @@ -1,6 +1,18 @@ #Thomas Fischer 31/05/2007, th...@th... import sys, os, os.path +def usage(): + print "usage: %s <path to inspect> <all or unused or missing>" % os.path.basename(sys.argv[0]) + print "for example: %s c:\\ror\\data missing" % os.path.basename(sys.argv[0]) + print " valid modes:" + print " 'all' displays all dependencies, inclusive fulfilled ones" + print " 'missing' displays only unfulfilled dependencies" + print " 'unused' displays resources that are not in use" + print " 'dtree <resourcename>' displays the dependency tree of the given resource name" + print " 'md5sum' creates the md5sums of all files" + sys.exit(0) + + def main(): """ main method @@ -20,9 +32,25 @@ except ImportError: pass + if len(sys.argv) < 3: + usage() + path = sys.argv[1] + if path.strip() == "rordir": + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isdir(path): + print "%s is not a valid directory!" % path + usage() + if (len(sys.argv) == 3 and sys.argv[2] in ['all', 'missing', 'unused', 'record']) or (len(sys.argv) == 4 and sys.argv[2] in ['dtree']): + pass + else: + print "%s is not a valid mode, or incorrect arguments!" % sys.argv[2] + usage() + import ror.depchecker - ror.depchecker.main() - + dependfilename = "" + if len(sys.argv) == 4 and sys.argv[2] in ['dtree'] and sys.argv[3].strip() != "": + dependfilename = sys.argv[3].strip() + ror.depchecker.RoRDepChecker(path , sys.argv[2], dependfilename) if __name__=="__main__": main() \ No newline at end of file Modified: trunk/lib/ror/depchecker.py =================================================================== --- trunk/lib/ror/depchecker.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depchecker.py 2007-07-27 12:08:44 UTC (rev 130) @@ -412,37 +412,3 @@ else: log().info("### all files used") -def usage(): - print "usage: %s <path to inspect> <all or unused or missing>" % os.path.basename(sys.argv[0]) - print "for example: %s c:\\ror\\data missing" % os.path.basename(sys.argv[0]) - print " valid modes:" - print " 'all' displays all dependencies, inclusive fulfilled ones" - print " 'missing' displays only unfulfilled dependencies" - print " 'unused' displays resources that are not in use" - print " 'dtree <resourcename>' displays the dependency tree of the given resource name" - print " 'md5sum' creates the md5sums of all files" - sys.exit(0) - -def main(): - import settingsManager - if len(sys.argv) < 3: - usage() - path = sys.argv[1] - if path.strip() == "rordir": - path = settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isdir(path): - print "%s is not a valid directory!" % path - usage() - if (len(sys.argv) == 3 and sys.argv[2] in ['all', 'missing', 'unused', 'record']) or (len(sys.argv) == 4 and sys.argv[2] in ['dtree']): - pass - else: - print "%s is not a valid mode, or incorrect arguments!" % sys.argv[2] - usage() - - dependfilename = "" - if len(sys.argv) == 4 and sys.argv[2] in ['dtree'] and sys.argv[3].strip() != "": - dependfilename = sys.argv[3].strip() - RoRDepChecker(path , sys.argv[2], dependfilename) - -if __name__ == "__main__": - main() Modified: trunk/lib/ror/depcheckerplugins/deptools.py =================================================================== --- trunk/lib/ror/depcheckerplugins/deptools.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/deptools.py 2007-07-27 12:08:44 UTC (rev 130) @@ -1,6 +1,11 @@ #Thomas Fischer 06/07/2007, th...@th... import sys, os, os.path +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..")) + +from ror.logger import log +from ror.settingsManager import getSettingsManager + REQUIRES = 'requires' OPTIONAL = 'optional' PROVIDES = 'provides' Modified: trunk/lib/ror/depcheckerplugins/ror_cfg.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_cfg.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/ror_cfg.py 2007-07-27 12:08:44 UTC (rev 130) @@ -36,10 +36,10 @@ if not tmp is None: dep.append(tmp) else: - print "ERROR !!! required value not found in terrain config file %s!" % filename + log().error("ERROR !!! required value not found in terrain config file %s!" % filename) if len(dep) == 0: - print "no configuration found in terrain config file " + filename + log().info("no configuration found in terrain config file " + filename) else: return { OPTIONAL:{ Modified: trunk/lib/ror/depcheckerplugins/ror_material.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_material.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/ror_material.py 2007-07-27 12:08:44 UTC (rev 130) @@ -29,7 +29,7 @@ #print "no texture found in material file " + filename pass if len(prov) == 0: - print "no material found in material file " + filename + log().info("no material found in material file " + filename) else: return { OPTIONAL:{ Modified: trunk/lib/ror/depcheckerplugins/ror_mesh.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_mesh.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/ror_mesh.py 2007-07-27 12:08:44 UTC (rev 130) @@ -16,14 +16,13 @@ def convertToXML(filename): # try to convert to .msh.xml first! cmd = CONVERTERBIN + " \"" + filename+"\"" - print "calling " + cmd + log().info("calling " + cmd) p = subprocess.Popen(cmd, shell = False, cwd = os.path.dirname(CONVERTERBIN), stderr = subprocess.PIPE, stdout = subprocess.PIPE) smart_wait_for_subprocess(p, 10) if not os.path.isfile(os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml")): - print "conversion of mesh file %s failed!" % filename - - print "mesh converted: " + filename + log().error("conversion of mesh file %s failed!" % filename) + log().info("mesh converted: " + filename) def smart_wait_for_subprocess(sp,timeout=30): """ @@ -89,12 +88,12 @@ convertToXML(filename) try: content = readFile(xmlfilename) - except Exception, e: - print e + except Exception, err: + log().error(str(err)) return dep = parseRE(content) if len(dep) == 0: - print "no material found for file " + filename + log().info("no material found for file " + filename) else: return { OPTIONAL:{ Modified: trunk/lib/ror/depcheckerplugins/ror_terrn.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_terrn.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/ror_terrn.py 2007-07-27 12:08:44 UTC (rev 130) @@ -62,7 +62,7 @@ terrnname, ext = os.path.splitext(os.path.basename(filename)) if len(dep) == 0: - print "no objects found in terrain file " + filename + log().error("no objects found in terrain file " + filename) else: return { OPTIONAL:{ Modified: trunk/lib/ror/depcheckerplugins/ror_truck.py =================================================================== --- trunk/lib/ror/depcheckerplugins/ror_truck.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/depcheckerplugins/ror_truck.py 2007-07-27 12:08:44 UTC (rev 130) @@ -6,7 +6,7 @@ p = rorparser() p.parse(filename, verbose=False) if not 'globals' in p.tree.keys(): - print "truck parsing error on file " + filename + log().error("truck parsing error on file " + filename) truckfilename = os.path.basename(filename) truckname, ext = os.path.splitext(truckfilename) matname = p.tree['globals'][0]['data'][2] Modified: trunk/lib/ror/ogrelogger.py =================================================================== --- trunk/lib/ror/ogrelogger.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/ogrelogger.py 2007-07-27 12:08:44 UTC (rev 130) @@ -8,8 +8,9 @@ def messageLogged(self, message, level, debug, logName): # This should be called by Ogre instead of logging - print 'Python Logger Called -- Listener works !!!' - print ">>>", message + #print 'Python Logger Called -- Listener works !!!' + #print ">>>", message + pass def initOgreLogging(): # Create the global log manager instance Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/starter.py 2007-07-27 12:08:44 UTC (rev 130) @@ -25,7 +25,7 @@ jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap() wx.StaticBitmap(self, wx.ID_ANY, jpg1, (0, 0), (jpg1.GetWidth(), jpg1.GetHeight())) except IOError: - print "Image file %s not found" % imageFile + log().error("Image file %s not found" % imageFile) raise SystemExit @@ -128,7 +128,7 @@ import ror.depchecker ror.depchecker.RoRDepChecker(self.rordir, "all", "") file = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..\\..\\graphs\\alldependencies.png")) - print file + #print file if os.path.isfile(file): dlg = wx.MessageDialog(self, "Graph successfully created:\n"+file, "Info", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() Modified: trunk/lib/ror/svn.py =================================================================== --- trunk/lib/ror/svn.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/svn.py 2007-07-27 12:08:44 UTC (rev 130) @@ -23,7 +23,7 @@ global changes changes += 1 #print event_dict - print str(event_dict['action']) + ", " + event_dict['path'] + log().info(str(event_dict['action']) + ", " + event_dict['path']) def getRevision(client=None, path=None): if client is None: @@ -46,7 +46,7 @@ strict_node_history=True, limit=0) for e in log: - print "--- r%d, author: %s:\n%s\n" %(e['revision'].number, e['author'], e['message']) + log().info("--- r%d, author: %s:\n%s\n" %(e['revision'].number, e['author'], e['message'])) if len(log) > 0: return True except: @@ -65,11 +65,11 @@ limit=0) def showLog(client, startrev, endrev): - print "------------------------------------" - print "Changelog from revision %d to revision %d\n" % (startrev, endrev) + log().info("------------------------------------") + log().info("Changelog from revision %d to revision %d\n" % (startrev, endrev)) log = getLog(client, startrev, endrev) for e in log: - print "--- r%d, author: %s:\n%s\n" %(e['revision'].number, e['author'], e['message']) + log().info("--- r%d, author: %s:\n%s\n" %(e['revision'].number, e['author'], e['message'])) def svnupdate(callback = None): global changes @@ -86,7 +86,7 @@ pass revision_before = getRevision(client, path) - print "updating from revision %d ..." % revision_before + log().info("updating from revision %d ..." % revision_before) if callback is None: client.callback_notify = notify else: @@ -97,21 +97,21 @@ revision = pysvn.Revision(pysvn.opt_revision_kind.head), ignore_externals = False) revision_after = getRevision(client, path) - print "updated to revision %d." % revision_after + log().info("updated to revision %d." % revision_after) if revision_before == revision_after and changes == 2: - print "already up to date!" + log().info("already up to date!") elif changes > 2: if revision_before != revision_after: - print "updated! please restart the application!" + log().info("updated! please restart the application!") showLog(client, revision_before + 1, revision_after) else: - print "no files updated, but restored! please restart the application!" + log().info("no files updated, but restored! please restart the application!") except Exception, inst: - print "error while updating: " + str(inst) - print "done." + log().error( "error while updating: " + str(inst)) + log().error("done.") def svncheckout(): - print "checkout" + log().info("checkout") path = getRootPath() changes = 0 try: @@ -119,7 +119,7 @@ client.callback_notify = notify client.checkout(URL, path) except: - print "error while checkout!" + log().error("error while checkout!") def createBackup(): import shutil Modified: trunk/lib/ror/truckparser.py =================================================================== --- trunk/lib/ror/truckparser.py 2007-07-27 11:38:05 UTC (rev 129) +++ trunk/lib/ror/truckparser.py 2007-07-27 12:08:44 UTC (rev 130) @@ -1,10 +1,13 @@ #!/bin/env python # Thomas Fischer 16/05/2007 thomas (at) thomasfischer.biz import sys, os, os.path, tempfile, pickle - ## default values: required:True - ## please note: unkown args are marked with 'WHAT IS THIS' +from ror.logger import log +from ror.settingsManager import getSettingsManager + + # default values: required:True + # please note: unkown args are marked with 'WHAT IS THIS' class rorparser: - ### This specifies all valid commands + # This specifies all valid commands commands = { # set_beam_defaults changes the beams (but also the hydros and ropes) default characteristics that will be used for the beams declared after the line. You can use this line many times to make different groups of beams that have different characteristics (e.g. stronger chassis, softer cab, etc.). This method is better than the globeams command that is now deprecated. The parameters comes on the same line, after set_beam_defaults. You can use the first parameters (most usefull) and safely ignore the last parameters. 'set_beam_defaults':[ @@ -605,7 +608,7 @@ line = content[lineno] # strip line-endings line = line.strip() - #print lineno, line + #log.info(lineno+","+ line) if line.strip() == "": # add blank lines to comments self.addComment(actualsection, line, lineno, False) @@ -741,14 +744,15 @@ def save(self): #(fid, filename) = tempfile.mkstemp(suffix='.RoRObject') filename = self.filename + "_pickle" - print "trying to save Settings to file %s for file %s" % (filename, os.path.basename(self.filename)) + log().info("trying to save Settings to file %s for file %s" % (filename, os.path.basename(self.filename))) try: fh = open(filename, 'w') pickle.dump(self.tree, fh) fh.close() - print "saving successfull!" - except: - print "error while saving settings" + log().info("saving successfull!") + except Exception, err: + log().error("error while saving settings") + log().error(str(err)) def isFloat(self, s): @@ -759,32 +763,34 @@ return i def printtree(self): + rstr = "" for s in self.tree.keys(): if len(self.tree[s]) == 0: continue - print "" - print "===========================================================================================================================================================================" - print "%s: %d" % (s, len(self.tree[s])) + rstr += "\n" + rstr += "===========================================================================================================================================================================\n" + rstr += "%s: %d\n" % (s, len(self.tree[s])) # for non original columns (generated ones) if not self.sections.has_key(s): - print self.tree[s] + rstr += self.tree[s] continue for column in self.sections[s]: - sys.stdout.write("| %-15s" % (column['name'][0:15])) - sys.stdout.write("\n") - print "---------------------------------------------------------------------------------------------------------------------------------------------------------------------------" + rstr += "| %-15s" % (column['name'][0:15]) + rstr += "\n" + rstr += "---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n" for line in self.tree[s]: for arg in line['data']: try: if arg.isdigit() or self.isFloat(arg): - sys.stdout.write("|%15.3f " % (round(float(arg),4))) + rstr += "|%15.3f " % (round(float(arg),4)) else: - sys.stdout.write("|%15s " % (str(arg)[0:15])) + rstr += "|%15s " % (str(arg)[0:15]) except: - sys.stdout.write("|%15s " % (str(arg)[0:15])) + rstr += "|%15s " % (str(arg)[0:15]) if 'errors' in line.keys(): - sys.stdout.write("[ERRORS: %d] "%(len(line['errors']))) - sys.stdout.write("(origin: %d)\n"%(line['originline'])) + rstr += "[ERRORS: %d] "%(len(line['errors'])) + rstr += "(origin: %d)\n"%(line['originline']) + log().info(rstr) def getLine(self, lineno): for skey in self.tree.keys(): @@ -820,8 +826,8 @@ result.append(data) n = self.getnextLine(n['originline']) - for r in result: - print r + #for r in result: + # print r def getnextLine(self, lineno): value = {'originline':9999999999} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 13:01:37
|
Revision: 134 http://roreditor.svn.sourceforge.net/roreditor/?rev=134&view=rev Author: rorthomas Date: 2007-07-27 06:01:34 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * removed main.bat files * moved modtool to tools * moved terraineditor readme Modified Paths: -------------- trunk/lib/rorterraineditor/HelpFrame.py trunk/tools/postinstall.py Added Paths: ----------- trunk/lib/rorterraineditor/terrainreadme.txt trunk/tools/modtool.bat trunk/tools/modtool.py Removed Paths: ------------- trunk/modtool.bat trunk/modtool.py trunk/rortoolkit.bat trunk/terraineditor.bat trunk/terrainreadme.txt trunk/truckeditor.bat Modified: trunk/lib/rorterraineditor/HelpFrame.py =================================================================== --- trunk/lib/rorterraineditor/HelpFrame.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/lib/rorterraineditor/HelpFrame.py 2007-07-27 13:01:34 UTC (rev 134) @@ -8,7 +8,7 @@ self.btnExit = wx.Button(self, wx.ID_ANY, "OK") self.Bind(wx.EVT_BUTTON, self.onExit , self.btnExit) self.__do_layout() - self.filename = "terrainreadme.txt" + self.filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainreadme.txt") self.LoadHelp() def LoadHelp(self): Added: trunk/lib/rorterraineditor/terrainreadme.txt =================================================================== --- trunk/lib/rorterraineditor/terrainreadme.txt (rev 0) +++ trunk/lib/rorterraineditor/terrainreadme.txt 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,41 @@ +============================================================ +Short Introduction / Help +============================================================ +A move left +D move right +W move foreward +S move backward +PAGEUP move up +PAGEDOWN move down +SHIFT + above keys = faster movement + + +Mousewheel in Main Viewport: zoom in/out (like forward/backward) +Mousewheel int objects view lower viewport: zoom in/out + + +drag: rightklick: look around +drag: control + rightclick move to the side and up and down +if selected an object: control + leftclick positions that object at the pointed terrain + + +P print position of the camera to the console +Q switch between object rotation and translation + (Please note, that trucks and loads cannot be rotated) +T switch between bilinear and trilinear filtering +R switch between solid, wireframe and point mode + +History Functions: +F undo last movement/rotation +G redo last undo + +============================================================ +How To Add Things +============================================================ +1. select a place on the terrain with leftclick, a red circle should appear. +2. add a truck or mesh using the "Add" menu. + +============================================================ +Tips and Tricks +============================================================ +* If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file Deleted: trunk/modtool.bat =================================================================== --- trunk/modtool.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/modtool.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -...@po...t modtool -@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Deleted: trunk/modtool.py =================================================================== --- trunk/modtool.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/modtool.py 2007-07-27 13:01:34 UTC (rev 134) @@ -1,86 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -import sys, os, os.path, shutil - -sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - -def usage(): - print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) - print "list <filename>" - print " list all found and valid modifications in filename" - print "" - print "listall <filename> --verbose" - print " list all found modifications in filename (valid and invalid)" - print "" - print "installall <filename> --verbose --dryrun" - print " install all found modifications in filename" - print "" - print "installrepo <filename> --verbose --dryrun" - print " install all found modifications in filename that is downloaded from the repository" - print "" - print "install <filename> <modification> --verbose --dryrun" - print " install a certain modifications in filename (valid and invalid)" - print "" - print "listinstalled" - print " lists all installed RoR Mods" - print "" - print "uninstall <modname> --verbose --dryrun" - print " uninstalls a mod" - print "" - print "notes: the --verbose option is optional to increase the output for debugging" - print " the --dryrun option is optional and prints out what would be done" - sys.exit(0) - -def main(): - # check for valid RoR Directory! - import ror.settingsManager - rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): - import ror.starter - ror.starter.startApp() - - if len(sys.argv) < 2: - usage() - - mode = sys.argv[1] - if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: - usage() - if len(sys.argv) < 4 and mode in ['install']: - usage() - - if mode in ['list', 'listall', 'install', 'installall']: - targetfile = sys.argv[2] - if not os.path.isfile(targetfile): - log().error("%s is not a valid target filename!" % targetfile) - usage() - elif mode in ['listinstalled']: - targetfile = rorpath - elif mode in ['installrepo']: - targetfile = sys.argv[2] - elif mode == 'uninstall': - targetfile = sys.argv[2] - - # get optional flags - verbose = False - dryrun = False - for option in sys.argv: - if option == "--verbose": - verbose = True - if option == "--dryrun": - dryrun = True - - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - - if len(sys.argv) == 4: - installtarget = sys.argv[3] - else: - installtarget = None - import ror.modtool - ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) - -if __name__=="__main__": - main() Deleted: trunk/rortoolkit.bat =================================================================== --- trunk/rortoolkit.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/rortoolkit.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -@tools\postinstall.bat rortoolkit -@%systemdrive%\python25\pythonw.exe rortoolkit.pyw %* \ No newline at end of file Deleted: trunk/terraineditor.bat =================================================================== --- trunk/terraineditor.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/terraineditor.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -...@po...t terraineditor -@%systemdrive%\python25\pythonw.exe terraineditor.pyw %* \ No newline at end of file Deleted: trunk/terrainreadme.txt =================================================================== --- trunk/terrainreadme.txt 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/terrainreadme.txt 2007-07-27 13:01:34 UTC (rev 134) @@ -1,41 +0,0 @@ -============================================================ -Short Introduction / Help -============================================================ -A move left -D move right -W move foreward -S move backward -PAGEUP move up -PAGEDOWN move down -SHIFT + above keys = faster movement - - -Mousewheel in Main Viewport: zoom in/out (like forward/backward) -Mousewheel int objects view lower viewport: zoom in/out - - -drag: rightklick: look around -drag: control + rightclick move to the side and up and down -if selected an object: control + leftclick positions that object at the pointed terrain - - -P print position of the camera to the console -Q switch between object rotation and translation - (Please note, that trucks and loads cannot be rotated) -T switch between bilinear and trilinear filtering -R switch between solid, wireframe and point mode - -History Functions: -F undo last movement/rotation -G redo last undo - -============================================================ -How To Add Things -============================================================ -1. select a place on the terrain with leftclick, a red circle should appear. -2. add a truck or mesh using the "Add" menu. - -============================================================ -Tips and Tricks -============================================================ -* If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file Added: trunk/tools/modtool.bat =================================================================== --- trunk/tools/modtool.bat (rev 0) +++ trunk/tools/modtool.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,2 @@ +...@po...t modtool +@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Added: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py (rev 0) +++ trunk/tools/modtool.py 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,86 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path, shutil + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) + +def usage(): + print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) + print "list <filename>" + print " list all found and valid modifications in filename" + print "" + print "listall <filename> --verbose" + print " list all found modifications in filename (valid and invalid)" + print "" + print "installall <filename> --verbose --dryrun" + print " install all found modifications in filename" + print "" + print "installrepo <filename> --verbose --dryrun" + print " install all found modifications in filename that is downloaded from the repository" + print "" + print "install <filename> <modification> --verbose --dryrun" + print " install a certain modifications in filename (valid and invalid)" + print "" + print "listinstalled" + print " lists all installed RoR Mods" + print "" + print "uninstall <modname> --verbose --dryrun" + print " uninstalls a mod" + print "" + print "notes: the --verbose option is optional to increase the output for debugging" + print " the --dryrun option is optional and prints out what would be done" + sys.exit(0) + +def main(): + # check for valid RoR Directory! + import ror.settingsManager + rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + if len(sys.argv) < 2: + usage() + + mode = sys.argv[1] + if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: + usage() + if len(sys.argv) < 4 and mode in ['install']: + usage() + + if mode in ['list', 'listall', 'install', 'installall']: + targetfile = sys.argv[2] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + elif mode in ['listinstalled']: + targetfile = rorpath + elif mode in ['installrepo']: + targetfile = sys.argv[2] + elif mode == 'uninstall': + targetfile = sys.argv[2] + + # get optional flags + verbose = False + dryrun = False + for option in sys.argv: + if option == "--verbose": + verbose = True + if option == "--dryrun": + dryrun = True + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + if len(sys.argv) == 4: + installtarget = sys.argv[3] + else: + installtarget = None + import ror.modtool + ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) + +if __name__=="__main__": + main() Modified: trunk/tools/postinstall.py =================================================================== --- trunk/tools/postinstall.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/tools/postinstall.py 2007-07-27 13:01:34 UTC (rev 134) @@ -17,10 +17,14 @@ def addPath(filename, installpath): basename = os.path.basename(filename) filenameonly, extension = os.path.splitext(basename) + + # with console thispath = os.path.join(installpath, filenameonly+".py") + pythonpath = "%systemdrive%\python25\python.exe" if not os.path.isfile(thispath): + # without console thispath = os.path.join(installpath, filenameonly+".pyw") - pythonpath = "%systemdrive%\python25\pythonw.exe" + pythonpath = "%systemdrive%\python25\pythonw.exe" content = ["@%s %s %%*" % (pythonpath, thispath)] saveFile(filename, content) Deleted: trunk/truckeditor.bat =================================================================== --- trunk/truckeditor.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/truckeditor.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -@tools\postinstall.bat truckeditor -@%systemdrive%\python25\pythonw.exe truckeditor.pyw %* \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 19:10:12
|
Revision: 137 http://roreditor.svn.sourceforge.net/roreditor/?rev=137&view=rev Author: rorthomas Date: 2007-07-27 12:10:06 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * improved svn script Modified Paths: -------------- trunk/devtools/setup/setup.nsi trunk/lib/ror/svn.py Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 18:27:37 UTC (rev 136) +++ trunk/devtools/setup/setup.nsi 2007-07-27 19:10:06 UTC (rev 137) @@ -55,7 +55,7 @@ !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_NOTCHECKED +;!define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_RUN_TEXT "Update and start (Can take some time)" !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchPostInstallation" !insertmacro MUI_PAGE_FINISH @@ -78,6 +78,9 @@ ; Reserve files !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS +InstType /NOCUSTOM +InstType "full" +InstType "minimal" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" @@ -87,7 +90,6 @@ ShowInstDetails show ShowUnInstDetails show - Var /GLOBAL PYOK Var /GLOBAL PYPATH Var /GLOBAL PYINSTALLED @@ -188,13 +190,13 @@ Banner::destroy FunctionEnd -Function InstallRoRRepoReg +Function ChangeRoRRepoReg Banner::show /NOUNLOAD "Updating RoR Repository Protocol Extensions ..." WriteRegStr HKCR "RoRRepo" "" "URL:RoRRepo Protocol" WriteRegStr HKCR "RoRRepo" "URL Protocol" "" WriteRegStr HKCR "RoRRepo\shell" "" "" WriteRegStr HKCR "RoRRepo\shell\open" "" "" - WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTPATH' 'installrepo' '%1'" + WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTDIR' 'installrepo' '%1'" Banner::destroy FunctionEnd @@ -207,24 +209,38 @@ !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd -Section "Install Python" SEC01 +Section "-Install Python" SEC01 + SectionIn 1 2 RO Call CheckForPython SectionEnd -Section "Install Tools" SEC02 +Section "Required Tools" SEC02 + SectionIn 1 2 RO Call InstallDirectX +SectionEnd + +Section /o "Optional Tools" SEC03 + SectionIn 1 Call InstallPyWin32 Call InstallPyParsing Call InstallGraphViz - Call ChangeRoRRepoReg SectionEnd -Section "Full Installation" SEC03 +Section "!RoR Toolkit" SEC04 + SectionIn 1 2 RO SetOutPath "$INSTDIR" SetOverwrite try - File /r /x *.pyc /x .svn /x ..\..\tools\3rdparty /x ..\devtools ..\..\* + File /r /x *.pyc /x ..\..\tools\3rdparty /x ..\..\downloaded /x ..\..\graphs /x .. ..\..\* SectionEnd + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "installs python 2.5" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "installs required Tools (directX)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "installs optional Tools (PyWin32 for bugreporting, PyParsing and GraphViz for Dependency Graphs)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "installs the RoR Toolkit. It includes the Truckeditor, Terraineditor and various tools" +!insertmacro MUI_FUNCTION_DESCRIPTION_END + Function "LaunchPostInstallation" ExecWait '"$INSTDIR\update.bat"' ExecWait '"$INSTDIR\rortoolkit.bat"' @@ -241,6 +257,7 @@ SectionEnd Section -Post + Call ChangeRoRRepoReg WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" @@ -273,147 +290,3 @@ DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose false SectionEnd - -# tools following: -Function AdvReplaceInFile -Exch $0 ;file to replace in -Exch -Exch $1 ;number to replace after -Exch -Exch 2 -Exch $2 ;replace and onwards -Exch 2 -Exch 3 -Exch $3 ;replace with -Exch 3 -Exch 4 -Exch $4 ;to replace -Exch 4 -Push $5 ;minus count -Push $6 ;universal -Push $7 ;end string -Push $8 ;left string -Push $9 ;right string -Push $R0 ;file1 -Push $R1 ;file2 -Push $R2 ;read -Push $R3 ;universal -Push $R4 ;count (onwards) -Push $R5 ;count (after) -Push $R6 ;temp file name - - GetTempFileName $R6 - FileOpen $R1 $0 r ;file to search in - FileOpen $R0 $R6 w ;temp file - StrLen $R3 $4 - StrCpy $R4 -1 - StrCpy $R5 -1 - -loop_read: - ClearErrors - FileRead $R1 $R2 ;read line - IfErrors exit - - StrCpy $5 0 - StrCpy $7 $R2 - -loop_filter: - IntOp $5 $5 - 1 - StrCpy $6 $7 $R3 $5 ;search - StrCmp $6 "" file_write2 - StrCmp $6 $4 0 loop_filter - -StrCpy $8 $7 $5 ;left part -IntOp $6 $5 + $R3 -IntCmp $6 0 is0 not0 -is0: -StrCpy $9 "" -Goto done -not0: -StrCpy $9 $7 "" $6 ;right part -done: -StrCpy $7 $8$3$9 ;re-join - -IntOp $R4 $R4 + 1 -StrCmp $2 all file_write1 -StrCmp $R4 $2 0 file_write2 -IntOp $R4 $R4 - 1 - -IntOp $R5 $R5 + 1 -StrCmp $1 all file_write1 -StrCmp $R5 $1 0 file_write1 -IntOp $R5 $R5 - 1 -Goto file_write2 - -file_write1: - FileWrite $R0 $7 ;write modified line -Goto loop_read - -file_write2: - FileWrite $R0 $R2 ;write unmodified line -Goto loop_read - -exit: - FileClose $R0 - FileClose $R1 - - SetDetailsPrint none - Delete $0 - Rename $R6 $0 - Delete $R6 - SetDetailsPrint both - -Pop $R6 -Pop $R5 -Pop $R4 -Pop $R3 -Pop $R2 -Pop $R1 -Pop $R0 -Pop $9 -Pop $8 -Pop $7 -Pop $6 -Pop $5 -Pop $0 -Pop $1 -Pop $2 -Pop $3 -Pop $4 -FunctionEnd - - -Function StrRep - Exch $R4 ; $R4 = Replacement String - Exch - Exch $R3 ; $R3 = String to replace (needle) - Exch 2 - Exch $R1 ; $R1 = String to do replacement in (haystack) - Push $R2 ; Replaced haystack - Push $R5 ; Len (needle) - Push $R6 ; len (haystack) - Push $R7 ; Scratch reg - StrCpy $R2 "" - StrLen $R5 $R3 - StrLen $R6 $R1 -loop: - StrCpy $R7 $R1 $R5 - StrCmp $R7 $R3 found - StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 - StrCpy $R2 "$R2$R7" - StrCpy $R1 $R1 $R6 1 - StrCmp $R1 "" done loop -found: - StrCpy $R2 "$R2$R4" - StrCpy $R1 $R1 $R6 $R5 - StrCmp $R1 "" done loop -done: - StrCpy $R3 $R2 - Pop $R7 - Pop $R6 - Pop $R5 - Pop $R2 - Pop $R1 - Pop $R4 - Exch $R3 -FunctionEnd \ No newline at end of file Modified: trunk/lib/ror/svn.py =================================================================== --- trunk/lib/ror/svn.py 2007-07-27 18:27:37 UTC (rev 136) +++ trunk/lib/ror/svn.py 2007-07-27 19:10:06 UTC (rev 137) @@ -80,10 +80,25 @@ # try to restore previous broken updates try: - client.unlock(path) client.cleanup(path) - except: + except Exception, err: + log().error("Error while svn cleanup:") + log().error(str(err)) pass + + try: + client.resolved(path, reverse=True) + except Exception, err: + log().error("Error while svn resolved:") + log().error(str(err)) + pass + + try: + client.unlock(path) + except Exception, err: + log().error("Error while svn unlock:") + log().error(str(err)) + pass revision_before = getRevision(client, path) log().info("updating from revision %d ..." % revision_before) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |