This commit is contained in:
parent
f72766f89c
commit
9566bf2720
@ -148,8 +148,8 @@
|
|||||||
"movementSystems" : [
|
"movementSystems" : [
|
||||||
{
|
{
|
||||||
"type" : "GROUND",
|
"type" : "GROUND",
|
||||||
"acceleration" : 4000.0,
|
"acceleration" : 400.0,
|
||||||
"maxVelocity" : 20.5,
|
"maxVelocity" : 80.5,
|
||||||
"strafeMultiplier" : 1.0,
|
"strafeMultiplier" : 1.0,
|
||||||
"backpedalMultiplier" : 0.5,
|
"backpedalMultiplier" : 0.5,
|
||||||
"footstepFirstAudioOffset" : 0.2,
|
"footstepFirstAudioOffset" : 0.2,
|
||||||
@ -182,7 +182,7 @@
|
|||||||
{
|
{
|
||||||
"type" : "JUMP",
|
"type" : "JUMP",
|
||||||
"jumpFrames" : 3,
|
"jumpFrames" : 3,
|
||||||
"jumpForce" : 1.3,
|
"jumpForce" : 80,
|
||||||
"animationJump" : {
|
"animationJump" : {
|
||||||
"nameThirdPerson" : "Jump",
|
"nameThirdPerson" : "Jump",
|
||||||
"nameFirstPerson" : "Jump",
|
"nameFirstPerson" : "Jump",
|
||||||
@ -388,10 +388,10 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"collidable" : {
|
"collidable" : {
|
||||||
"type" : "CAPSULE",
|
"type" : "CYLINDER",
|
||||||
"dimension1" : 0.25,
|
"dimension1" : 0.35,
|
||||||
"dimension2" : 0.9,
|
"dimension2" : 1.6,
|
||||||
"dimension3" : 0.25,
|
"dimension3" : 0.35,
|
||||||
"linearFriction": 0.001,
|
"linearFriction": 0.001,
|
||||||
"mass": 0.3,
|
"mass": 0.3,
|
||||||
"rotX": 0,
|
"rotX": 0,
|
||||||
@ -399,7 +399,7 @@
|
|||||||
"rotZ": 0,
|
"rotZ": 0,
|
||||||
"rotW": 1,
|
"rotW": 1,
|
||||||
"offsetX" : 0,
|
"offsetX" : 0,
|
||||||
"offsetY" : 0.7,
|
"offsetY" : 0.8,
|
||||||
"offsetZ" : 0,
|
"offsetZ" : 0,
|
||||||
"angularlyStatic" : true
|
"angularlyStatic" : true
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1835,6 +1835,8 @@ Load main level only loads human now
|
|||||||
Human uses capsule collidable
|
Human uses capsule collidable
|
||||||
Physics debug render renders capsules
|
Physics debug render renders capsules
|
||||||
Fix virtual scrollable working with certain panels
|
Fix virtual scrollable working with certain panels
|
||||||
|
Humans use capsule shape now
|
||||||
|
Physics numbers reworked
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package electrosphere.client.ui.components.imgui;
|
|||||||
|
|
||||||
import org.ode4j.ode.DBody;
|
import org.ode4j.ode.DBody;
|
||||||
import org.ode4j.ode.DBox;
|
import org.ode4j.ode.DBox;
|
||||||
|
import org.ode4j.ode.DCapsule;
|
||||||
import org.ode4j.ode.DCylinder;
|
import org.ode4j.ode.DCylinder;
|
||||||
import org.ode4j.ode.DGeom;
|
import org.ode4j.ode.DGeom;
|
||||||
import org.ode4j.ode.DMass;
|
import org.ode4j.ode.DMass;
|
||||||
@ -117,6 +118,32 @@ public class CollidableEditBlock {
|
|||||||
float adjusted = (float)Math.log(mass[0] + 1);
|
float adjusted = (float)Math.log(mass[0] + 1);
|
||||||
massObj.setMass(adjusted);
|
massObj.setMass(adjusted);
|
||||||
}
|
}
|
||||||
|
} else if(geom instanceof DCapsule){
|
||||||
|
DCapsule cylinder = (DCapsule)geom;
|
||||||
|
if(ImGui.sliderFloat3("Offset", offset, MIN_OFFSET, MAX_OFFSET)){
|
||||||
|
cylinder.setOffsetPosition(offset[0], offset[1], offset[2]);
|
||||||
|
template.setOffsetX(offset[0]);
|
||||||
|
template.setOffsetY(offset[1]);
|
||||||
|
template.setOffsetZ(offset[2]);
|
||||||
|
geom.enable();
|
||||||
|
}
|
||||||
|
if(ImGui.sliderFloat("Radius",radius,MIN_SCALE,MAX_SCALE)){
|
||||||
|
cylinder.setParams(radius[0], cylinder.getLength());
|
||||||
|
template.setDimension1(radius[0]);
|
||||||
|
template.setDimension3(radius[0]);
|
||||||
|
geom.enable();
|
||||||
|
}
|
||||||
|
if(ImGui.sliderFloat("Length",length,MIN_SCALE,MAX_SCALE)){
|
||||||
|
cylinder.setParams(cylinder.getRadius(), length[0]);
|
||||||
|
template.setDimension2(length[0]);
|
||||||
|
geom.enable();
|
||||||
|
}
|
||||||
|
if(physicsBody.getMass() instanceof DMass && ImGui.sliderFloat("Mass",mass,MIN_MASS,MAX_MASS)){
|
||||||
|
DMass massObj = (DMass)physicsBody.getMass();
|
||||||
|
float adjusted = (float)Math.log(mass[0] + 1);
|
||||||
|
massObj.setMass(adjusted);
|
||||||
|
geom.enable();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Unsupported geom type! " + geom);
|
throw new Error("Unsupported geom type! " + geom);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,8 +52,10 @@ import electrosphere.logger.LoggerInterface;
|
|||||||
*/
|
*/
|
||||||
public class CollisionEngine {
|
public class CollisionEngine {
|
||||||
|
|
||||||
//gravity constant
|
/**
|
||||||
public static final float GRAVITY_MAGNITUDE = 0.15f;
|
* gravity constant
|
||||||
|
*/
|
||||||
|
public static final float GRAVITY_MAGNITUDE = 5f;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The damping applied to angular velocity
|
* The damping applied to angular velocity
|
||||||
@ -82,6 +84,11 @@ public class CollisionEngine {
|
|||||||
*/
|
*/
|
||||||
public static final int COLLIDABLE_COUNT_WARNING_THRESHOLD = 5000;
|
public static final int COLLIDABLE_COUNT_WARNING_THRESHOLD = 5000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quickstep iteration count
|
||||||
|
*/
|
||||||
|
public static final int QUICKSTEP_ITERATION_COUNT = 50;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default distance to interact with collidables at (ie picking where to place things)
|
* Default distance to interact with collidables at (ie picking where to place things)
|
||||||
*/
|
*/
|
||||||
@ -146,6 +153,7 @@ public class CollisionEngine {
|
|||||||
public CollisionEngine(){
|
public CollisionEngine(){
|
||||||
world = OdeHelper.createWorld();
|
world = OdeHelper.createWorld();
|
||||||
world.setGravity(0,-GRAVITY_MAGNITUDE,0);
|
world.setGravity(0,-GRAVITY_MAGNITUDE,0);
|
||||||
|
world.setQuickStepNumIterations(QUICKSTEP_ITERATION_COUNT);
|
||||||
space = OdeHelper.createBHVSpace(Collidable.TYPE_STATIC_BIT);
|
space = OdeHelper.createBHVSpace(Collidable.TYPE_STATIC_BIT);
|
||||||
// world.setContactMaxCorrectingVel(0.1);
|
// world.setContactMaxCorrectingVel(0.1);
|
||||||
// world.setContactSurfaceLayer(0.001);
|
// world.setContactSurfaceLayer(0.001);
|
||||||
@ -365,6 +373,12 @@ public class CollisionEngine {
|
|||||||
if(surfaceParams.getBounceVel() != null){
|
if(surfaceParams.getBounceVel() != null){
|
||||||
contact.surface.bounce_vel = surfaceParams.getBounceVel();
|
contact.surface.bounce_vel = surfaceParams.getBounceVel();
|
||||||
}
|
}
|
||||||
|
if(surfaceParams.getSoftErp() != null){
|
||||||
|
contact.surface.soft_erp = surfaceParams.getSoftErp();
|
||||||
|
}
|
||||||
|
if(surfaceParams.getSoftCfm() != null){
|
||||||
|
contact.surface.soft_cfm = surfaceParams.getSoftCfm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//calculate collisions
|
//calculate collisions
|
||||||
int numc = OdeHelper.collide(o1,o2,MAX_CONTACTS,contacts.getGeomBuffer());
|
int numc = OdeHelper.collide(o1,o2,MAX_CONTACTS,contacts.getGeomBuffer());
|
||||||
|
|||||||
@ -72,6 +72,20 @@ public class SurfaceParams {
|
|||||||
*/
|
*/
|
||||||
Double bounceVel;
|
Double bounceVel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Error Reduction Parameter </p>
|
||||||
|
* <p> How much of the penetration is corrected per time step </p>
|
||||||
|
* <p> <b> Note that mode must be set with dContactSoftERP. </b> </p>
|
||||||
|
*/
|
||||||
|
Double softErp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Constraint Force Mixing </p>
|
||||||
|
* <p> How soft or spongy the contact is </p>
|
||||||
|
* <p> <b> Note that mode must be set with dContactSoftCFM. </b> </p>
|
||||||
|
*/
|
||||||
|
Double softCfm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
@ -83,6 +97,8 @@ public class SurfaceParams {
|
|||||||
rhoN = 10.0;
|
rhoN = 10.0;
|
||||||
bounce = 0.001;
|
bounce = 0.001;
|
||||||
bounceVel = 100.0;
|
bounceVel = 100.0;
|
||||||
|
softErp = 0.2;
|
||||||
|
softCfm = 1e-5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,6 +157,22 @@ public class SurfaceParams {
|
|||||||
return bounceVel;
|
return bounceVel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the error reduction parameter
|
||||||
|
* @return The error reduction parameter
|
||||||
|
*/
|
||||||
|
public Double getSoftErp(){
|
||||||
|
return softErp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the constraining force mixing
|
||||||
|
* @return The constraining force mixing
|
||||||
|
*/
|
||||||
|
public Double getSoftCfm(){
|
||||||
|
return softCfm;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the rolling friction of the surface params
|
* Sets the rolling friction of the surface params
|
||||||
* @param friction The rolling friction
|
* @param friction The rolling friction
|
||||||
@ -157,4 +189,20 @@ public class SurfaceParams {
|
|||||||
this.mu = linearFriction;
|
this.mu = linearFriction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the error reduction parameter
|
||||||
|
* @param softErp The error reduction parameter
|
||||||
|
*/
|
||||||
|
public void setSoftErp(double softErp){
|
||||||
|
this.softErp = softErp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the constraint force mixing
|
||||||
|
* @param softCfm The constraint force mixing
|
||||||
|
*/
|
||||||
|
public void setSoftCfm(double softCfm){
|
||||||
|
this.softCfm = softCfm;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public class Timekeeper {
|
|||||||
public static final int SIM_FRAME_HARDCAP = 3;
|
public static final int SIM_FRAME_HARDCAP = 3;
|
||||||
|
|
||||||
//step interval time size (for physics)
|
//step interval time size (for physics)
|
||||||
public static final float ENGINE_STEP_SIZE = 0.05f;
|
public static final float ENGINE_STEP_SIZE = 0.01f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user