Пример #1
0
        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);
        }
Пример #2
0
            /// <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]);
                                }
                            }
                        }
                    }
                }
            }
Пример #3
0
 public static void Prefix(RaycastLogic __instance)
 {
     raycastLogic = __instance;
 }