public ModulePhysicsSettingsData(ModulePhysicsSettingsData modulePhysicsSettingsData) { id = modulePhysicsSettingsData.id; parentId = modulePhysicsSettingsData.parentId; name = modulePhysicsSettingsData.name; position = modulePhysicsSettingsData.position; scale = modulePhysicsSettingsData.scale; rotation = modulePhysicsSettingsData.rotation; tags = modulePhysicsSettingsData.tags; friction = modulePhysicsSettingsData.friction; drag = modulePhysicsSettingsData.drag; angularDrag = modulePhysicsSettingsData.angularDrag; usesGravity = modulePhysicsSettingsData.usesGravity; freezeRotationX = modulePhysicsSettingsData.freezeRotationX; freezeRotationY = modulePhysicsSettingsData.freezeRotationY; freezeRotationZ = modulePhysicsSettingsData.freezeRotationZ; freezePositionX = modulePhysicsSettingsData.freezePositionX; freezePositionY = modulePhysicsSettingsData.freezePositionY; freezePositionZ = modulePhysicsSettingsData.freezePositionZ; }
internal override void PopulateData(ModuleData moduleData) { _data = new ModulePhysicsSettingsData((ModulePhysicsSettingsData)moduleData); ApplyData(); }
private void PostProcessModules() { if (!GameHead.instance.isPreviewOrRuntime) { return; } ModulePhysicsSettings modulePhysicsSettings = null; foreach (KeyValuePair <int, Module> entry in _idModuleMap) { Module module = entry.Value; { if (module is ModulePhysicsSettings) { modulePhysicsSettings = (ModulePhysicsSettings)module; } if (rigidbody == null) { if (module is ModulePhysicsController || module is ModulePhysicsVelocityApplier || module is ModulePhysicsSettings) { rigidbody = base.gameObject.AddComponent <Rigidbody>(); rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative; } } if (module is ModulePhysicsImpactSensor) { _components.modulePhysicsImpactSensor = (ModulePhysicsImpactSensor)module; } if (module is ModuleArt) { MeshCollider meshCollider = module.GetComponent <MeshCollider>(); if (meshCollider != null) { meshCollider.convex = true; } } if (module.inspectionData.forceHideAtRuntime) { Renderer[] renderers = module.GetComponentsInChildren <Renderer>(); foreach (Renderer renderer in renderers) { if (renderer is ParticleSystemRenderer) { continue; } renderer.enabled = false; } } if (module.inspectionData.forceNoCollisionAtRuntime) { Collider[] colliders = module.GetComponentsInChildren <Collider>(); foreach (Collider collider in colliders) { collider.enabled = false; } } if (module.inspectionData.category == ModuleCategory.Mechanical || module.inspectionData.category == ModuleCategory.Scripting || module.inspectionData.category == ModuleCategory.Environment) { Renderer[] renderers = module.GetComponentsInChildren <Renderer>(); foreach (Renderer renderer in renderers) { renderer.enabled = false; } Collider[] colliders = module.GetComponentsInChildren <Collider>(); foreach (Collider collider in colliders) { collider.enabled = false; } } } if (modulePhysicsSettings != null) { ModulePhysicsSettingsData modulePhysicsSettingsData = (ModulePhysicsSettingsData)modulePhysicsSettings.data; rigidbody.drag = modulePhysicsSettingsData.drag; rigidbody.drag = modulePhysicsSettingsData.angularDrag; rigidbody.useGravity = modulePhysicsSettingsData.usesGravity; if (modulePhysicsSettingsData.freezeRotationX) { rigidbody.constraints = rigidbody.constraints | RigidbodyConstraints.FreezeRotationX; } if (modulePhysicsSettingsData.freezeRotationY) { rigidbody.constraints = rigidbody.constraints |= RigidbodyConstraints.FreezeRotationY; } if (modulePhysicsSettingsData.freezeRotationZ) { rigidbody.constraints = rigidbody.constraints | RigidbodyConstraints.FreezeRotationZ; } if (modulePhysicsSettingsData.freezePositionX) { rigidbody.constraints = rigidbody.constraints | RigidbodyConstraints.FreezePositionX; } if (modulePhysicsSettingsData.freezePositionY) { rigidbody.constraints = rigidbody.constraints | RigidbodyConstraints.FreezePositionY; } if (modulePhysicsSettingsData.freezePositionZ) { rigidbody.constraints = rigidbody.constraints | RigidbodyConstraints.FreezePositionZ; } PhysicMaterial physicMaterial = new PhysicMaterial(); physicMaterial.dynamicFriction = modulePhysicsSettingsData.friction; Collider[] colliders = base.gameObject.GetComponentsInChildren <Collider>(); foreach (Collider collider in colliders) { collider.sharedMaterial = physicMaterial; } } } }