Esempio n. 1
0
            /// <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();
                        }
                    }
                }
            }
Esempio n. 2
0
            /// <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;
                            }
                        }
                    }
                }
            }