public Planet(int x, int y, int size) { this.Position = new Vector2(x, y); this.Size = size; this.Health = GameState.Rand.Next(this.Size / 2, this.Size * 2); this.Type = (GameState.Rand.Next(4) >= 2 ? EPlanetType.Fuel : EPlanetType.Metal); }
public static IEnumerable <CodeInstruction> _OnLateUpdate_Transpiler(IEnumerable <CodeInstruction> instructions) { CodeMatcher matcher = new CodeMatcher(instructions) .MatchForward(true, new CodeMatch(OpCodes.Ldarg_0), new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(UIVirtualStarmap), "starPool")), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(i => i.opcode == OpCodes.Callvirt && ((MethodInfo)i.operand).Name == "get_Item"), new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(UIVirtualStarmap.StarNode), "nameText")), new CodeMatch(i => i.opcode == OpCodes.Callvirt && ((MethodInfo)i.operand).Name == "get_gameObject"), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(i => i.opcode == OpCodes.Callvirt && ((MethodInfo)i.operand).Name == "SetActive"), new CodeMatch(OpCodes.Ldloc_S)); if (matcher.IsInvalid) { Log.Warn("UIVirtualStarmap transpiler could not find injection point, not patching!"); return(instructions); } matcher.Advance(1) .SetAndAdvance(OpCodes.Ldloc_2, null) // change 'if (flag2 && flag)' to 'if (flag2 && pressing)' .Advance(2); // now remove original logic in this if(){} for (int i = 0; i < 39; i++) { matcher.SetAndAdvance(OpCodes.Nop, null); } // add own logic matcher.InsertAndAdvance(new CodeInstruction(OpCodes.Ldarg_0), new CodeInstruction(OpCodes.Ldloc_S, 12), HarmonyLib.Transpilers.EmitDelegate <ShowSolarsystemDetails>((UIVirtualStarmap starmap, int starIndex) => { if (pressSpamProtector) { return; } pressSpamProtector = true; if (Multiplayer.Session != null && Multiplayer.Session.IsInLobby && starmap.clickText == "") { ClearStarmap(starmap); ShowSolarSystem(starmap, starIndex); } else if (Multiplayer.Session != null && Multiplayer.Session.IsInLobby && starmap.clickText != "") { string[] split = starmap.clickText.Split(' '); int starId = 0; starId = Convert.ToInt32(split[0]); StarData starData = starmap._galaxyData.StarById(starId); // no increment as we stored the actual id in there if (starData == null || starIndex == 0) // starIndex == 0 is the star in the middle, so we need to decrement by 1 below { return; } PlanetData pData = starData.planets[starIndex - 1]; if (pData == null) { return; } if (UIRoot.instance.uiGame.planetDetail.planet != null && UIRoot.instance.uiGame.planetDetail.planet.id == pData.id && pData.type != EPlanetType.Gas) { // clicked on planet and details already visible, so set as new birth planet starmap._galaxyData.birthStarId = starId; starmap._galaxyData.birthPlanetId = pData.id; GameMain.data.galaxy.birthStarId = starId; GameMain.data.galaxy.birthPlanetId = pData.id; customBirthStar = starData.id; customBirthPlanet = pData.id; Log.Info($"set birth planet{pData.id} {pData.displayName}"); Text text = GameObject.Find("UI Root/Overlay Canvas/Galaxy Select/start-button/start-text").GetComponent <Text>(); text.text = $"Start Game at {pData.displayName}"; text.horizontalOverflow = HorizontalWrapMode.Overflow; if (pData.data == null) { Button button = GameObject.Find("UI Root/Overlay Canvas/Galaxy Select/start-button").GetComponent <Button>(); button.interactable = false; EPlanetType planetType = pData.type; pData.type = EPlanetType.Gas; PlanetModelingManager.genPlanetReqList.Enqueue(pData); pData.onLoaded += (PlanetData planet) => { pData.type = planetType; button.interactable = true; }; } } starmap.clickText = split[0] + " " + starIndex.ToString(); UIRoot.instance.uiGame.SetPlanetDetail(pData); GameObject.Find("UI Root/Overlay Canvas/Galaxy Select/right-group")?.SetActive(false); UIRoot.instance.uiGame.planetDetail.gameObject.SetActive(true); UIRoot.instance.uiGame.planetDetail.gameObject.GetComponent <RectTransform>().parent.gameObject.SetActive(true); UIRoot.instance.uiGame.planetDetail.gameObject.GetComponent <RectTransform>().parent.gameObject.GetComponent <RectTransform>().parent.gameObject.SetActive(true); UIRoot.instance.uiGame.planetDetail._OnUpdate(); } })); // change for loop to start at 0 instead of 1 matcher.Start(); matcher.MatchForward(true, new CodeMatch(OpCodes.Stloc_2), new CodeMatch(OpCodes.Ldarg_0), new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(UIVirtualStarmap), "clickText")), new CodeMatch(i => i.opcode == OpCodes.Call && ((MethodInfo)i.operand).Name == "IsNullOrEmpty"), new CodeMatch(OpCodes.Ldc_I4_0), new CodeMatch(OpCodes.Ceq), new CodeMatch(OpCodes.Stloc_3) ) .Advance(1) .SetInstruction(new CodeInstruction(OpCodes.Ldc_I4_0)); // mark the correct star as birth point matcher.Start(); matcher.MatchForward(true, new CodeMatch(OpCodes.Ldc_R4), new CodeMatch(OpCodes.Stloc_1), new CodeMatch(OpCodes.Br), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(OpCodes.Stloc_1), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(OpCodes.Stloc_0), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(OpCodes.Brtrue) ) .Advance(-1) .SetAndAdvance(OpCodes.Nop, null) .InsertAndAdvance(new CodeInstruction(OpCodes.Ldarg_0)) .InsertAndAdvance(new CodeInstruction(OpCodes.Ldloc_S, 5)) .Insert(HarmonyLib.Transpilers.EmitDelegate <IsBirthStar>((UIVirtualStarmap starmap, int starIndex) => { return(starmap.starPool[starIndex].starData.id != starmap._galaxyData.birthStarId && starmap.starPool[starIndex].starData.id != starmap._galaxyData.birthPlanetId); })); // listen for general mouse clicks to deselect planet / solar system matcher.Start(); matcher.MatchForward(true, new CodeMatch(OpCodes.Br), new CodeMatch(OpCodes.Ldarg_0), new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(UIVirtualStarmap), "starPool")), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(i => i.opcode == OpCodes.Callvirt && ((MethodInfo)i.operand).Name == "get_Item"), new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(UIVirtualStarmap.StarNode), "active")), new CodeMatch(OpCodes.Brfalse), new CodeMatch(OpCodes.Ldloc_S), new CodeMatch(OpCodes.Ldloc_0), new CodeMatch(OpCodes.Ceq) ) .Advance(3) .InsertAndAdvance(new CodeInstruction(OpCodes.Ldarg_0)) .InsertAndAdvance(new CodeInstruction(OpCodes.Ldloc_0)) .InsertAndAdvance(HarmonyLib.Transpilers.EmitDelegate <TrackPlayerClick>((UIVirtualStarmap starmap, int starIndex) => { bool pressing = VFInput.rtsConfirm.pressing; if ((pressing && !pressSpamProtector) && starIndex == -1) { if (starmap.clickText != "" && UIRoot.instance.uiGame.planetDetail.gameObject.activeSelf) // hide planet details { GameObject.Find("UI Root/Overlay Canvas/Galaxy Select/right-group").SetActive(true); UIRoot.instance.uiGame.planetDetail.gameObject.SetActive(false); } else if (starmap.clickText != "" && !UIRoot.instance.uiGame.planetDetail.gameObject.activeSelf) // hide solar system details { starmap.clickText = ""; starmap.OnGalaxyDataReset(); } pressSpamProtector = true; } })); return(matcher.InstructionEnumeration()); }
public OwnedPlanet(int x, int y, int size, EPlanetType type) { this.Position = new Vector2(x, y); this.Size = size; this.Type = type; }
public Connection(Vector2 targetPos, Vector2 startPos, EPlanetType type) { _targetPos = targetPos; _startPos = startPos; _type = type; }