public static void OnSetRecipe(ref AssemblerComponent __instance) { if (__instance.recipeId > 0) { __instance.recipeIsLocked = GameMain.history.RecipeUnlocked(__instance.recipeId); } }
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); }
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; } }
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); }
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; } } }
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); } }
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); } } }
private void Start() { animating = false; comp = GetComponent <AssemblerComponent>(); }