Exemple #1
0
    private void PostProcessModules()
    {
        if (!GameHead.instance.isPreviewOrRuntime)
        {
            return;
        }

        ModulePhysicsSettings modulePhysicsSettings = null;

        int[] keys = _idModuleMap.Keys.ToArray();
        foreach (int key in keys)
        {
            Module module = _idModuleMap[key];
            if (module is ModuleArt)
            {
                MeshCollider meshCollider = module.GetComponent <MeshCollider>();
                if (meshCollider != null)
                {
                    meshCollider.convex = false;
                }
            }
            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;
                }
            }
        }
    }
Exemple #2
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;
                }
            }
        }
    }