From: Mircea Kitsune Date: Thu, 27 Oct 2011 11:57:13 +0000 (+0300) Subject: Change the way material intensity is calculated, to account the velocity of the objec... X-Git-Tag: xonotic-v0.6.0~35^2~18^2~127 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=70a88fcb0cbe4a92c2e80f0b262adb820d4defbe;p=xonotic%2Fxonotic-data.pk3dir.git Change the way material intensity is calculated, to account the velocity of the object hitting it as well and simplify the code --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index d0de6f89b..8fdfc6342 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -547,7 +547,7 @@ set g_sandbox_editor_distance_spawn 200 "distance at which objects spawn in fron set g_sandbox_editor_distance_edit 350 "distance at which players can edit or remove objects they are looking at" set g_sandbox_object_scale_min 0.1 "minimum scale that objects can be set to" set g_sandbox_object_scale_max 2 "maximum scale that objects can be set to" -set g_sandbox_object_material_velocity_min 200 "velocity objects must have while colliding for material effects to be applied" +set g_sandbox_object_material_velocity_min 100 "velocity objects must have while colliding for material effects to be applied" set g_sandbox_object_material_velocity_factor 0.002 "velocity range which decides the intensity of material effects" seta menu_sandbox_spawn_model "" // used to store the model in the input field diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 9afe34ffb..3b07fc8b5 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -15,12 +15,15 @@ void sandbox_Object_Touch() if(self.touch_timer > time) return; // don't execute each frame self.touch_timer = time + 0.1; - if not(vlen(self.velocity) > autocvar_g_sandbox_object_material_velocity_min || vlen(other.velocity) > autocvar_g_sandbox_object_material_velocity_min) - return; // impact not strong enough - // make particle count and sound intensity depend on impact speed + // make particle count and sound volume depend on impact speed float intensity; - intensity = (vlen(self.velocity) + vlen(other.velocity)) / 2; + intensity = vlen(self.velocity) + vlen(other.velocity); + if(intensity) // check this first to avoid divisions by 0 + intensity /= 2; // average the two velocities + if not(intensity >= autocvar_g_sandbox_object_material_velocity_min) + return; // impact not strong enough to do anything + // now offset intensity and apply it to the effects intensity = bound(0, intensity * autocvar_g_sandbox_object_material_velocity_factor, 1); switch(self.material)