Files
2025-10-28 14:05:46 -04:00

43 lines
1.5 KiB
C++

#pragma once
#include "util/PartMaterial.h"
DYNAMIC_FASTFLAG(MaterialPropertiesEnabled)
namespace RBX {
class PhysicalProperties;
class ContactParams;
class Primitive;
class MaterialProperties
{
private:
// Helpers
static float calculateUsingWeightedAverage(float weightA, float coeffA, float weightB, float coeffB);
// Used on PartInstance initialization and property setting
static float getDefaultMaterialFriction(PartMaterial material);
static float getDefaultMaterialFrictionWeight(PartMaterial material);
static float getDefaultMaterialElasticity(PartMaterial material);
static float getDefaultMaterialElasticityWeight(PartMaterial material);
static float getDefaultMaterialDensity(PartMaterial material);
public:
// Physical Behavior functions
// Update Contact Parameters between two primitives, and Primitive to Terrain
static void updateContactParamsPrims(ContactParams& params, Primitive* prim0, Primitive* prim1);
static void updateContactParamsPrimMaterial(ContactParams& params, Primitive* prim, Primitive* otherPrim, PartMaterial otherMaterial);
static float getDensity(Primitive* prim);
// For humanoid Behavior
static float frictionBetweenMaterials(PartMaterial materialA, PartMaterial materialB);
static float frictionBetweenPrimAndMaterial(Primitive* primA, PartMaterial materialB);
// Property defaults helper
static PhysicalProperties generatePhysicalMaterialFromPartMaterial(PartMaterial material);
static PhysicalProperties getPrimitivePhysicalProperties(Primitive* prim);
};
} // NAMESPACE RBX