コード例 #1
0
        private void updateDistanceFromCam()
        {
            LargeWorldStreamer main = LargeWorldStreamer.main;

            if (main == null)
            {
                return;
            }
            float sqrMagnitude = (base.gameObject.transform.position - main.cachedCameraPosition).sqrMagnitude;

            this.setRigidBodyPhysicsEnabled(sqrMagnitude < 1600f);
        }
コード例 #2
0
        public static void PerformOctreesEdit(this LargeWorldStreamer largeWorldStreamer, Int3.Bounds blockBounds, LargeWorldStreamer.DistanceField df, bool isAdd = false, byte type = 1)
        {
            VoxelandData.OctNode.BlendArgs args = new VoxelandData.OctNode.BlendArgs(isAdd ? VoxelandData.OctNode.BlendOp.Union : VoxelandData.OctNode.BlendOp.Subtraction, false, isAdd ? type : (byte)0);
            var streamerV2 = largeWorldStreamer.streamerV2;

            materialTypeOfLastOctreesEditAdd = 0;

            blockBounds = blockBounds.Expanded(1);
            foreach (Int3 @int in blockBounds / largeWorldStreamer.blocksPerTree)
            {
                if (largeWorldStreamer.CheckRoot(@int))
                {
                    Octree octree = streamerV2.octreesStreamer.GetOctree(@int);
                    if (octree != null)
                    {
                        Int3.Bounds          bounds = @int.Refined(largeWorldStreamer.blocksPerTree);
                        VoxelandData.OctNode root   = octree.ToVLOctree();
                        foreach (Int3 int2 in bounds.Intersect(blockBounds))
                        {
                            Vector3 wsPos = largeWorldStreamer.land.transform.TransformPoint(int2 + UWE.Utils.half3);

                            float num = df(wsPos);
                            if (num >= 0f)
                            {
                                VoxelandData.OctNode i = new VoxelandData.OctNode(type, VoxelandData.OctNode.EncodeDensity(num));

                                int blocksPerTree = largeWorldStreamer.blocksPerTree;
                                int x             = int2.x % blocksPerTree;
                                int y             = int2.y % blocksPerTree;
                                int z             = int2.z % blocksPerTree;

                                var node = root.GetNode(x, y, z, blocksPerTree / 2);
                                if (!isAdd && materialTypeOfLastOctreesEditAdd <= node.type)
                                {
                                    materialTypeOfLastOctreesEditAdd = node.type;
                                }

                                VoxelandData.OctNode octNode = VoxelandData.OctNode.Blend(node, i, args);
                                root.SetNode(x, y, z, blocksPerTree / 2, octNode.type, octNode.density);
                            }
                        }
                        root.Collapse();

                        streamerV2.octreesStreamer.SetBatchOctree(@int, root);

                        root.Clear();
                    }
                }
            }

            streamerV2.clipmapStreamer.AddToRangesEdited(blockBounds);
        }
コード例 #3
0
        static bool Prefix(LargeWorldStreamer __instance, Bounds bb, Quaternion rot, bool isAdd = false, byte type = 1)
        {
            Bounds aaBB = bb;

            Vector3 min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
            Vector3 max = new Vector3(float.MinValue, float.MinValue, float.MinValue);

            OrientedBounds.MinMaxBounds(OrientedBounds.TransformMatrix(bb.center, rot), Vector3.zero, bb.extents, ref min, ref max);

            aaBB.SetMinMax(min, max);

            Quaternion invRot = Quaternion.Inverse(rot);
            Vector3    c      = bb.center;

            __instance.PerformVoxelEdit(aaBB, (Vector3 wsPos) => VoxelandMisc.SignedDistToBox(bb, c + invRot * (wsPos - c)), isAdd, type);

            return(false);
        }
コード例 #4
0
 public patch_CellManager(LargeWorldStreamer streamer, LargeWorldEntitySpawner spawner)
     : base(streamer, spawner)
 {
     //
 }
コード例 #5
0
 public static byte GetMaterialTypeOfLastOctreesEditAdd(this LargeWorldStreamer largeWorldStreamer)
 {
     return(materialTypeOfLastOctreesEditAdd);
 }
コード例 #6
0
        static bool Prefix(LargeWorldStreamer __instance, Int3.Bounds blockBounds, LargeWorldStreamer.DistanceField df, bool isAdd = false, byte type = 1)
        {
            __instance.PerformOctreesEdit(blockBounds, df, isAdd, type);

            return(false);
        }