mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-04 20:57:49 +00:00
181 lines
9.0 KiB
C++
181 lines
9.0 KiB
C++
/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */
|
|
#include "stdafx.h"
|
|
|
|
#include "V8DataModel/PhysicsSettings.h"
|
|
#include "V8DataModel/PartInstance.h"
|
|
#include "V8DataModel/PartOperation.h"
|
|
#include "V8DataModel/ModelInstance.h"
|
|
#include "V8DataModel/Workspace.h"
|
|
#include "V8DataModel/DataModel.h"
|
|
#include "V8World/World.h"
|
|
#include "V8World/Primitive.h"
|
|
#include "V8World/Buoyancy.h"
|
|
#include "Util/RunStateOwner.h"
|
|
#include "V8datamodel/FastLogSettings.h"
|
|
|
|
const char *const RBX::sPhysicsSettings = "PhysicsSettings";
|
|
|
|
// Don't show tree in release mode - has ROBLOX specific secrets as to how we do assembly
|
|
|
|
#ifdef _DEBUG
|
|
#define __RBX_SECRET_DEBUGGING
|
|
#endif
|
|
|
|
#ifdef _NOOPT
|
|
#define __RBX_SECRET_DEBUGGING
|
|
#endif
|
|
|
|
using namespace RBX;
|
|
|
|
REFLECTION_BEGIN();
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowAnchoredParts("AreAnchorsShown", "Display", &PhysicsSettings::getShowAnchoredParts, &PhysicsSettings::setShowAnchoredParts);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowPartCoordinateFrames("ArePartCoordsShown", "Display", &PhysicsSettings::getShowPartCoordinateFrames, &PhysicsSettings::setShowPartCoordinateFrames);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowUnalignedParts("AreUnalignedPartsShown", "Display", &PhysicsSettings::getShowUnalignedParts, &PhysicsSettings::setShowUnalignedParts);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowModelCoordinateFrames("AreModelCoordsShown", "Display", &PhysicsSettings::getShowModelCoordinateFrames, &PhysicsSettings::setShowModelCoordinateFrames);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowWorldCoordinateFrame("AreWorldCoordsShown", "Display", &PhysicsSettings::getShowWorldCoordinateFrame, &PhysicsSettings::setShowWorldCoordinateFrame);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowEPhysicsOwners("AreOwnersShown", "Display", &PhysicsSettings::getShowEPhysicsOwners, &PhysicsSettings::setShowEPhysicsOwners);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowEPhysicsRegions("AreRegionsShown", "Display", &PhysicsSettings::getShowEPhysicsRegions, &PhysicsSettings::setShowEPhysicsRegions);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_HighlightAwakeParts("AreAwakePartsHighlighted", "Display", &PhysicsSettings::getHighlightAwakeParts, &PhysicsSettings::setHighlightAwakeParts);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowBodyTypes("AreBodyTypesShown", "Display", &PhysicsSettings::getShowBodyTypes, &PhysicsSettings::setShowBodyTypes);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowReceiveAge("IsReceiveAgeShown", "Display", &PhysicsSettings::getShowReceiveAge, &PhysicsSettings::setShowReceiveAge);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowContactPoints("AreContactPointsShown", "Display", &PhysicsSettings::getShowContactPoints, &PhysicsSettings::setShowContactPoints);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowJointCoordinates("AreJointCoordinatesShown", "Display", &PhysicsSettings::getShowJointCoordinates, &PhysicsSettings::setShowJointCoordinates);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowMechanisms("AreMechanismsShown", "Display", &PhysicsSettings::getShowMechanisms, &PhysicsSettings::setShowMechanisms);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowAssemblies("AreAssembliesShown", "Display", &PhysicsSettings::getShowAssemblies, &PhysicsSettings::setShowAssemblies);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ShowSpanningTree("IsTreeShown", "Display", &PhysicsSettings::getShowSpanningTree, &PhysicsSettings::setShowSpanningTree);
|
|
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_AllowSleep("AllowSleep", "Performance", &PhysicsSettings::getAllowSleep, &PhysicsSettings::setAllowSleep);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ParallelPhysics("ParallelPhysics", "Performance", &PhysicsSettings::getParallelPhysics, &PhysicsSettings::setParallelPhysics);
|
|
static Reflection::EnumPropDescriptor<PhysicsSettings, EThrottle::EThrottleType> prop_enviromentalThrottle("PhysicsEnvironmentalThrottle", "Performance", &PhysicsSettings::getEThrottle, &PhysicsSettings::setEThrottle);
|
|
static Reflection::PropDescriptor<PhysicsSettings, double> prop_ThrottleAdjustTime("ThrottleAdjustTime", "Performance", &PhysicsSettings::getThrottleAdjustTime, &PhysicsSettings::setThrottleAdjustTime);
|
|
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_RenderDecompositionData("ShowDecompositionGeometry", "Display", &PhysicsSettings::getRenderDecompositionData, &PhysicsSettings::setRenderDecompositionData);
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_PhysicsAnalyzerEnabled("PhysicsAnalyzerEnabled", category_Data, &PhysicsSettings::getPhysicsAnalyzerState, NULL, Reflection::PropertyDescriptor::UI, Security::Plugin);
|
|
|
|
#if defined(RBX_TEST_BUILD) || RBX_PLATFORM_IOS
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_ThrottleAt30Fps("Is30FpsThrottleEnabled", "Performance", &PhysicsSettings::getThrottleAt30Fps, &PhysicsSettings::setThrottleAt30Fps);
|
|
#endif
|
|
REFLECTION_END();
|
|
|
|
PhysicsSettings::PhysicsSettings() : throttleAdjustTime(1.0), physicsAnalyzerState(false)
|
|
{
|
|
setName("Physics");
|
|
}
|
|
|
|
|
|
#define SET_GET(Type, PropName, ObjName, propVar) \
|
|
\
|
|
\
|
|
void PhysicsSettings::set##PropName(Type value) {\
|
|
if (value != get##PropName()) {\
|
|
ObjName::propVar = value;\
|
|
raiseChanged(prop_##PropName);\
|
|
}\
|
|
}\
|
|
Type PhysicsSettings::get##PropName() const {\
|
|
return (ObjName::propVar);\
|
|
}\
|
|
|
|
// Display
|
|
SET_GET(bool, ShowAnchoredParts, PartInstance, showAnchoredParts);
|
|
SET_GET(bool, ShowPartCoordinateFrames, PartInstance, showPartCoordinateFrames);
|
|
SET_GET(bool, ShowUnalignedParts, PartInstance, showUnalignedParts);
|
|
SET_GET(bool, ShowModelCoordinateFrames, ModelInstance, showModelCoordinateFrames);
|
|
SET_GET(bool, ShowWorldCoordinateFrame, Workspace, showWorldCoordinateFrame); // TODO: Refactor: Take this field out of Workspace
|
|
SET_GET(bool, ShowEPhysicsOwners, Workspace, showEPhysicsOwners);
|
|
SET_GET(bool, ShowEPhysicsRegions, Workspace, showEPhysicsRegions);
|
|
SET_GET(bool, HighlightAwakeParts, PartInstance, highlightAwakeParts);
|
|
SET_GET(bool, ShowBodyTypes, PartInstance, showBodyTypes);
|
|
SET_GET(bool, ShowReceiveAge, PartInstance, showReceiveAge);
|
|
SET_GET(bool, ShowContactPoints, PartInstance, showContactPoints);
|
|
SET_GET(bool, ShowJointCoordinates, PartInstance, showJointCoordinates);
|
|
SET_GET(bool, ShowMechanisms, PartInstance, showMechanisms);
|
|
SET_GET(bool, ShowAssemblies, PartInstance, showAssemblies);
|
|
SET_GET(bool, ShowSpanningTree, PartInstance, showSpanningTree);
|
|
|
|
// Performance
|
|
SET_GET(bool, AllowSleep, Primitive, allowSleep);
|
|
SET_GET(bool, ParallelPhysics, RunService, parallelPhysicsUserEnabled);
|
|
|
|
// CSG Visibility
|
|
//SET_GET(bool, RenderDecompositionData, PartOperation, renderCollisionData);
|
|
|
|
void PhysicsSettings::setRenderDecompositionData(bool value)
|
|
{
|
|
if (value != getRenderDecompositionData())
|
|
{
|
|
PartOperation::renderCollisionData = value;
|
|
raisePropertyChanged(prop_RenderDecompositionData);
|
|
}
|
|
}
|
|
|
|
bool PhysicsSettings::getRenderDecompositionData() const
|
|
{
|
|
return PartOperation::renderCollisionData;
|
|
}
|
|
|
|
|
|
EThrottle::EThrottleType PhysicsSettings::getEThrottle() const
|
|
{
|
|
return EThrottle::globalDebugEThrottle;
|
|
}
|
|
|
|
void PhysicsSettings::setEThrottle(EThrottle::EThrottleType value)
|
|
{
|
|
if (value != getEThrottle()) {
|
|
EThrottle::globalDebugEThrottle = value;
|
|
raiseChanged(prop_enviromentalThrottle);
|
|
}
|
|
}
|
|
|
|
bool PhysicsSettings::getThrottleAt30Fps() const
|
|
{
|
|
return DataModel::throttleAt30Fps;
|
|
}
|
|
|
|
void PhysicsSettings::setThrottleAt30Fps(bool value)
|
|
{
|
|
// Task Scheduler also needs to know about the current state of the DataModel Throttle.
|
|
if (TaskScheduler::singleton().isCyclicExecutive() && TaskScheduler::singleton().DataModel30fpsThrottle != value)
|
|
{
|
|
TaskScheduler::singleton().DataModel30fpsThrottle = value;
|
|
}
|
|
if (value != getThrottleAt30Fps()) {
|
|
DataModel::throttleAt30Fps = value;
|
|
#ifdef MEMORY_PROFILE
|
|
raiseChanged(prop_ThrottleAt30Fps);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void PhysicsSettings::setThrottleAdjustTime(double value)
|
|
{
|
|
if (value != throttleAdjustTime)
|
|
{
|
|
throttleAdjustTime = value;
|
|
raiseChanged(prop_ThrottleAdjustTime);
|
|
}
|
|
}
|
|
|
|
void PhysicsSettings::setPhysicsAnalyzerState( bool enabled )
|
|
{
|
|
if (physicsAnalyzerState != enabled)
|
|
{
|
|
physicsAnalyzerState = enabled;
|
|
raisePropertyChanged(prop_PhysicsAnalyzerEnabled);
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef __RBX_SECRET_DEBUGGING
|
|
|
|
REFLECTION_BEGIN();
|
|
static Reflection::PropDescriptor<PhysicsSettings, bool> prop_HighlightSleepParts("AreSleepPartsHighlighted", "Secret Display", &PhysicsSettings::getHighlightSleepParts, &PhysicsSettings::setHighlightSleepParts);
|
|
static Reflection::PropDescriptor<PhysicsSettings, float> prop_WaterViscosity("WaterViscosity", "Simulation", &PhysicsSettings::getWaterViscosity, &PhysicsSettings::setWaterViscosity);
|
|
REFLECTION_END();
|
|
|
|
SET_GET(bool, HighlightSleepParts, PartInstance, highlightSleepParts);
|
|
SET_GET(float, WaterViscosity, BuoyancyContact, waterViscosity);
|
|
#endif
|
|
|