From: <kla...@us...> - 2016-07-03 07:34:19
|
Revision: 13716 http://sourceforge.net/p/vegastrike/code/13716 Author: klaussfreire Date: 2016-07-03 07:34:16 +0000 (Sun, 03 Jul 2016) Log Message: ----------- Add some more debugging output, and other minor improvements Modified Paths: -------------- trunk/vegastrike/src/cmd/unit_generic.cpp Modified: trunk/vegastrike/src/cmd/unit_generic.cpp =================================================================== --- trunk/vegastrike/src/cmd/unit_generic.cpp 2016-07-03 07:29:34 UTC (rev 13715) +++ trunk/vegastrike/src/cmd/unit_generic.cpp 2016-07-03 07:34:16 UTC (rev 13716) @@ -187,19 +187,19 @@ Vector Unit::GetWarpVelocity() const { - Vector VelocityRef( 0, 0, 0 ); - { - Unit *vr = const_cast< UnitContainer* > (&computer.velocity_ref)->GetUnit(); - if (vr) - VelocityRef = vr->cumulative_velocity; - } - - Vector vel = cumulative_velocity-VelocityRef; if (graphicOptions.WarpFieldStrength == 1.) { // Short circuit, most ships won't be at warp, so it simplifies math a lot - return vel+VelocityRef; + return cumulative_velocity; } else { + Vector VelocityRef( 0, 0, 0 ); + { + Unit *vr = const_cast< UnitContainer* > (&computer.velocity_ref)->GetUnit(); + if (vr) + VelocityRef = vr->cumulative_velocity; + } + //return(cumulative_velocity*graphicOptions.WarpFieldStrength); + Vector vel = cumulative_velocity-VelocityRef; float speed = vel.Magnitude(); //return vel*graphicOptions.WarpFieldStrength; if (speed > 0) { @@ -853,6 +853,7 @@ VSFileSystem::vs_fprintf( stderr, "Assumed exit on unit %s(if not quitting, report error)\n", name.get().c_str() ); if (ucref) VSFileSystem::vs_fprintf( stderr, "DISASTER AREA!!!!" ); + VSFileSystem::vs_dprintf( 3, "Deallocating unit %s addr=0x%08x refs=%d\n", name.get().c_str(), this, ucref ); #ifdef DESTRUCTDEBUG VSFileSystem::vs_fprintf( stderr, "stage %d %x %d\n", 0, this, ucref ); fflush( stderr ); @@ -2253,9 +2254,6 @@ //Well, wasn't skipped actually, but... this->last_processed_sqs = cur_sim_frame; this->cur_sim_queue_slot = (cur_sim_frame+this->sim_atom_multiplier)%SIM_QUEUE_SIZE; - if (maxhull < 0) { - this->Explode( true, 0 ); - } Transformation old_physical_state = curr_physical_state; if (docked&DOCKING_UNITS) PerformDockingOperations(); @@ -2530,6 +2528,9 @@ curr_physical_state.position ), true, true ); } } + if (maxhull < 0) { + this->Explode( true, 0 ); + } //Really kill the unit only in non-networking or on server side if (hull < 0) { dead &= (pImage->pExplosion == NULL); @@ -2814,9 +2815,8 @@ bool lastframe, UnitCollection *uc ) { - Cockpit *cp = _Universe->isPlayerStarship( this ); //Only in non-networking OR networking && is a player OR SERVER && not a player - if ( (Network == NULL && !SERVER) || (Network != NULL && cp && !SERVER) || (SERVER) ) + if ( (SERVER) || (Network == NULL && !SERVER) || (Network != NULL && !SERVER && _Universe->isPlayerStarship( this ) ) ) if (AngularVelocity.i || AngularVelocity.j || AngularVelocity.k) Rotate( SIMULATION_ATOM*(AngularVelocity) ); //SERVERSIDE ONLY : If it is not a player, it is a unit controlled by server so compute changes @@ -4659,7 +4659,6 @@ //eraticate everything. naturally (see previous line) we won't erraticate beams erraticated above if ( !isSubUnit() ) RemoveFromSystem(); - killed = true; computer.target.SetUnit( NULL ); //God I can't believe this next line cost me 1 GIG of memory until I added it @@ -4671,15 +4670,20 @@ aistate->Destroy(); } aistate = NULL; + + // The following we don't want to do twice + killed = true; Unit *un; for (un_iter iter = getSubUnits(); (un = *iter); ++iter) un->Kill(); - + if (isUnit() != MISSILEPTR) - VSFileSystem::vs_dprintf( 1, "UNIT HAS DIED: %s %s (file %s)\n", name.get().c_str(), - fullname.c_str(), filename.get().c_str() ); - + VSFileSystem::vs_dprintf( 1, "UNIT HAS DIED: %s %s (file %s, addr 0x%08x)\n", name.get().c_str(), + fullname.c_str(), filename.get().c_str(), this ); + if (ucref == 0) { + VSFileSystem::vs_dprintf( 3, "UNIT DELETION QUEUED: %s %s (file %s, addr 0x%08x)\n", name.get().c_str(), + fullname.c_str(), filename.get().c_str(), this ); Unitdeletequeue.push_back( this ); if (flightgroup) if (flightgroup->leader.GetUnit() == this) |