From: <hik...@us...> - 2008-07-17 01:33:52
|
Revision: 2168 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=2168&view=rev Author: hikerstk Date: 2008-07-17 01:33:49 +0000 (Thu, 17 Jul 2008) Log Message: ----------- 1) Updated the physics parameters: crashes of karts with the track when accelerating have been removed; sound when hitting parts of the track have been re-enabled. 2) Special handling of smaller karts (wilber/hexley) has been removed. 3) Added option to specify the exact wheel positions for the physics. 4) Added option to move the center of gravity along all three axis (not only height). 5) Added --kartsize-debug command line option to print the sizes of each kart (which is useful when specifying the wheel positions). 6) Removed unused entry from stk_config.data. Modified Paths: -------------- trunk/supertuxkart/data/stk_config.data trunk/supertuxkart/src/kart.cpp trunk/supertuxkart/src/kart.hpp trunk/supertuxkart/src/kart_properties.cpp trunk/supertuxkart/src/kart_properties.hpp trunk/supertuxkart/src/main.cpp trunk/supertuxkart/src/player_kart.cpp trunk/supertuxkart/src/stk_config.cpp trunk/supertuxkart/src/stk_config.hpp trunk/supertuxkart/src/user_config.cpp trunk/supertuxkart/src/user_config.hpp Modified: trunk/supertuxkart/data/stk_config.data =================================================================== --- trunk/supertuxkart/data/stk_config.data 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/data/stk_config.data 2008-07-17 01:33:49 UTC (rev 2168) @@ -60,7 +60,7 @@ (max-speed-angle 12 6.4) (engine-power 400 ) (mass 225 ) - (suspension-stiffness 8.0 ) + (suspension-stiffness 18.0 ) (wheel-damping-relaxation 2.3 ) (wheel-damping-compression 4.4 ) (friction-slip 10000000 ) @@ -71,9 +71,10 @@ (chassis-angular-damping 0.2 ) (maximum-speed 22.22 ) ;; = 80 km/h (max-speed-reverse-ratio 0.2 ) ;; percentage of max speed for reverse gear - (gravity-center-shift 0.4 ) ;; Shift center of gravity down by that many - ;; units of kart_height (usually between 0 and 0.5) - (suspension-rest 0.1 ) + (gravity-center-shift 0.0 0.0 0.3 ) ;; Shift center of gravity + (front-wheel-connection 0.38 0.6 0) + (rear-wheel-connection 0.38 -0.6 0) + (suspension-rest 0.2 ) (suspension-travel-cm 500 ) ;; The z-axis velocity set when a jump is initiated. This will cause the Modified: trunk/supertuxkart/src/kart.cpp =================================================================== --- trunk/supertuxkart/src/kart.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/kart.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -118,10 +118,8 @@ btTransform shiftCenterOfGravity; shiftCenterOfGravity.setIdentity(); // Shift center of gravity downwards, so that the kart - // won't topple over too easy. This must be between 0 and 0.5 - // (it's in units of kart_height) - const float CENTER_SHIFT = getGravityCenterShift(); - shiftCenterOfGravity.setOrigin(btVector3(0.0f,0.0f,CENTER_SHIFT*kart_height)); + // won't topple over too easy. + shiftCenterOfGravity.setOrigin(getGravityCenterShift()); m_kart_chassis.addChildShape(shiftCenterOfGravity, shape); @@ -157,42 +155,45 @@ // Add wheels // ---------- - float wheel_width = m_kart_properties->getWheelWidth(); - float wheel_radius = m_kart_properties->getWheelRadius(); + float wheel_width = m_kart_properties->getWheelWidth(); + float wheel_radius = m_kart_properties->getWheelRadius(); float suspension_rest = m_kart_properties->getSuspensionRest(); - float connection_height = -(0.5f-CENTER_SHIFT)*kart_height; + Vec3 front_wheel = m_kart_properties->getFrontWheelConnection(); + if(front_wheel.getX()==STKConfig::UNDEFINED) + front_wheel.setX(0.5f*kart_width-0.3f*wheel_width); + if(front_wheel.getY()==STKConfig::UNDEFINED) + front_wheel.setY(0.5f*kart_length-wheel_radius); + if(front_wheel.getZ()==STKConfig::UNDEFINED) + front_wheel.setZ(0); btVector3 wheel_direction(0.0f, 0.0f, -1.0f); btVector3 wheel_axle(1.0f,0.0f,0.0f); // right front wheel - btVector3 wheel_coord(0.5f*kart_width-0.3f*wheel_width, - 0.5f*kart_length-wheel_radius, - connection_height); - m_vehicle->addWheel(wheel_coord, wheel_direction, wheel_axle, + m_vehicle->addWheel(front_wheel, wheel_direction, wheel_axle, suspension_rest, wheel_radius, *m_tuning, /* isFrontWheel: */ true); - // left front wheel - wheel_coord = btVector3(-0.5f*kart_width+0.3f*wheel_width, - 0.5f*kart_length-wheel_radius, - connection_height); - m_vehicle->addWheel(wheel_coord, wheel_direction, wheel_axle, + // left front wheel: mirror X axis + front_wheel.setX(-front_wheel.getX()); + m_vehicle->addWheel(front_wheel, wheel_direction, wheel_axle, suspension_rest, wheel_radius, *m_tuning, /* isFrontWheel: */ true); // right rear wheel - wheel_coord = btVector3(0.5f*kart_width-0.3f*wheel_width, - -0.5f*kart_length+wheel_radius, - connection_height); - m_vehicle->addWheel(wheel_coord, wheel_direction, wheel_axle, + Vec3 rear_wheel = m_kart_properties->getRearWheelConnection(); + if(rear_wheel.getX()==STKConfig::UNDEFINED) + rear_wheel.setX(0.5f*kart_width-0.3f*wheel_width); + if(rear_wheel.getY()==STKConfig::UNDEFINED) + rear_wheel.setY(-0.5f*kart_length+wheel_radius); + if(rear_wheel.getZ()==STKConfig::UNDEFINED) + rear_wheel.setZ(0); + m_vehicle->addWheel(rear_wheel, wheel_direction, wheel_axle, suspension_rest, wheel_radius, *m_tuning, /* isFrontWheel: */ false); - // right rear wheel - wheel_coord = btVector3(-0.5f*kart_width+0.3f*wheel_width, - -0.5f*kart_length+wheel_radius, - connection_height); - m_vehicle->addWheel(wheel_coord, wheel_direction, wheel_axle, + // left rear wheel: mirror X axis + rear_wheel.setX(-rear_wheel.getX()); + m_vehicle->addWheel(rear_wheel, wheel_direction, wheel_axle, suspension_rest, wheel_radius, *m_tuning, /* isFrontWheel: */ false); @@ -1047,12 +1048,12 @@ if (m_wheel_rear_l) m_wheel_rear_l->setTransform(wheel_rot); if (m_wheel_rear_r) m_wheel_rear_r->setTransform(wheel_rot); - const float CENTER_SHIFT = getGravityCenterShift(); + Vec3 center_shift = getGravityCenterShift(); + center_shift.setZ(-center_shift.getZ() + + 0.3f*fabs(sin(DEGREE_TO_RAD(m_wheelie_angle))) ); const float offset_pitch = DEGREE_TO_RAD(m_wheelie_angle); - const float offset_z = 0.3f*fabs(sin(m_wheelie_angle*SG_DEGREES_TO_RADIANS)) - - (0.5f-CENTER_SHIFT)*getKartHeight(); - Moveable::updateGraphics(Vec3(0, 0, offset_z), Vec3(0, offset_pitch, 0)); + Moveable::updateGraphics(center_shift, Vec3(0, offset_pitch, 0)); } // updateGraphics //----------------------------------------------------------------------------- Modified: trunk/supertuxkart/src/kart.hpp =================================================================== --- trunk/supertuxkart/src/kart.hpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/kart.hpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -166,11 +166,10 @@ float getTimeFullSteer () const {return m_kart_properties->getTimeFullSteer();} float getBrakeFactor () const {return m_kart_properties->getBrakeFactor();} float getWheelBase () const {return m_kart_properties->getWheelBase();} - float getHeightCOG () const {return m_kart_properties->getHeightCOG();} float getFrictionSlip () const {return m_kart_properties->getFrictionSlip();} float getMaxSteerAngle () const {return m_kart_properties->getMaxSteerAngle(getSpeed());} - float getGravityCenterShift () const + const Vec3& getGravityCenterShift () const {return m_kart_properties->getGravityCenterShift(); } float getWheelieMaxSpeedRatio () const {return m_kart_properties->getWheelieMaxSpeedRatio(); } Modified: trunk/supertuxkart/src/kart_properties.cpp =================================================================== --- trunk/supertuxkart/src/kart_properties.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/kart_properties.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -30,6 +30,8 @@ #include "stk_config.hpp" #include "translation.hpp" #include "ssg_help.hpp" +#include "user_config.hpp" + #if defined(WIN32) && !defined(__CYGWIN__) # define snprintf _snprintf #endif @@ -103,23 +105,14 @@ ssgStripify(m_model); float x_min, x_max, y_min, y_max, z_min, z_max; MinMax(m_model, &x_min, &x_max, &y_min, &y_max, &z_min, &z_max); - if(getName()=="Hexley" || getName()=="Wilber") - { - // These kart models are too small, so we get problems with stability. - // Till we find either better (bigger) models or improve their physics - // parameters to become playable, we just adjust the size of their - // physical models to be the same as the tuxkart model - x_min=-0.473799f; - x_max= 0.486361f; - y_min=-0.772244f; - y_max= 0.739075f; - z_min= 0.002806f; - z_max= 0.701095f; - } m_kart_width = x_max - x_min; m_kart_length = y_max - y_min; m_kart_height = z_max - z_min; - if(m_kart_length<1.2) m_kart_length=1.5f; + + // Useful when tweaking kart parameters + if(user_config->m_print_kart_sizes) + printf("%s:\twidth: %f\tlength: %f\theight: %f\n",getIdent().c_str(), + m_kart_width, m_kart_length, m_kart_height); m_model->ref(); } // if if(!dont_load_materials) @@ -146,7 +139,6 @@ lisp->get("rgb", m_color); lisp->get("wheel-base", m_wheel_base); - lisp->get("heightCOG", m_height_cog); lisp->get("engine-power", m_engine_power); lisp->get("time-full-steer", m_time_full_steer); lisp->get("brake-factor", m_brake_factor); @@ -202,6 +194,8 @@ lisp->get("max-speed-reverse-ratio", m_max_speed_reverse_ratio ); lisp->get("maximum-speed", m_maximum_speed ); lisp->get("gravity-center-shift", m_gravity_center_shift ); + lisp->get("front-wheel-connection", m_front_wheel_connection ); + lisp->get("rear-wheel-connection", m_rear_wheel_connection ); lisp->get("suspension-rest", m_suspension_rest ); lisp->get("suspension-travel-cm", m_suspension_travel_cm ); lisp->get("jump-velocity", m_jump_velocity ); @@ -242,7 +236,6 @@ m_kart_width = 1.0f; m_kart_length = 1.5f; m_wheel_base = stk_config->m_wheel_base; - m_height_cog = stk_config->m_height_cog; m_engine_power = stk_config->m_engine_power; m_time_full_steer = stk_config->m_time_full_steer; m_brake_factor = stk_config->m_brake_factor; @@ -267,6 +260,8 @@ m_maximum_speed = stk_config->m_maximum_speed; m_max_speed_reverse_ratio = stk_config->m_max_speed_reverse_ratio; m_gravity_center_shift = stk_config->m_gravity_center_shift; + m_front_wheel_connection = stk_config->m_front_wheel_connection; + m_rear_wheel_connection = stk_config->m_rear_wheel_connection; m_suspension_rest = stk_config->m_suspension_rest; m_suspension_travel_cm = stk_config->m_suspension_travel_cm; m_jump_velocity = stk_config->m_jump_velocity; Modified: trunk/supertuxkart/src/kart_properties.hpp =================================================================== --- trunk/supertuxkart/src/kart_properties.hpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/kart_properties.hpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -57,7 +57,6 @@ float m_kart_height; // height of kart float m_mass; // weight of kart float m_wheel_base; // distance between front and read wheels - float m_height_cog; // height of center of gravity float m_engine_power; // maximum force from engine float m_brake_factor; // braking factor * engine_power = braking force float m_time_full_steer; // time for player karts to reach full steer angle @@ -85,7 +84,10 @@ float m_chassis_angular_damping; float m_maximum_speed; float m_max_speed_reverse_ratio; - float m_gravity_center_shift; + Vec3 m_gravity_center_shift; // shift of center of gravity + Vec3 m_front_wheel_connection; // connection point relative to center of + Vec3 m_rear_wheel_connection; // gravity for front and rear right wheels + // (X is mirrored for left wheels) float m_suspension_rest; float m_suspension_travel_cm; float m_jump_velocity; // z velocity set when jumping @@ -136,7 +138,6 @@ float getTimeFullSteer () const {return m_time_full_steer; } float getBrakeFactor () const {return m_brake_factor; } float getWheelBase () const {return m_wheel_base; } - float getHeightCOG () const {return m_height_cog; } float getMaxSpeedReverseRatio () const {return m_max_speed_reverse_ratio; } float getWheelieMaxSpeedRatio () const {return m_wheelie_max_speed_ratio; } float getWheelieMaxPitch () const {return m_wheelie_max_pitch; } @@ -156,7 +157,9 @@ float getChassisLinearDamping () const {return m_chassis_linear_damping; } float getChassisAngularDamping () const {return m_chassis_angular_damping; } float getMaximumSpeed () const {return m_maximum_speed; } - float getGravityCenterShift () const {return m_gravity_center_shift; } + const Vec3& getGravityCenterShift() const {return m_gravity_center_shift; } + const Vec3& getFrontWheelConnection()const {return m_front_wheel_connection; } + const Vec3& getRearWheelConnection()const {return m_rear_wheel_connection; } float getSuspensionRest () const {return m_suspension_rest; } float getSuspensionTravelCM () const {return m_suspension_travel_cm; } float getJumpVelocity () const {return m_jump_velocity; } Modified: trunk/supertuxkart/src/main.cpp =================================================================== --- trunk/supertuxkart/src/main.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/main.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -145,6 +145,10 @@ { user_config->m_bullet_debug=1; } + else if(!strcmp(argv[i], "--kartsize-debug")) + { + user_config->m_print_kart_sizes=true; + } else if( (!strcmp(argv[i], "--kart") && i+1<argc )) { std::string filename=file_manager->getKartFile(std::string(argv[i+1])+".tkkf"); Modified: trunk/supertuxkart/src/player_kart.cpp =================================================================== --- trunk/supertuxkart/src/player_kart.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/player_kart.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -211,15 +211,8 @@ if(world->getTime() - m_time_last_crash_sound > 0.5f) { - // FIXME: sounds when hitting the track (i.e. the kart argument is NULL) - // are disabled for now, since the chassis of the karts hits - // the track when accelerating, causing a constant crash sfx - // to be played. Might be fixed with better physics parameters - if(kart) - { - sound_manager->playSfx( SOUND_CRASH ); - m_time_last_crash_sound = world->getTime(); - } + sound_manager->playSfx( SOUND_CRASH ); + m_time_last_crash_sound = world->getTime(); } } // crashed Modified: trunk/supertuxkart/src/stk_config.cpp =================================================================== --- trunk/supertuxkart/src/stk_config.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/stk_config.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -21,6 +21,7 @@ #include "file_manager.hpp" STKConfig* stk_config=0; +float STKConfig::UNDEFINED = -99.9f; //----------------------------------------------------------------------------- void STKConfig::load(const std::string filename) @@ -35,7 +36,7 @@ // Check that all necessary values are indeed set // ----------------------------------------------- -#define CHECK_NEG( a,strA) if(a<-99) { \ +#define CHECK_NEG( a,strA) if(a==UNDEFINED) { \ fprintf(stderr,"Missing default value for '%s' in '%s'.\n", \ strA,filename.c_str());exit(-1); \ } @@ -71,7 +72,6 @@ CHECK_NEG(m_grid_order, "grid-order" ); CHECK_NEG(m_mass, "mass" ); - CHECK_NEG(m_height_cog, "heightCOG" ); CHECK_NEG(m_wheel_base, "wheel-base" ); CHECK_NEG(m_engine_power, "engine-power" ); CHECK_NEG(m_min_speed_turn, "min-speed-angle" ); @@ -106,7 +106,9 @@ CHECK_NEG(m_chassis_angular_damping, "chassis-angular-damping" ); CHECK_NEG(m_maximum_speed, "maximum-speed" ); CHECK_NEG(m_max_speed_reverse_ratio, "max-speed-reverse-ratio" ); - CHECK_NEG(m_gravity_center_shift, "gravity-center-shift" ); + CHECK_NEG(m_gravity_center_shift[0], "gravity-center-shift" ); + CHECK_NEG(m_gravity_center_shift[1], "gravity-center-shift" ); + CHECK_NEG(m_gravity_center_shift[2], "gravity-center-shift" ); CHECK_NEG(m_bomb_time, "bomb-time" ); CHECK_NEG(m_bomb_time_increase, "bomb-time-increase" ); CHECK_NEG(m_anvil_time, "anvil-time" ); @@ -135,7 +137,7 @@ */ void STKConfig::init_defaults() { - m_wheel_base = m_height_cog = m_mass = + m_wheel_base = m_mass = m_min_speed_turn = m_angle_at_min = m_max_speed_turn = m_angle_at_max = m_anvil_weight = m_parachute_friction = m_parachute_time = m_parachute_done_fraction = m_parachute_time_other = @@ -151,16 +153,18 @@ m_wheel_damping_compression = m_friction_slip = m_roll_influence = m_wheel_radius = m_wheel_width = m_wheelie_power_boost = m_chassis_linear_damping = m_chassis_angular_damping = - m_maximum_speed = m_gravity_center_shift = m_suspension_rest = + m_maximum_speed = m_suspension_rest = m_max_speed_reverse_ratio = m_explosion_impulse = m_jump_velocity = m_explosion_impulse_objects = m_upright_tolerance = m_upright_max_force = m_suspension_travel_cm = // Camera - m_camera_max_accel = m_camera_max_brake = m_camera_distance = -99.9f; - - m_max_karts = -100; - m_grid_order = -100; - m_title_music = NULL; + m_camera_max_accel = m_camera_max_brake = m_camera_distance = UNDEFINED; + m_gravity_center_shift = Vec3(UNDEFINED); + m_front_wheel_connection = Vec3(UNDEFINED); + m_rear_wheel_connection = Vec3(UNDEFINED); + m_max_karts = -100; + m_grid_order = -100; + m_title_music = NULL; m_scores.clear(); m_leader_intervals.clear(); } // init_defaults Modified: trunk/supertuxkart/src/stk_config.hpp =================================================================== --- trunk/supertuxkart/src/stk_config.hpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/stk_config.hpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -27,6 +27,7 @@ class STKConfig : public KartProperties { public: + static float UNDEFINED; float m_anvil_weight; // Additional kart weight if anvil is attached float m_anvil_speed_factor; // To decrease speed once when attached float m_parachute_friction; // Increased air friction when parachute Modified: trunk/supertuxkart/src/user_config.cpp =================================================================== --- trunk/supertuxkart/src/user_config.cpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/user_config.cpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -104,6 +104,7 @@ m_herring_style = "new"; m_background_music = ""; m_profile = 0; + m_print_kart_sizes = false; m_skidding = false; m_max_fps = 120; m_sfx_volume = 1.0f; Modified: trunk/supertuxkart/src/user_config.hpp =================================================================== --- trunk/supertuxkart/src/user_config.hpp 2008-07-15 23:45:43 UTC (rev 2167) +++ trunk/supertuxkart/src/user_config.hpp 2008-07-17 01:33:49 UTC (rev 2168) @@ -168,6 +168,7 @@ bool m_smoke; bool m_display_fps; int m_profile; // Positive number: time in seconds, neg: # laps + bool m_print_kart_sizes; // print all kart sizes // 0 if no profiling. Never saved in config file! bool m_skidding; float m_sfx_volume; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |