Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
 internal override void PopulateData(ModuleData moduleData)
 {
     _data = new ModulePhysicsSettingsData((ModulePhysicsSettingsData)moduleData);
     ApplyData();
 }
Exemplo n.º 3
0
    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;
                }
            }
        }
    }