/// <summary> /// Orignal PlayerAction_Build::DetermineDestructPreviews /// </summary> public static void CreateEntityUpgradePreview( PlayerAction_Build __instance, List <int> idList, List <EObjectType> typeList, DeterminePreviews.PreviewsFilter filter ) { if (!VFInput.onGUI) { if (__instance.upgradeLevel == 1) { UICursor.SetCursor(ECursor.Upgrade); } else if (__instance.upgradeLevel == -1) { UICursor.SetCursor(ECursor.Downgrade); } } __instance.previewPose.position = Vector3.zero; __instance.previewPose.rotation = Quaternion.identity; __instance.ClearBuildPreviews(); foreach (int entityId in idList) { ItemProto itemProto = (ItemProto)Traverse.Create(__instance).Method("GetItemProto", entityId).GetValue(); Pose objectPose = (Pose)Traverse.Create(__instance).Method("GetObjectPose", entityId).GetValue(); bool flag = false; if (itemProto != null && itemProto.Grade > 0 && itemProto.Upgrades.Length > 0) { flag = true; } if (flag && filter(itemProto) == false) { __instance.AddBuildPreview(new BuildPreview()); BuildPreview buildPreview = __instance.buildPreviews[__instance.buildPreviews.Count - 1]; buildPreview.item = itemProto; buildPreview.desc = itemProto.prefabDesc; buildPreview.lpos = objectPose.position; buildPreview.lrot = objectPose.rotation; buildPreview.objId = entityId; if (buildPreview.desc.lodCount > 0 && buildPreview.desc.lodMeshes[0] != null) { buildPreview.needModel = true; } else { buildPreview.needModel = false; } buildPreview.isConnNode = true; if (buildPreview.desc.isInserter) { Pose objectPose2 = (Pose)Traverse.Create(__instance).Method("GetObjectPose2", buildPreview.objId).GetValue(); //Oringal pose objectPose2 = __instance.GetObjectPose2(buildPreview.objId); buildPreview.lpos2 = objectPose2.position; buildPreview.lrot2 = objectPose2.rotation; } if ((double)(buildPreview.lpos - __instance.player.position).sqrMagnitude > (double)__instance.player.mecha.buildArea * (double)__instance.player.mecha.buildArea) { buildPreview.condition = EBuildCondition.OutOfReach; __instance.cursorText = "目标超出范围".Translate(); __instance.cursorWarning = true; } else { buildPreview.condition = EBuildCondition.Ok; __instance.cursorText = "升级".Translate() + buildPreview.item.name + "\r\n" + "连锁升级提示".Translate(); } } } }
/// <summary> /// Orignal PlayerAction_Build::DetermineDestructPreviews /// </summary> public static void CreateEntityDestructPreview( PlayerAction_Build __instance, List <int> idList, List <EObjectType> typeList, DeterminePreviews.PreviewsFilter filter ) { if (!VFInput.onGUI) { UICursor.SetCursor(ECursor.Delete); } __instance.previewPose.position = Vector3.zero; __instance.previewPose.rotation = Quaternion.identity; __instance.ClearBuildPreviews(); foreach (int entityId in idList) { //int entityId = typeList[index] != EObjectType.Entity ? -entityIdList[index] : entityIdList[index]; ItemProto itemProto = (ItemProto)Traverse.Create(__instance).Method("GetItemProto", entityId).GetValue(); Pose objectPose = (Pose)Traverse.Create(__instance).Method("GetObjectPose", entityId).GetValue(); if (itemProto != null && filter(itemProto) == false) { //Add Build Preview __instance.AddBuildPreview(new BuildPreview()); BuildPreview buildPreview = __instance.buildPreviews[__instance.buildPreviews.Count - 1]; buildPreview.item = itemProto; buildPreview.desc = itemProto.prefabDesc; buildPreview.lpos = objectPose.position; buildPreview.lrot = objectPose.rotation; buildPreview.objId = entityId; int num = buildPreview.desc.lodCount <= 0 ? 0 : ((Object)buildPreview.desc.lodMeshes[0] != (Object)null ? 1 : 0); buildPreview.needModel = num != 0; buildPreview.isConnNode = true; if (buildPreview.desc.isInserter) { Pose objectPose2 = (Pose)Traverse.Create(__instance).Method("GetObjectPose2", buildPreview.objId).GetValue(); buildPreview.lpos2 = objectPose2.position; buildPreview.lrot2 = objectPose2.rotation; } PlanetData planetData = __instance.player.planetData; Vector3 vector3_1 = __instance.player.position; if (planetData.type == EPlanetType.Gas) { vector3_1 = vector3_1.normalized; Vector3 vector3_2 = vector3_1 * planetData.realRadius; } else { buildPreview.condition = EBuildCondition.Ok; __instance.cursorText = "拆除".Translate() + buildPreview.item.name + "\r\n" + "连锁拆除提示".Translate(); } if (buildPreview.desc.multiLevel) { int otherObjId; PlanetFactory factory = Traverse.Create((object)__instance).Field("factory").GetValue <PlanetFactory>(); factory.ReadObjectConn(buildPreview.objId, 15, out bool _, out otherObjId, out int _); if ((uint)otherObjId > 0U) { buildPreview.condition = EBuildCondition.Covered; __instance.cursorText = buildPreview.conditionText; } } } } }