public static bool GameTick_Prefix(RaycastLogic __instance) { if (Multiplayer.IsActive && Multiplayer.Session.LocalPlayer.IsClient) { if (__instance.factory == null) { // while we wait for factory data from server this is still null, prevent running into NRE return(false); } } return(true); }
/// <summary> /// Extract from RaycastLogic::GameTick /// Use to filter buidling /// </summary> public static void Select(RaycastLogic __instance, BuildingFilter filter) { int activeColHashCount = Traverse.Create((object)__instance).Field("activeColHashCount").GetValue <int>(); int[] activeColHashes = Traverse.Create((object)__instance).Field("activeColHashes").GetValue <int[]>(); ColliderContainer[] colChunks = Traverse.Create((object)__instance).Field("colChunks").GetValue <ColliderContainer[]>(); if (!__instance.doCast || GameMain.localPlanet != __instance.planet || (VFInput.inFullscreenGUI || !Application.isFocused)) { return; } for (int i = 0; i < activeColHashCount; i++) { int activeColHash = activeColHashes[i]; ColliderData[] colliderPool = colChunks[activeColHash].colliderPool; for (int j = 1; j < colChunks[activeColHash].cursor; j++) { if (colliderPool[j].idType != 0) { EObjectType objType = colliderPool[j].objType; bool typeFlag = objType == EObjectType.Vein || objType == EObjectType.Vegetable; if (!typeFlag || !__instance.ignoreVegeAndVein) { if ((colliderPool[j].usage == EColliderUsage.Build || typeFlag) && colliderPool[j].shape == EColliderShape.Box) { //Send to filter filter(colliderPool[j]); } } } } } }
public static void Prefix(RaycastLogic __instance) { raycastLogic = __instance; }