X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=contrib%2Fbobtoolz%2FDBobView.cpp;h=decfe7790664dbd3dd4654d2907177aac1323205;hp=688dd7e43594cb5e058ae4c461628478537b4240;hb=cd6613e5171544b68d4ae70546c90a15c99b22a5;hpb=107765f0e4b543dfc346851ee5b4605cc17eb1c6 diff --git a/contrib/bobtoolz/DBobView.cpp b/contrib/bobtoolz/DBobView.cpp index 688dd7e4..decfe779 100644 --- a/contrib/bobtoolz/DBobView.cpp +++ b/contrib/bobtoolz/DBobView.cpp @@ -1,21 +1,21 @@ /* -BobToolz plugin for GtkRadiant -Copyright (C) 2001 Gordon Biggans + BobToolz plugin for GtkRadiant + Copyright (C) 2001 Gordon Biggans -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ // BobView.cpp: implementation of the DBobView class. // @@ -41,25 +41,24 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DBobView::DBobView() -{ +DBobView::DBobView(){ nPathCount = 0; - + path = NULL; boundingShow = BOUNDS_APEX; - constructShaders(); - GlobalShaderCache().attachRenderable(*this); + constructShaders(); + GlobalShaderCache().attachRenderable( *this ); } -DBobView::~DBobView() -{ - GlobalShaderCache().detachRenderable(*this); - destroyShaders(); +DBobView::~DBobView(){ + GlobalShaderCache().detachRenderable( *this ); + destroyShaders(); - if(path) + if ( path ) { delete[] path; + } g_PathView = NULL; } @@ -68,12 +67,11 @@ DBobView::~DBobView() // Implementation ////////////////////////////////////////////////////////////////////// -void DBobView::render(RenderStateFlags state) const -{ - glBegin(GL_LINE_STRIP); +void DBobView::render( RenderStateFlags state ) const { + glBegin( GL_LINE_STRIP ); - for(int i = 0; i < nPathCount; i++) - glVertex3fv(path[i]); + for ( int i = 0; i < nPathCount; i++ ) + glVertex3fv( path[i] ); glEnd(); } @@ -81,107 +79,101 @@ void DBobView::render(RenderStateFlags state) const const char* DBobView_state_line = "$bobtoolz/bobview/line"; const char* DBobView_state_box = "$bobtoolz/bobview/box"; -void DBobView::constructShaders() -{ - OpenGLState state; - GlobalOpenGLStateLibrary().getDefaultState(state); - state.m_state = RENDER_COLOURWRITE|RENDER_DEPTHWRITE|RENDER_BLEND|RENDER_LINESMOOTH; - state.m_sort = OpenGLState::eSortOpaque; - state.m_linewidth = 1; - state.m_colour[0] = 1; - state.m_colour[1] = 0; - state.m_colour[2] = 0; - state.m_colour[3] = 1; - GlobalOpenGLStateLibrary().insert(DBobView_state_line, state); - - state.m_colour[0] = 0.25f; - state.m_colour[1] = 0.75f; - state.m_colour[2] = 0.75f; - state.m_colour[3] = 1; - GlobalOpenGLStateLibrary().insert(DBobView_state_box, state); - - m_shader_line = GlobalShaderCache().capture(DBobView_state_line); - m_shader_box = GlobalShaderCache().capture(DBobView_state_box); +void DBobView::constructShaders(){ + OpenGLState state; + GlobalOpenGLStateLibrary().getDefaultState( state ); + state.m_state = RENDER_COLOURWRITE | RENDER_DEPTHWRITE | RENDER_BLEND | RENDER_LINESMOOTH; + state.m_sort = OpenGLState::eSortOpaque; + state.m_linewidth = 1; + state.m_colour[0] = 1; + state.m_colour[1] = 0; + state.m_colour[2] = 0; + state.m_colour[3] = 1; + GlobalOpenGLStateLibrary().insert( DBobView_state_line, state ); + + state.m_colour[0] = 0.25f; + state.m_colour[1] = 0.75f; + state.m_colour[2] = 0.75f; + state.m_colour[3] = 1; + GlobalOpenGLStateLibrary().insert( DBobView_state_box, state ); + + m_shader_line = GlobalShaderCache().capture( DBobView_state_line ); + m_shader_box = GlobalShaderCache().capture( DBobView_state_box ); } -void DBobView::destroyShaders() -{ - GlobalOpenGLStateLibrary().erase(DBobView_state_line); - GlobalOpenGLStateLibrary().erase(DBobView_state_box); - GlobalShaderCache().release(DBobView_state_line); - GlobalShaderCache().release(DBobView_state_box); +void DBobView::destroyShaders(){ + GlobalOpenGLStateLibrary().erase( DBobView_state_line ); + GlobalOpenGLStateLibrary().erase( DBobView_state_box ); + GlobalShaderCache().release( DBobView_state_line ); + GlobalShaderCache().release( DBobView_state_box ); } -Matrix4 g_transform_box1 = matrix4_translation_for_vec3(Vector3(16.0f, 16.0f, 28.0f)); -Matrix4 g_transform_box2 = matrix4_translation_for_vec3(Vector3(-16.0f, 16.0f, 28.0f)); -Matrix4 g_transform_box3 = matrix4_translation_for_vec3(Vector3(16.0f, -16.0f, -28.0f)); -Matrix4 g_transform_box4 = matrix4_translation_for_vec3(Vector3(-16.0f, -16.0f, -28.0f)); +Matrix4 g_transform_box1 = matrix4_translation_for_vec3( Vector3( 16.0f, 16.0f, 28.0f ) ); +Matrix4 g_transform_box2 = matrix4_translation_for_vec3( Vector3( -16.0f, 16.0f, 28.0f ) ); +Matrix4 g_transform_box3 = matrix4_translation_for_vec3( Vector3( 16.0f, -16.0f, -28.0f ) ); +Matrix4 g_transform_box4 = matrix4_translation_for_vec3( Vector3( -16.0f, -16.0f, -28.0f ) ); -void DBobView::renderSolid(Renderer& renderer, const VolumeTest& volume) const -{ - if(!path) +void DBobView::renderSolid( Renderer& renderer, const VolumeTest& volume ) const { + if ( !path ) { return; + } - renderer.SetState(m_shader_line, Renderer::eWireframeOnly); - renderer.SetState(m_shader_line, Renderer::eFullMaterials); - renderer.addRenderable(*this, g_matrix4_identity); - - if(m_bShowExtra) - { - renderer.SetState(m_shader_box, Renderer::eWireframeOnly); - renderer.SetState(m_shader_box, Renderer::eFullMaterials); - renderer.addRenderable(*this, g_transform_box1); - renderer.addRenderable(*this, g_transform_box2); - renderer.addRenderable(*this, g_transform_box3); - renderer.addRenderable(*this, g_transform_box4); - } + renderer.SetState( m_shader_line, Renderer::eWireframeOnly ); + renderer.SetState( m_shader_line, Renderer::eFullMaterials ); + renderer.addRenderable( *this, g_matrix4_identity ); + + if ( m_bShowExtra ) { + renderer.SetState( m_shader_box, Renderer::eWireframeOnly ); + renderer.SetState( m_shader_box, Renderer::eFullMaterials ); + renderer.addRenderable( *this, g_transform_box1 ); + renderer.addRenderable( *this, g_transform_box2 ); + renderer.addRenderable( *this, g_transform_box3 ); + renderer.addRenderable( *this, g_transform_box4 ); + } } -void DBobView::renderWireframe(Renderer& renderer, const VolumeTest& volume) const -{ - renderSolid(renderer, volume); +void DBobView::renderWireframe( Renderer& renderer, const VolumeTest& volume ) const { + renderSolid( renderer, volume ); } -void DBobView::SetPath(vec3_t *pPath) -{ - if(path) +void DBobView::SetPath( vec3_t *pPath ){ + if ( path ) { delete[] path; + } path = pPath; } -#define LOCAL_GRAVITY -800.0f +const float LOCAL_GRAVITY = -800.0f; -bool DBobView::CalculateTrajectory(vec3_t start, vec3_t apex, float multiplier, int points, float varGravity) -{ - if(apex[2] <= start[2]) - { - SetPath(NULL); +bool DBobView::CalculateTrajectory( vec3_t start, vec3_t apex, float multiplier, int points, float varGravity ){ + if ( apex[2] <= start[2] ) { + SetPath( NULL ); return false; } // ----think q3a actually would allow these //scrub that, coz the plugin wont :] vec3_t dist, speed; - VectorSubtract(apex, start, dist); + VectorSubtract( apex, start, dist ); - vec_t speed_z = (float)sqrt(-2*LOCAL_GRAVITY*dist[2]); - float flight_time = -speed_z/LOCAL_GRAVITY; + vec_t speed_z = (float)sqrt( -2 * LOCAL_GRAVITY * dist[2] ); + float flight_time = -speed_z / LOCAL_GRAVITY; - VectorScale(dist, 1/flight_time, speed); + VectorScale( dist, 1 / flight_time, speed ); speed[2] = speed_z; // Sys_Printf("Speed: (%.4f %.4f %.4f)\n", speed[0], speed[1], speed[2]); vec3_t* pPath = new vec3_t[points]; - float interval = multiplier*flight_time/points; - for(int i = 0; i < points; i++) + float interval = multiplier * flight_time / points; + for ( int i = 0; i < points; i++ ) { - float ltime = interval*i; + float ltime = interval * i; - VectorScale(speed, ltime, pPath[i]); - VectorAdd(pPath[i], start, pPath[i]); + VectorScale( speed, ltime, pPath[i] ); + VectorAdd( pPath[i], start, pPath[i] ); // could do this all with vectors // vGrav = {0, 0, -800.0f} @@ -190,88 +182,86 @@ bool DBobView::CalculateTrajectory(vec3_t start, vec3_t apex, float multiplier, // _VectorAdd(pPath[i], start, pPath[i]) // _VectorAdd(pPath[i], vAdd, pPath[i]) - pPath[i][2] = start[2] + (speed_z*ltime) + (varGravity*0.5f*ltime*ltime); + pPath[i][2] = start[2] + ( speed_z * ltime ) + ( varGravity * 0.5f * ltime * ltime ); } - SetPath(pPath); + SetPath( pPath ); return true; } -void DBobView::Begin(const char* trigger, const char *target, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra) -{ - strcpy(entTrigger, trigger); - strcpy(entTarget, target); +void DBobView::Begin( const char* trigger, const char *target, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra ){ + strcpy( entTrigger, trigger ); + strcpy( entTarget, target ); fMultiplier = multiplier; fVarGravity = varGravity; nPathCount = points; m_bShowExtra = bShowExtra; - if(!UpdatePath()) - { + if ( !UpdatePath() ) { globalErrorStream() << "Initialization Failure in DBobView::Begin"; delete this; } + globalOutputStream() << "Initialization of Path Plotter succeeded."; } -bool DBobView::UpdatePath() -{ +bool DBobView::UpdatePath(){ vec3_t start, apex; - if(GetEntityCentre(entTrigger, start)) - { - if(GetEntityCentre(entTarget, apex)) - { - CalculateTrajectory(start, apex, fMultiplier, nPathCount, fVarGravity); + if ( GetEntityCentre( entTrigger, start ) ) { + if ( GetEntityCentre( entTarget, apex ) ) { + CalculateTrajectory( start, apex, fMultiplier, nPathCount, fVarGravity ); return true; } } return false; } -void DBobView_setEntity(Entity& entity, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra) -{ +void DBobView_setEntity( Entity& entity, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra ){ DEntity trigger; - trigger.LoadEPairList(&entity); + trigger.LoadEPairList( &entity ); - DEPair* trigger_ep = trigger.FindEPairByKey("targetname"); + DEPair* trigger_ep = trigger.FindEPairByKey( "targetname" ); - if(trigger_ep) - { - if(!strcmp(trigger.m_Classname, "trigger_push")) - { - DEPair* target_ep = trigger.FindEPairByKey("target"); - if(target_ep) - { - const scene::Path* entTarget = FindEntityFromTargetname(target_ep->value); - if(entTarget) - { - if(g_PathView) + if ( trigger_ep ) { + if ( !strcmp( trigger.m_Classname, "trigger_push" ) ) { + DEPair* target_ep = trigger.FindEPairByKey( "target" ); + if ( target_ep ) { + const scene::Path* entTarget = FindEntityFromTargetname( target_ep->value ); + if ( entTarget ) { + if ( g_PathView ) { delete g_PathView; + } g_PathView = new DBobView; - Entity* target = Node_getEntity(entTarget->top()); - if(target != 0) - { - if(!bNoUpdate) - { - g_PathView->trigger = &entity; - entity.attach(*g_PathView); - g_PathView->target = target; - target->attach(*g_PathView); - } - g_PathView->Begin(trigger_ep->value, target_ep->value, multiplier, points, varGravity, bNoUpdate, bShowExtra); - } + Entity* target = Node_getEntity( entTarget->top() ); + if ( target != 0 ) { + if ( !bNoUpdate ) { + g_PathView->trigger = &entity; + entity.attach( *g_PathView ); + g_PathView->target = target; + target->attach( *g_PathView ); + } + g_PathView->Begin( trigger_ep->value, target_ep->value, multiplier, points, varGravity, bNoUpdate, bShowExtra ); + } + else{ + globalErrorStream() << "bobToolz PathPlotter: trigger_push ARGH\n"; + } } - else - DoMessageBox("trigger_push target could not be found.", "Error", eMB_OK); + else{ + globalErrorStream() << "bobToolz PathPlotter: trigger_push target could not be found..\n"; + } + } + else{ + globalErrorStream() << "bobToolz PathPlotter: trigger_push has no target..\n"; } - else - DoMessageBox("trigger_push has no target.", "Error", eMB_OK); } - else - DoMessageBox("You must select a 'trigger_push' entity.", "Error", eMB_OK); - } - else - DoMessageBox("Entity must have a targetname", "Error", eMB_OK); -} \ No newline at end of file + else{ + globalErrorStream() << "bobToolz PathPlotter: You must select a 'trigger_push' entity..\n"; + } + } + else{ + globalErrorStream() << "bobToolz PathPlotter: Entity must have a targetname.\n"; + } + return; +}