示例#1
0
    public void InitializeHandler()
    {
        dissolveOnContactLayerMask = LayerMask.GetMask(new string[] { "FactoryObject", "Floor", "Wall" });

        originalLayerByChildObject = new Dictionary <Transform, int>();
        RecursiveStoreInitialChildLayer(transform);

        dissolveShader = Shader.Find(dissolveShaderPath);
        if (dissolveShader == null)
        {
            Debug.Log($"WARNING - Unable to find shader: '{dissolveShaderPath}'");
        }

        generalSoundEffectPlayer = FindObjectOfType <GeneralSoundEffectPlayer>();

        partHandler = GetComponent <ConveyorPartHandler>();

        allRBs             = GetComponentsInChildren <Rigidbody>(true);
        allRBInitialMasses = new float[allRBs.Length];
        for (int i = 0; i < allRBs.Length; i++)
        {
            allRBInitialMasses[i] = allRBs[i].mass;
        }

        allObjectRenderers             = GetComponentsInChildren <Renderer>(true);
        allDefaultMaterialsPerRenderer = new List <Material[]>();
        foreach (Renderer objectRenderer in allObjectRenderers)
        {
            // Create copies of all original materials in the renderer
            Material[] rendererMaterials = new Material[objectRenderer.materials.Length];
            for (int i = 0; i < objectRenderer.materials.Length; i++)
            {
                // Make a copy then add it to stored array
                Material newMaterial = new Material(objectRenderer.materials[i]);
                rendererMaterials[i] = newMaterial;
            }

            allDefaultMaterialsPerRenderer.Add(rendererMaterials);
        }

        allDissolveMaterials            = new List <Material>();
        allDissolveMaterialsPerRenderer = new List <Material[]>();
        foreach (Renderer objectRenderer in allObjectRenderers)
        {
            // Create copies of all original materials in the renderer
            Material[] rendererMaterials = new Material[objectRenderer.materials.Length];
            for (int i = 0; i < objectRenderer.materials.Length; i++)
            {
                // Make a copy then change the shader, then add it to stored array
                Material newMaterial = new Material(objectRenderer.materials[i]);
                newMaterial.shader = dissolveShader;
                newMaterial.SetFloat("_DissolveRatio", 0.0f);
                rendererMaterials[i] = newMaterial;

                allDissolveMaterials.Add(newMaterial);
            }

            allDissolveMaterialsPerRenderer.Add(rendererMaterials);
        }
    }
    void Start()
    {
        soundEffectPlayer = FindObjectOfType <GeneralSoundEffectPlayer>();

        activeJobPartTypes  = new List <string>();
        activeTVBoxHandlers = new List <TVBoxHandler>();

        availableTVBoxHandlers = new List <TVBoxHandler>();
        foreach (TVBoxHandler tvBoxHandler in tvBoxHandlers)
        {
            availableTVBoxHandlers.Add(tvBoxHandler);
        }

        currentConveyorSpeed = conveyorBeltHandlers[0].GetSpeed();
        foreach (ConveyorBeltHandler beltHandler in conveyorBeltHandlers)
        {
            beltHandler.SetSpeed(0);
        }

        currentSpawnTimeMultiplier = spawnManager.GetSpawnTimeMultiplier();

        currentTimeMultiplier = tvBoxHandlers[0].GetTimeMultiplier();

        mainTVComponentObjects[0].SetActive(true);
        mainTVComponentObjects[1].SetActive(false);
        mainTVComponentObjects[2].SetActive(false);

        rightControllerDevice = InputDevices.GetDeviceAtXRNode(rightController);
        leftControllerDevice  = InputDevices.GetDeviceAtXRNode(leftController);

        StartCoroutine(BackgroundMusicPlayerCo());
    }
    public void InitializeHandler()
    {
        startingPartType = partType;
        allAttatchedBasePartTypes.Add(startingPartType);

        justLeftHandPartLayerMask  = LayerMask.GetMask(new string[] { "LeftHandPart" });
        justRightHandPartLayerMask = LayerMask.GetMask(new string[] { "RightHandPart" });

        physicsObjectHandler = GetComponent <GeneralPhysicsObjectHandler>();

        grabInteractableScript = GetComponent <XRGrabInteractable>();
        mainRenderer           = GetComponent <Renderer>();

        mainPartColl = GetComponent <Collider>();

        rb = GetComponent <Rigidbody>();

        generalSoundEffectPlayer = FindObjectOfType <GeneralSoundEffectPlayer>();

        // If it has sub parts to manage...
        if (subPartInfoByObject.Count > 0)
        {
            handGrabbingController = FindObjectOfType <HandGrabbingController>();
            if (handGrabbingController == null)
            {
                Debug.LogError($"ERROR - ({gameObject.name}) - Could not find object of type HandGrabbingController");
                return;
            }

            foreach (GameObject subPart in subPartInfoByObject.Keys)
            {
                Collider subPartBaseColl = subPart.GetComponent <Collider>();
                if (subPartBaseColl != null)
                {
                    subPartBaseColl.enabled = false;
                }
                // Disable the extra colls and renderers
                subPart.transform.GetChild(0).gameObject.SetActive(false);
                Renderer subPartRenderer = subPart.GetComponent <Renderer>();
                if (subPartRenderer != null)
                {
                    subPartRenderer.enabled = false;
                }

                subPart.transform.GetChild(1).GetChild(1).gameObject.SetActive(false);

                DropZoneHandler dropZoneHandler = subPart.transform.GetChild(1).GetChild(0).GetComponent <DropZoneHandler>();
                dropZoneHandler.SetConnectedConveyorBeltHandler(this);
                dropZoneHandler.SetActiveTriggerLayerMask(0);
                // Notify it when an object is released to check if it is under a trigger
                handGrabbingController.AddOnObjectReleasedListener(dropZoneHandler.OnObjectReleased);

                allDropZoneHandlers.Add(dropZoneHandler);
            }
        }

        initialInteractableGrabbableLayerMask = grabInteractableScript.interactionLayerMask;

        partsSpawnManager = FindObjectOfType <PartsSpawnManager>();

        physicsObjectHandler.InitializeHandler();

        // Initialize with all parts disabled
        OnPartDisabled(false);

        hasInitializedOnce = true;
    }