Exemplo n.º 1
0
 public static void OnSetRecipe(ref AssemblerComponent __instance)
 {
     if (__instance.recipeId > 0)
     {
         __instance.recipeIsLocked = GameMain.history.RecipeUnlocked(__instance.recipeId);
     }
 }
Exemplo n.º 2
0
        public static bool CheckAssemblerRecipe(ref AssemblerComponent __instance)
        {
            if (!__instance.recipeIsLocked)
            {
                __instance.recipeIsLocked = GameMain.history.RecipeUnlocked(__instance.recipeId);
            }

            return(__instance.recipeIsLocked);
        }
    /// <summary>
    /// 获取工作台主要数据
    /// </summary>
    /// <param name="ac">工作台数据</param>
    /// <param name="ed">实体数据</param>
    /// <returns></returns>
    static PrebuildData GetPreDate(AssemblerComponent ac, EntityData ed)
    {
        PrebuildData prebuild = default(PrebuildData);

        prebuild.protoId    = (short)ed.protoId;
        prebuild.modelIndex = (short)ed.modelIndex;
        prebuild.pos        = ed.pos;
        prebuild.pos2       = VectorLF3.zero;
        prebuild.rot        = ed.rot;
        prebuild.rot2       = Quaternion.identity;
        prebuild.recipeId   = ac.recipeId;
        return(prebuild);
    }
Exemplo n.º 4
0
        public static void OnUIUpdate(UIAssemblerWindow __instance)
        {
            if (__instance.assemblerId == 0 || __instance.factory == null)
            {
                return;
            }
            AssemblerComponent assemblerComponent = __instance.factorySystem.assemblerPool[__instance.assemblerId];

            if (!assemblerComponent.recipeIsLocked)
            {
                __instance.stateText.text  = "recipeLockedWarn".Translate();
                __instance.stateText.color = __instance.workStoppedColor;
            }
        }
Exemplo n.º 5
0
        public static void OnRecipePickerReturnPatch(UIAssemblerWindow __instance)
        {
            if (__instance.assemblerId == 0 || __instance.factory == null)
            {
                return;
            }
            AssemblerComponent assemblerComponent = __instance.factorySystem.assemblerPool[__instance.assemblerId];

            if (assemblerComponent.id != __instance.assemblerId)
            {
                return;
            }
            SyncAssemblerFunctions(__instance.factorySystem, __instance.player.package, __instance.assemblerId);
        }
Exemplo n.º 6
0
    private void Update()
    {
        if (interactable == null)
        {
            if (lastInteractable == null || Vector3.Distance(this.transform.position, lastInteractable.transform.position) > distanceToSpawn)
            {
                GameObject instantiated = (GameObject)Instantiate(item, transform.position, transform.rotation);
                interactable = instantiated.GetComponent <Interactable>();
                instantiated.SetActive(true);
                interactable.GetComponent <Rigidbody>().position    = transform.position;
                interactable.GetComponent <Rigidbody>().rotation    = transform.rotation;
                interactable.GetComponent <Rigidbody>().isKinematic = true;

                instantiated.SetActive(false);
                StartCoroutine(DoGrow(instantiated));

                if (assembler)
                {
                    assemblerComponent         = instantiated.GetComponent <AssemblerComponent>();
                    assemblerComponent.enabled = false;
                    foreach (Collider collider in instantiated.GetComponentsInChildren <Collider>())
                    {
                        collider.gameObject.layer = 1;
                    }
                }
            }
        }
        else
        {
            if (interactable.attachedToHand)
            {
                interactable.GetComponent <Rigidbody>().isKinematic = false;

                if (assembler)
                {
                    foreach (Collider collider in interactable.GetComponentsInChildren <Collider>())
                    {
                        collider.gameObject.layer = 0;
                    }
                    assemblerComponent.enabled = true;
                }
                assemblerComponent = null;

                lastInteractable = interactable;
                interactable     = null;
            }
        }
    }
Exemplo n.º 7
0
    private void Update()
    {
        used = interactable.attachedToHand;

        if (used)
        {
            transform.parent = null;
            body.isKinematic = false;

            if (cycler == null)
            {
                cycler = CycleModes();
                StartCoroutine(cycler);
            }

            float      dist = 200;
            RaycastHit hit;
            bool       didHit = Physics.Raycast(aimer.transform.position, aimer.transform.forward, out hit);
            if (didHit)
            {
                dist = hit.distance;
            }

            confirmer.SetActive(status == DeleterStatus.Locked);

            if (status == DeleterStatus.Aiming)
            {
                laserbeam.transform.rotation = aimer.transform.rotation;
                if (didHit)
                {
                    if (hit.collider.GetComponentInParent <AssemblerComponent>())
                    {
                        if (hit.collider.GetComponentInParent <AssemblerComponent>().enabled)
                        {
                            comp           = hit.collider.GetComponentInParent <AssemblerComponent>();
                            hitTr          = hit.transform;
                            lockedPosition = hit.transform.InverseTransformPoint(hit.point);
                            comp.PreviewOneDelete();
                        }
                    }
                }
                else
                {
                    comp = null;
                }

                laserbeam.gameObject.SetActive(false);
                aimer.gameObject.SetActive(true);
                aimer.SetPosition(1, Vector3.forward * dist / aimer.transform.lossyScale.z);
            }

            if (status == DeleterStatus.Locked)
            {
                Vector3 worldLock = hitTr.transform.TransformPoint(lockedPosition);
                laserbeam.gameObject.SetActive(true);
                laserbeam.transform.rotation = Quaternion.LookRotation(worldLock - laserbeam.transform.position);

                laserbeam.SetPosition(1, laserbeam.transform.InverseTransformPoint(worldLock));
                aimer.gameObject.SetActive(false);
                comp.PreviewDelete();

                if (Vector3.Angle(aimer.transform.forward, worldLock - laserbeam.transform.position) > 30) // angle to break lock
                {
                    status = DeleterStatus.Aiming;                                                         //reset
                    au.PlayOneShot(au_error);
                }
            }

            if (status == DeleterStatus.Zapping)
            {
                laserbeam.gameObject.SetActive(true);
                laserbeam.SetPosition(1, Vector3.forward * dist / aimer.transform.lossyScale.z);
                aimer.gameObject.SetActive(false);
            }

            if (status == DeleterStatus.Cancelling)
            {
                laserbeam.gameObject.SetActive(true);
                laserbeam.SetPosition(1, Vector3.forward * dist / aimer.transform.lossyScale.z);
                aimer.gameObject.SetActive(false);
            }
        }
        else
        {
            comp = null;
            if (cycler != null)
            {
                StopCoroutine(cycler);
                cycler = null;
            }

            status = DeleterStatus.Aiming;
            laserbeam.gameObject.SetActive(false);
            aimer.gameObject.SetActive(false);
            confirmer.SetActive(false);
        }
    }
Exemplo n.º 8
0
    private IEnumerator CycleModes()
    {
        while (true)
        {
            while (status == DeleterStatus.Aiming)
            {
                if (interactable.attachedToHand)
                {
                    if (actionSelect.GetState(interactable.attachedToHand.handType))
                    {
                        if (comp != null)
                        {
                            status = DeleterStatus.Locked; // lock on
                            au.PlayOneShot(au_select);
                        }
                        else
                        {
                            status = DeleterStatus.Cancelling; // cancel
                            au.PlayOneShot(au_error);
                        }
                    }
                }
                yield return(null);
            }

            while (status == DeleterStatus.Locked)
            {
                if (interactable.attachedToHand)
                {
                    if (actionDelete.GetState(interactable.attachedToHand.handType))
                    {
                        comp.Delete();
                        comp   = null;
                        status = 0; // reset
                        au.PlayOneShot(au_zap);
                    }
                }
                yield return(null);
            }

            while (status == DeleterStatus.Zapping)
            {
                float zapTime = 2;
                while (zapTime > 0)
                {
                    zapTime -= Time.deltaTime * 4;
                    SetColor(zapTime);
                    yield return(null);
                }
                status = DeleterStatus.Aiming; // reset
                yield return(null);

                SetColor(1);
            }

            while (status == DeleterStatus.Cancelling)
            {
                float cancelTime = 1;
                while (cancelTime > 0)
                {
                    cancelTime -= Time.deltaTime * 4;
                    SetColor(cancelTime);
                    yield return(null);
                }
                status = DeleterStatus.Aiming; //reset
                yield return(null);

                SetColor(1);
            }

            while (interactable.attachedToHand != null && actionSelect.GetState(interactable.attachedToHand.handType))
            {
                yield return(null);
            }
        }
    }
Exemplo n.º 9
0
 private void Start()
 {
     animating = false;
     comp      = GetComponent <AssemblerComponent>();
 }