Files
watrbx-game-engine/App/v8world/MaterialProperties.cpp
T
2025-09-18 17:55:52 -04:00

638 lines
37 KiB
C++

/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */
#include "stdafx.h"
#include "V8World/MaterialProperties.h"
#include "V8World/World.h"
#include "V8World/Primitive.h"
#include "v8kernel/ContactParams.h"
#include "v8kernel/Constants.h"
#include "util/PhysicalProperties.h"
FASTFLAGVARIABLE(ModifyDefaultMaterialProperties, false)
// Thousandths
FASTINTVARIABLE(PhysicalPropDensity_PLASTIC_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropDensity_SMOOTH_PLASTIC_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropDensity_NEON_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropDensity_WOOD_MATERIAL, 350)
FASTINTVARIABLE(PhysicalPropDensity_WOODPLANKS_MATERIAL, 350)
FASTINTVARIABLE(PhysicalPropDensity_MARBLE_MATERIAL, 2563)
FASTINTVARIABLE(PhysicalPropDensity_SLATE_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_CONCRETE_MATERIAL, 2403)
FASTINTVARIABLE(PhysicalPropDensity_GRANITE_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_BRICK_MATERIAL, 1922)
FASTINTVARIABLE(PhysicalPropDensity_PEBBLE_MATERIAL, 2403)
FASTINTVARIABLE(PhysicalPropDensity_COBBLESTONE_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_RUST_MATERIAL, 7850)
FASTINTVARIABLE(PhysicalPropDensity_DIAMONDPLATE_MATERIAL, 7850)
FASTINTVARIABLE(PhysicalPropDensity_ALUMINUM_MATERIAL, 7700)
FASTINTVARIABLE(PhysicalPropDensity_METAL_MATERIAL, 7850)
FASTINTVARIABLE(PhysicalPropDensity_GRASS_MATERIAL, 900)
FASTINTVARIABLE(PhysicalPropDensity_SAND_MATERIAL, 1602)
FASTINTVARIABLE(PhysicalPropDensity_FABRIC_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropDensity_ICE_MATERIAL, 919)
FASTINTVARIABLE(PhysicalPropDensity_AIR_MATERIAL, 0)
FASTINTVARIABLE(PhysicalPropDensity_WATER_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropDensity_ROCK_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_GLACIER_MATERIAL, 919)
FASTINTVARIABLE(PhysicalPropDensity_SNOW_MATERIAL, 900)
FASTINTVARIABLE(PhysicalPropDensity_SANDSTONE_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_MUD_MATERIAL, 900)
FASTINTVARIABLE(PhysicalPropDensity_BASALT_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropDensity_GROUND_MATERIAL, 900)
FASTINTVARIABLE(PhysicalPropDensity_CRACKED_LAVA_MATERIAL, 2691)
FASTINTVARIABLE(PhysicalPropFriction_PLASTIC_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFriction_SMOOTH_PLASTIC_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropFriction_NEON_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFriction_WOOD_MATERIAL, 480)
FASTINTVARIABLE(PhysicalPropFriction_WOODPLANKS_MATERIAL, 480)
FASTINTVARIABLE(PhysicalPropFriction_MARBLE_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropFriction_SLATE_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_CONCRETE_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropFriction_GRANITE_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_BRICK_MATERIAL, 800)
FASTINTVARIABLE(PhysicalPropFriction_PEBBLE_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_COBBLESTONE_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropFriction_RUST_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropFriction_DIAMONDPLATE_MATERIAL, 350)
FASTINTVARIABLE(PhysicalPropFriction_ALUMINUM_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_METAL_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_GRASS_MATERIAL, 400)
FASTINTVARIABLE(PhysicalPropFriction_SAND_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropFriction_FABRIC_MATERIAL, 350)
FASTINTVARIABLE(PhysicalPropFriction_ICE_MATERIAL, 20)
FASTINTVARIABLE(PhysicalPropFriction_AIR_MATERIAL, 10)
FASTINTVARIABLE(PhysicalPropFriction_WATER_MATERIAL, 5)
FASTINTVARIABLE(PhysicalPropFriction_ROCK_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropFriction_GLACIER_MATERIAL, 50)
FASTINTVARIABLE(PhysicalPropFriction_SNOW_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFriction_SANDSTONE_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropFriction_MUD_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFriction_BASALT_MATERIAL, 700)
FASTINTVARIABLE(PhysicalPropFriction_GROUND_MATERIAL, 450)
FASTINTVARIABLE(PhysicalPropFriction_CRACKED_LAVA_MATERIAL, 650)
FASTINTVARIABLE(PhysicalPropElasticity_PLASTIC_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropElasticity_SMOOTH_PLASTIC_MATERIAL, 500)
FASTINTVARIABLE(PhysicalPropElasticity_NEON_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_WOOD_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_WOODPLANKS_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_MARBLE_MATERIAL, 170)
FASTINTVARIABLE(PhysicalPropElasticity_SLATE_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_CONCRETE_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_GRANITE_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_BRICK_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropElasticity_PEBBLE_MATERIAL, 170)
FASTINTVARIABLE(PhysicalPropElasticity_COBBLESTONE_MATERIAL, 170)
FASTINTVARIABLE(PhysicalPropElasticity_RUST_MATERIAL, 200)
FASTINTVARIABLE(PhysicalPropElasticity_DIAMONDPLATE_MATERIAL, 250)
FASTINTVARIABLE(PhysicalPropElasticity_ALUMINUM_MATERIAL, 250)
FASTINTVARIABLE(PhysicalPropElasticity_METAL_MATERIAL, 250)
FASTINTVARIABLE(PhysicalPropElasticity_GRASS_MATERIAL, 100)
FASTINTVARIABLE(PhysicalPropElasticity_SAND_MATERIAL, 50)
FASTINTVARIABLE(PhysicalPropElasticity_FABRIC_MATERIAL, 50)
FASTINTVARIABLE(PhysicalPropElasticity_ICE_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropElasticity_AIR_MATERIAL, 10)
FASTINTVARIABLE(PhysicalPropElasticity_WATER_MATERIAL, 10)
FASTINTVARIABLE(PhysicalPropElasticity_ROCK_MATERIAL, 170)
FASTINTVARIABLE(PhysicalPropElasticity_GLACIER_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropElasticity_SNOW_MATERIAL, 30)
FASTINTVARIABLE(PhysicalPropElasticity_SANDSTONE_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropElasticity_MUD_MATERIAL, 70)
FASTINTVARIABLE(PhysicalPropElasticity_BASALT_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropElasticity_GROUND_MATERIAL, 100)
FASTINTVARIABLE(PhysicalPropElasticity_CRACKED_LAVA_MATERIAL, 150)
FASTINTVARIABLE(PhysicalPropFWeight_PLASTIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_SMOOTH_PLASTIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_NEON_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_WOOD_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_WOODPLANKS_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_MARBLE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_SLATE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_CONCRETE_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFWeight_GRANITE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_BRICK_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFWeight_PEBBLE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_COBBLESTONE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_RUST_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_DIAMONDPLATE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_ALUMINUM_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_METAL_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_GRASS_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_SAND_MATERIAL, 5000)
FASTINTVARIABLE(PhysicalPropFWeight_FABRIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_ICE_MATERIAL, 3000)
FASTINTVARIABLE(PhysicalPropFWeight_AIR_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_WATER_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_ROCK_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_GLACIER_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_SNOW_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_SANDSTONE_MATERIAL, 5000)
FASTINTVARIABLE(PhysicalPropFWeight_MUD_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_BASALT_MATERIAL, 300)
FASTINTVARIABLE(PhysicalPropFWeight_GROUND_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropFWeight_CRACKED_LAVA_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_PLASTIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_SMOOTH_PLASTIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_NEON_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_WOOD_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_WOODPLANKS_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_MARBLE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_SLATE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_CONCRETE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_GRANITE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_BRICK_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_PEBBLE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_COBBLESTONE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_RUST_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_DIAMONDPLATE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_ALUMINUM_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_METAL_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_GRASS_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_SAND_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_FABRIC_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_ICE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_AIR_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_WATER_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_ROCK_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_GLACIER_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_SNOW_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_SANDSTONE_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_MUD_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_BASALT_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_GROUND_MATERIAL, 1000)
FASTINTVARIABLE(PhysicalPropEWeight_CRACKED_LAVA_MATERIAL, 1000)
using namespace RBX;
static float getPropertyValueFromFlag(const int& flagVal)
{
return (float)flagVal / 1000.0;
}
PhysicalProperties MaterialProperties::generatePhysicalMaterialFromPartMaterial(PartMaterial material)
{
return PhysicalProperties( getDefaultMaterialDensity(material),
getDefaultMaterialFriction(material),
getDefaultMaterialElasticity(material),
getDefaultMaterialFrictionWeight(material),
getDefaultMaterialElasticityWeight(material));
}
PhysicalProperties MaterialProperties::getPrimitivePhysicalProperties(Primitive* prim)
{
if (prim->getPhysicalProperties().getCustomEnabled())
{
return prim->getPhysicalProperties();
}
else
{
return generatePhysicalMaterialFromPartMaterial(prim->getPartMaterial());
}
}
float MaterialProperties::frictionBetweenPrimAndMaterial(Primitive* primA, PartMaterial materialB)
{
PhysicalProperties aProp = primA->getPhysicalProperties();
PhysicalProperties bProp = MaterialProperties::generatePhysicalMaterialFromPartMaterial(materialB);
return calculateUsingWeightedAverage(aProp.getFrictionWeight(), aProp.getFriction(), bProp.getFrictionWeight(), bProp.getFriction());
}
float MaterialProperties::frictionBetweenMaterials(PartMaterial materialA, PartMaterial materialB)
{
PhysicalProperties aProp = MaterialProperties::generatePhysicalMaterialFromPartMaterial(materialA);
PhysicalProperties bProp = MaterialProperties::generatePhysicalMaterialFromPartMaterial(materialB);
return calculateUsingWeightedAverage(aProp.getFrictionWeight(), aProp.getFriction(), bProp.getFrictionWeight(), bProp.getFriction());
}
void MaterialProperties::updateContactParamsPrims(ContactParams& params, Primitive* prim0, Primitive* prim1)
{
const PhysicalProperties& prop0 = getPrimitivePhysicalProperties(prim0);
const PhysicalProperties& prop1 = getPrimitivePhysicalProperties(prim1);
params.kFriction = calculateUsingWeightedAverage(prop0.getFrictionWeight(), prop0.getFriction(),
prop1.getFrictionWeight(), prop1.getFriction());
params.kElasticity = calculateUsingWeightedAverage(prop0.getElasticityWeight(),prop0.getElasticity(),
prop1.getElasticityWeight(),prop1.getElasticity());
params.kSpring = std::min( prim0->getJointK(), prim1->getJointK() );
params.kNeg = params.kSpring * Constants::getElasticMultiplier(params.kElasticity);
}
void MaterialProperties::updateContactParamsPrimMaterial(ContactParams& params, Primitive* prim, Primitive* otherPrim, PartMaterial otherMaterial)
{
const PhysicalProperties& propPrim = getPrimitivePhysicalProperties(prim);
const PhysicalProperties& propMaterial = generatePhysicalMaterialFromPartMaterial(otherMaterial);
params.kFriction = calculateUsingWeightedAverage(propPrim.getFrictionWeight(), propPrim.getFriction(),
propMaterial.getFrictionWeight(), propMaterial.getFriction());
params.kElasticity = calculateUsingWeightedAverage(propPrim.getElasticityWeight(), propPrim.getElasticity(),
propMaterial.getElasticityWeight(), propMaterial.getElasticity());
params.kSpring = std::min( prim->getJointK(), otherPrim->getJointK() );
params.kNeg = params.kSpring * Constants::getElasticMultiplier(params.kElasticity);
}
float MaterialProperties::getDensity(Primitive* prim)
{
if (prim->getPhysicalProperties().getCustomEnabled())
{
return prim->getPhysicalProperties().getDensity();
}
else
{
PartMaterial mat = prim->getPartMaterial();
return getDefaultMaterialDensity(mat);
}
}
float MaterialProperties::calculateUsingWeightedAverage(float weightX, float X, float weightY, float Y)
{
// Divide by 0 guard
float denominator = weightX + weightY;
if (denominator <= 0.0f)
{
denominator = 0.1f;
}
// Simply get the weighted Average
return (weightX * X + weightY * Y)/(weightX + weightY);
}
float MaterialProperties::getDefaultMaterialFriction(PartMaterial material)
{
if (FFlag::ModifyDefaultMaterialProperties)
{
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_PLASTIC_MATERIAL); //NYLON
case SMOOTH_PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_SMOOTH_PLASTIC_MATERIAL); //TEFLON
case NEON_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_NEON_MATERIAL);
case WOOD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_WOOD_MATERIAL); //WOOD
case WOODPLANKS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_WOODPLANKS_MATERIAL); //WOOD
case MARBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_MARBLE_MATERIAL);
case SLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_SLATE_MATERIAL);
case CONCRETE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_CONCRETE_MATERIAL); //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_GRANITE_MATERIAL);
case BRICK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_BRICK_MATERIAL);
case PEBBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_PEBBLE_MATERIAL);
case COBBLESTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_COBBLESTONE_MATERIAL);
case RUST_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_RUST_MATERIAL); //IRON
case DIAMONDPLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_DIAMONDPLATE_MATERIAL); //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_ALUMINUM_MATERIAL); //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_METAL_MATERIAL); //STEEL
case GRASS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_GRASS_MATERIAL);
case SAND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_SAND_MATERIAL);
case FABRIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_FABRIC_MATERIAL);
case ICE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_ICE_MATERIAL); //ICE
case AIR_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_AIR_MATERIAL);
case WATER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_WATER_MATERIAL);
case ROCK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_ROCK_MATERIAL);
case GLACIER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_GLACIER_MATERIAL);
case SNOW_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_SNOW_MATERIAL);
case SANDSTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_SANDSTONE_MATERIAL);
case MUD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_MUD_MATERIAL);
case BASALT_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_BASALT_MATERIAL);
case GROUND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_GROUND_MATERIAL);
case CRACKED_LAVA_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFriction_CRACKED_LAVA_MATERIAL);
default:;
}
}
else
{
// All uncommented values are guesses
// http://www.engineeringtoolbox.com/friction-coefficients-d_778.html
// Other results were adjusted from rought Testing results:
// Ice, Acrylic (Plastic), Steel, Diamond Plate, Aluminum, Wood, Brick
// See: https://docs.google.com/spreadsheets/d/1dwJYlGHSCAb0OU101bTWH-Q4eJyYSmXk85sQKBIVTuo/edit#gid=70389283
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return 0.30; //NYLON
case SMOOTH_PLASTIC_MATERIAL: return 0.20; //TEFLON
case NEON_MATERIAL: return 0.30;
case WOOD_MATERIAL: return 0.48; //WOOD
case WOODPLANKS_MATERIAL: return 0.48; //WOOD
case MARBLE_MATERIAL: return 0.20;
case SLATE_MATERIAL: return 0.40;
case CONCRETE_MATERIAL: return 0.70; //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return 0.40;
case BRICK_MATERIAL: return 0.80;
case PEBBLE_MATERIAL: return 0.40;
case COBBLESTONE_MATERIAL: return 0.50;
case RUST_MATERIAL: return 0.70; //IRON
case DIAMONDPLATE_MATERIAL: return 0.35; //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return 0.40; //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return 0.40; //STEEL
case GRASS_MATERIAL: return 0.40;
case SAND_MATERIAL: return 0.50;
case FABRIC_MATERIAL: return 0.35;
case ICE_MATERIAL: return 0.02; //ICE
case AIR_MATERIAL: return 0.01;
case WATER_MATERIAL: return 0.005;
case ROCK_MATERIAL: return 0.50;
case GLACIER_MATERIAL: return 0.05;
case SNOW_MATERIAL: return 0.30;
case SANDSTONE_MATERIAL: return 0.50;
case MUD_MATERIAL: return 0.30;
case BASALT_MATERIAL: return 0.70;
case GROUND_MATERIAL: return 0.45;
case CRACKED_LAVA_MATERIAL: return 0.65;
default:;
}
}
RBXASSERT(false); return 1;
}
float MaterialProperties::getDefaultMaterialFrictionWeight(PartMaterial material)
{
if (FFlag::ModifyDefaultMaterialProperties)
{
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_PLASTIC_MATERIAL); //NYLON
case SMOOTH_PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_SMOOTH_PLASTIC_MATERIAL); //TEFLON
case NEON_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_NEON_MATERIAL);
case WOOD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_WOOD_MATERIAL); //WOOD
case WOODPLANKS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_WOODPLANKS_MATERIAL); //WOOD
case MARBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_MARBLE_MATERIAL);
case SLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_SLATE_MATERIAL);
case CONCRETE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_CONCRETE_MATERIAL); //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_GRANITE_MATERIAL);
case BRICK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_BRICK_MATERIAL);
case PEBBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_PEBBLE_MATERIAL);
case COBBLESTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_COBBLESTONE_MATERIAL);
case RUST_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_RUST_MATERIAL); //IRON
case DIAMONDPLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_DIAMONDPLATE_MATERIAL); //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_ALUMINUM_MATERIAL); //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_METAL_MATERIAL); //STEEL
case GRASS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_GRASS_MATERIAL);
case SAND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_SAND_MATERIAL);
case FABRIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_FABRIC_MATERIAL);
case ICE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_ICE_MATERIAL); //ICE
case AIR_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_AIR_MATERIAL);
case WATER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_WATER_MATERIAL);
case ROCK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_ROCK_MATERIAL);
case GLACIER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_GLACIER_MATERIAL);
case SNOW_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_SNOW_MATERIAL);
case SANDSTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_SANDSTONE_MATERIAL);
case MUD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_MUD_MATERIAL);
case BASALT_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_BASALT_MATERIAL);
case GROUND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_GROUND_MATERIAL);
case CRACKED_LAVA_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropFWeight_CRACKED_LAVA_MATERIAL);
default:;
}
}
else
{
switch (material)
{
// Add materials that need override here.
// If no override present for material, it's 1.0f.
// This is to prevent the painful life of anyone adding more materials
// as they already have to deal with Density, Elasticity, Friction
// example
/*
case ICE_MATERIAL: return 10;
*/
case ICE_MATERIAL: return 3;
case BRICK_MATERIAL: return 0.3;
case CONCRETE_MATERIAL: return 0.3;
case SANDSTONE_MATERIAL: return 5;
case BASALT_MATERIAL: return 0.3;
case SAND_MATERIAL: return 5;
default:;
}
}
return 1;
}
float MaterialProperties::getDefaultMaterialElasticity(PartMaterial material)
{
if (FFlag::ModifyDefaultMaterialProperties)
{
switch(material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_PLASTIC_MATERIAL); //NYLON
case SMOOTH_PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_SMOOTH_PLASTIC_MATERIAL); //TEFLON
case NEON_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_NEON_MATERIAL);
case WOOD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_WOOD_MATERIAL); //WOOD
case WOODPLANKS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_WOODPLANKS_MATERIAL); //WOOD
case MARBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_MARBLE_MATERIAL);
case SLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_SLATE_MATERIAL);
case CONCRETE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_CONCRETE_MATERIAL); //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_GRANITE_MATERIAL);
case BRICK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_BRICK_MATERIAL);
case PEBBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_PEBBLE_MATERIAL);
case COBBLESTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_COBBLESTONE_MATERIAL);
case RUST_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_RUST_MATERIAL); //IRON
case DIAMONDPLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_DIAMONDPLATE_MATERIAL); //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_ALUMINUM_MATERIAL); //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_METAL_MATERIAL); //STEEL
case GRASS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_GRASS_MATERIAL);
case SAND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_SAND_MATERIAL);
case FABRIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_FABRIC_MATERIAL);
case ICE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_ICE_MATERIAL); //ICE
case AIR_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_AIR_MATERIAL);
case WATER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_WATER_MATERIAL);
case ROCK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_ROCK_MATERIAL);
case GLACIER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_GLACIER_MATERIAL);
case SNOW_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_SNOW_MATERIAL);
case SANDSTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_SANDSTONE_MATERIAL);
case MUD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_MUD_MATERIAL);
case BASALT_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_BASALT_MATERIAL);
case GROUND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_GROUND_MATERIAL);
case CRACKED_LAVA_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropElasticity_CRACKED_LAVA_MATERIAL);
default:;
}
}
else
{
// Estimates based on limited Subset testing:
// Brick, Aluminum, Wood, Acrylic (Plastic) were tested
// See: https://docs.google.com/spreadsheets/d/1dwJYlGHSCAb0OU101bTWH-Q4eJyYSmXk85sQKBIVTuo/edit#gid=1422912501
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return 0.50;
case SMOOTH_PLASTIC_MATERIAL: return 0.50;
case NEON_MATERIAL: return 0.20;
case WOOD_MATERIAL: return 0.20;
case WOODPLANKS_MATERIAL: return 0.20;
case MARBLE_MATERIAL: return 0.17;
case SLATE_MATERIAL: return 0.20;
case CONCRETE_MATERIAL: return 0.20;
case GRANITE_MATERIAL: return 0.20;
case BRICK_MATERIAL: return 0.15;
case PEBBLE_MATERIAL: return 0.17;
case COBBLESTONE_MATERIAL: return 0.17;
case RUST_MATERIAL: return 0.20;
case DIAMONDPLATE_MATERIAL: return 0.25;
case ALUMINUM_MATERIAL: return 0.25;
case METAL_MATERIAL: return 0.25;
case GRASS_MATERIAL: return 0.10;
case SAND_MATERIAL: return 0.05;
case FABRIC_MATERIAL: return 0.05;
case ICE_MATERIAL: return 0.15;
case AIR_MATERIAL: return 0.01;
case WATER_MATERIAL: return 0.10;
case ROCK_MATERIAL: return 0.17;
case GLACIER_MATERIAL: return 0.15;
case SNOW_MATERIAL: return 0.03;
case SANDSTONE_MATERIAL: return 0.15;
case MUD_MATERIAL: return 0.07;
case BASALT_MATERIAL: return 0.15;
case GROUND_MATERIAL: return 0.10;
case CRACKED_LAVA_MATERIAL: return 0.15;
default:;
}
}
RBXASSERT(false); return 0.50;
}
float MaterialProperties::getDefaultMaterialElasticityWeight(PartMaterial material)
{
if (FFlag::ModifyDefaultMaterialProperties)
{
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_PLASTIC_MATERIAL); //NYLON
case SMOOTH_PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_SMOOTH_PLASTIC_MATERIAL); //TEFLON
case NEON_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_NEON_MATERIAL);
case WOOD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_WOOD_MATERIAL); //WOOD
case WOODPLANKS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_WOODPLANKS_MATERIAL); //WOOD
case MARBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_MARBLE_MATERIAL);
case SLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_SLATE_MATERIAL);
case CONCRETE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_CONCRETE_MATERIAL); //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_GRANITE_MATERIAL);
case BRICK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_BRICK_MATERIAL);
case PEBBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_PEBBLE_MATERIAL);
case COBBLESTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_COBBLESTONE_MATERIAL);
case RUST_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_RUST_MATERIAL); //IRON
case DIAMONDPLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_DIAMONDPLATE_MATERIAL); //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_ALUMINUM_MATERIAL); //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_METAL_MATERIAL); //STEEL
case GRASS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_GRASS_MATERIAL);
case SAND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_SAND_MATERIAL);
case FABRIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_FABRIC_MATERIAL);
case ICE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_ICE_MATERIAL); //ICE
case AIR_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_AIR_MATERIAL);
case WATER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_WATER_MATERIAL);
case ROCK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_ROCK_MATERIAL);
case GLACIER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_GLACIER_MATERIAL);
case SNOW_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_SNOW_MATERIAL);
case SANDSTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_SANDSTONE_MATERIAL);
case MUD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_MUD_MATERIAL);
case BASALT_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_BASALT_MATERIAL);
case GROUND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_GROUND_MATERIAL);
case CRACKED_LAVA_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropEWeight_CRACKED_LAVA_MATERIAL);
default:;
}
}
else
{
switch (material)
{
// Add materials that need override here.
// If no override present for material, it's 1.0f.
// This is to prevent the painful life of anyone adding more materials
// as they already have to deal with Density, Elasticity, Friction
// example
/*
case ICE_MATERIAL: return 10;
*/
case ICE_MATERIAL: return 1;
default:;
}
}
return 1;
}
float MaterialProperties::getDefaultMaterialDensity(PartMaterial material)
{
if (FFlag::ModifyDefaultMaterialProperties)
{
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_PLASTIC_MATERIAL); //NYLON
case SMOOTH_PLASTIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_SMOOTH_PLASTIC_MATERIAL); //TEFLON
case NEON_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_NEON_MATERIAL);
case WOOD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_WOOD_MATERIAL); //WOOD
case WOODPLANKS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_WOODPLANKS_MATERIAL); //WOOD
case MARBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_MARBLE_MATERIAL);
case SLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_SLATE_MATERIAL);
case CONCRETE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_CONCRETE_MATERIAL); //CONCRETE SEE 11.7.4.3 of https://law.resource.org/pub/us/cfr/ibr/001/aci.318.1995.pdf
case GRANITE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_GRANITE_MATERIAL);
case BRICK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_BRICK_MATERIAL);
case PEBBLE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_PEBBLE_MATERIAL);
case COBBLESTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_COBBLESTONE_MATERIAL);
case RUST_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_RUST_MATERIAL); //IRON
case DIAMONDPLATE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_DIAMONDPLATE_MATERIAL); //GUESS: based on Aluminum and Steel experimental data.
case ALUMINUM_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_ALUMINUM_MATERIAL); //GUESS: Manually tested small bricks of Aluminum
case METAL_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_METAL_MATERIAL); //STEEL
case GRASS_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_GRASS_MATERIAL);
case SAND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_SAND_MATERIAL);
case FABRIC_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_FABRIC_MATERIAL);
case ICE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_ICE_MATERIAL); //ICE
case AIR_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_AIR_MATERIAL);
case WATER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_WATER_MATERIAL);
case ROCK_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_ROCK_MATERIAL);
case GLACIER_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_GLACIER_MATERIAL);
case SNOW_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_SNOW_MATERIAL);
case SANDSTONE_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_SANDSTONE_MATERIAL);
case MUD_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_MUD_MATERIAL);
case BASALT_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_BASALT_MATERIAL);
case GROUND_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_GROUND_MATERIAL);
case CRACKED_LAVA_MATERIAL: return getPropertyValueFromFlag(FInt::PhysicalPropDensity_CRACKED_LAVA_MATERIAL);
default:;
}
}
else
{
// http://www.simetric.co.uk/si_materials.htm
switch (material)
{
case LEGACY_MATERIAL:
case PLASTIC_MATERIAL:
case SMOOTH_PLASTIC_MATERIAL:
case NEON_MATERIAL:
return 0.7;
case WOOD_MATERIAL: return 0.350; // Pine
case WOODPLANKS_MATERIAL: return 0.350;
case MARBLE_MATERIAL: return 2.563;
case SLATE_MATERIAL: return 2.691;
case CONCRETE_MATERIAL: return 2.403;
case GRANITE_MATERIAL: return 2.691;
case BRICK_MATERIAL: return 1.922;
case PEBBLE_MATERIAL: return 2.403;
case COBBLESTONE_MATERIAL: return 2.691;
case RUST_MATERIAL: return 7.850;
case DIAMONDPLATE_MATERIAL: return 7.850;
case ALUMINUM_MATERIAL: return 7.700;
case METAL_MATERIAL: return 7.850;
case GRASS_MATERIAL: return 0.9;
case SAND_MATERIAL: return 1.602;
case FABRIC_MATERIAL: return 0.7;
case ICE_MATERIAL: return 0.919;
case AIR_MATERIAL: return 0;
case WATER_MATERIAL: return 1;
case ROCK_MATERIAL: return 2.691;
case GLACIER_MATERIAL: return 0.919;
case SNOW_MATERIAL: return 0.9;
case SANDSTONE_MATERIAL: return 2.691;
case MUD_MATERIAL: return 0.9;
case BASALT_MATERIAL: return 2.691;
case GROUND_MATERIAL: return 0.9;
case CRACKED_LAVA_MATERIAL: return 2.691;
default:;
}
}
RBXASSERT(false); return 1;
}