示例#1
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            ICoreClientAPI clientApi = (ICoreClientAPI)api;
            Block          block     = api.World.BlockAccessor.GetBlock(pos);
            MeshData       mesh      = clientApi.TesselatorManager.GetDefaultBlockMesh(block);

            if (mesh == null)
            {
                return(true);
            }

            mesher.AddMeshData(mesh);

            for (int i = 0; i < 4; i++)
            {
                if (toolMeshes[i] == null)
                {
                    continue;
                }
                mesher.AddMeshData(toolMeshes[i]);
            }


            return(true);
        }
示例#2
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (AddStands)
            {
                if (RequiresStand(Position, orients[0].Normali))
                {
                    // Add west stand
                    MeshData mesh = getStandMesh("west");

                    mesh = rotStand(mesh);
                    if (mesh != null)
                    {
                        mesher.AddMeshData(mesh);
                    }
                }

                if (RequiresStand(Position, orients[1].Normali))
                {
                    // Add east stand
                    MeshData mesh = getStandMesh("east");
                    mesh = rotStand(mesh);
                    if (mesh != null)
                    {
                        mesher.AddMeshData(mesh);
                    }
                }
            }

            return(base.OnTesselation(mesher, tesselator));
        }
示例#3
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            mat.Identity();
            mat.RotateYDeg(block.Shape.rotateY);

            return(base.OnTesselation(mesher, tessThreadTesselator));
        }
示例#4
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            lock (inventoryLock)
            {
                if (!inventory[0].Empty)
                {
                    int size = Layers * 2;
                    if (mesher is EntityBlockFallingRenderer)
                    {
                        size = 2;                                       // Haxy solution >.>
                    }
                    Shape    shape = capi.TesselatorManager.GetCachedShape(new AssetLocation("block/basic/layers/" + GameMath.Clamp(size, 2, 16) + "voxel"));
                    MeshData meshdata;
                    capi.Tesselator.TesselateShape("coalpile", shape, out meshdata, this);

                    if (burning)
                    {
                        for (int i = 0; i < meshdata.FlagsCount; i++)
                        {
                            meshdata.Flags[i] |= 196; // glow level
                        }
                    }

                    mesher.AddMeshData(meshdata);
                }
            }

            return(true);
        }
示例#5
0
            // Implementation of IBlockShapeSupplier
            public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
            {
                mesher.AddMeshData(plane);

                // We return so that the default block cube mesh is also added
                return(false);
            }
示例#6
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            bool skipmesh = base.OnTesselation(mesher, tesselator);

            if (skipmesh)
            {
                return(true);
            }


            if (ownMesh == null)
            {
                return(true);
            }

            if (labelMesh == null)
            {
                genLabelMesh();
            }

            mesher.AddMeshData(ownMesh);
            mesher.AddMeshData(labelMesh);

            return(true);
        }
示例#7
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (ownBlock == null)
            {
                return(false);
            }
            string direc = ownBlock.Variant["side"];
            float  yDeg  = BlockFacing.FromCode(direc).HorizontalAngleIndex * 90;

            mesher.AddMeshData(
                quernBaseMesh.Clone()
                .Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0.0f, (yDeg - 90) * GameMath.DEG2RAD, 0.0f)
                );
            if (!IsGrinding)
            {
                mesher.AddMeshData(
                    quernTopMesh.Clone()
                    //.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0, renderer.Angle * GameMath.DEG2RAD, 0)
                    //.Translate(0 / 16f, 11 / 16f, 0 / 16f)
                    .Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0.0f, 0.0f, 0.0f)
                    .Translate(0.1f, 0.0f, 0.0f)
                    .Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0.0f, (yDeg - 90) * GameMath.DEG2RAD, -45.0f * GameMath.DEG2RAD)
                    .Translate(0.0f, 0.5f, 0.0f)
                    );
            }


            return(true);
        }
        public override bool OnTesselation(ITerrainMeshPool meshdata, ITesselatorAPI tesselator)
        {
            if (StorageProps == null)
            {
                return(false);
            }

            lock (inventoryLock)
            {
                meshdata.AddMeshData(meshes[0]);

                switch (StorageProps.Layout)
                {
                case EnumGroundStorageLayout.Halves:
                    // Right
                    meshdata.AddMeshData(meshes[1]);
                    return(false);

                case EnumGroundStorageLayout.Quadrants:
                    // Top right
                    meshdata.AddMeshData(meshes[1]);
                    // Bot left
                    meshdata.AddMeshData(meshes[2]);
                    // Bot right
                    meshdata.AddMeshData(meshes[3]);
                    return(false);
                }
            }

            return(true);
        }
示例#9
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (ownBlock == null || ownBlock.Code.Path.Contains("construct"))
            {
                return(false);
            }

            // 0: Extinct
            // 1: Extinct-cooking
            // 2: Extinct-wide
            // 3: Lit
            // 4: Lit-cooking
            // 5: Lit-wide
            int index = IsBurning ? 3 : 0;

            ItemStack contentStack = inputStack == null ? outputStack : inputStack;
            MeshData  contentmesh  = getContentMesh(contentStack, ref index, tesselator);

            if (contentmesh != null)
            {
                mesher.AddMeshData(contentmesh);
            }

            mesher.AddMeshData(meshes[index]);

            return(true);
        }
示例#10
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            lightRbs = Api.World.BlockAccessor.GetLightRGBs(Pos);
            ICoreClientAPI capi    = Api as ICoreClientAPI;
            Shape          shape   = capi.Assets.TryGet("shapes/block/wood/mechanics/clutch-rest.json").ToObject <Shape>();
            float          rotateY = 0f;

            switch (Facing.Index)
            {
            case 0:
                rotateY = 180;
                break;

            case 1:
                rotateY = 90;
                break;

            case 3:
                rotateY = 270;
                break;

            default:
                break;
            }
            MeshData mesh;

            capi.Tesselator.TesselateShape(Block, shape, out mesh, new Vec3f(0, rotateY, 0));
            mesher.AddMeshData(mesh);
            return(true);
        }
示例#11
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            ICoreClientAPI capi = api as ICoreClientAPI;

            Matrixf mat = new Matrixf();

            mat.RotateYDeg(block.Shape.rotateY);

            for (int i = 0; i < 8; i++)
            {
                if (inv[i].Empty)
                {
                    continue;
                }

                ItemStack  stack      = inv[i].Itemstack;
                BlockCrock crockblock = stack.Collectible as BlockCrock;
                Vec3f      rot        = new Vec3f(0, block.Shape.rotateY, 0);

                MeshData mesh = BlockEntityCrock.GetMesh(tessThreadTesselator, api, crockblock, crockblock.GetContents(api.World, stack), crockblock.GetRecipeCode(api.World, stack), rot);

                float y = i >= 4 ? 10 / 16f : 2 / 16f;
                float x = (i % 2 == 0) ? 4 / 16f : 12 / 16f;
                float z = ((i % 4) >= 2) ? 10 / 16f : 4 / 16f;

                Vec4f offset = mat.TransformVector(new Vec4f(x - 0.5f, y, z - 0.5f, 0));
                mesh.Translate(offset.XYZ);
                mesher.AddMeshData(mesh);
            }

            return(false);
        }
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (ownMesh == null)
            {
                return(false);
            }

            string facing = ownBlock.LastCodePart();

            if (facing == "north")
            {
                mesher.AddMeshData(ownMesh.Clone().Rotate(new API.MathTools.Vec3f(0.5f, 0.5f, 0.5f), 0, 1 * GameMath.PIHALF, 0));
            }
            if (facing == "east")
            {
                mesher.AddMeshData(ownMesh.Clone().Rotate(new API.MathTools.Vec3f(0.5f, 0.5f, 0.5f), 0, 0 * GameMath.PIHALF, 0));
            }
            if (facing == "south")
            {
                mesher.AddMeshData(ownMesh.Clone().Rotate(new API.MathTools.Vec3f(0.5f, 0.5f, 0.5f), 0, 3 * GameMath.PIHALF, 0));
            }
            if (facing == "west")
            {
                mesher.AddMeshData(ownMesh.Clone().Rotate(new API.MathTools.Vec3f(0.5f, 0.5f, 0.5f), 0, 2 * GameMath.PIHALF, 0));
            }

            return(true);
        }
示例#13
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            if (hasLid())
            {
                return(false);           // no need to tesselate contents if covered
            }
            Shape shape = capi.TesselatorManager.GetCachedShape(Block.Shape.Base);

            MeshData meshdataMain;
            MeshData meshdataSecondary;

            tessThreadTesselator.TesselateShape(Block, shape, out meshdataMain, null, null, selectiveElementsMain);
            tessThreadTesselator.TesselateShape(Block, shape, out meshdataSecondary, null, null, selectiveElementsSecondary);
            if (blockScs.Orientation == BlockFacing.EAST)
            {
                meshdataMain.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0, -GameMath.PIHALF, 0);
                meshdataSecondary.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0, -GameMath.PIHALF, 0);
            }

            meshdataSecondary.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0, GameMath.PI, 0);
            meshdataSecondary.Translate(blockScs.Orientation.Opposite.Normalf);

            mesher.AddMeshData(meshdataMain);
            mesher.AddMeshData(meshdataSecondary);

            return(false);
        }
示例#14
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (Block == null || Block.Code.Path.Contains("construct"))
            {
                return(false);
            }


            ItemStack contentStack = inputStack == null ? outputStack : inputStack;
            MeshData  contentmesh  = getContentMesh(contentStack, tesselator);

            if (contentmesh != null)
            {
                mesher.AddMeshData(contentmesh);
            }

            string burnState    = Block.Variant["burnstate"];
            string contentState = CurrentModel.ToString().ToLowerInvariant();

            if (burnState == "cold" && fuelSlot.Empty)
            {
                burnState = "extinct";
            }

            mesher.AddMeshData(getOrCreateMesh(burnState, contentState));

            return(true);
        }
示例#15
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            base.OnTesselation(mesher, tesselator);

            ICoreClientAPI capi    = Api as ICoreClientAPI;
            Shape          shape   = capi.Assets.TryGet("shapes/block/metal/mechanics/creativerotor-frame.json").ToObject <Shape>();
            float          rotateY = 0f;

            switch (BlockFacing.FromCode(Block.Variant["side"]).Index)
            {
            case 0:
                AxisSign = new int[] { 0, 0, 1 };
                rotateY  = 180;
                break;

            case 1:
                AxisSign = new int[] { -1, 0, 0 };
                rotateY  = 90;
                break;

            case 3:
                AxisSign = new int[] { 1, 0, 0 };
                rotateY  = 270;
                break;

            default:
                break;
            }
            MeshData mesh;

            capi.Tesselator.TesselateShape(Block, shape, out mesh, new Vec3f(0, rotateY, 0));
            mesher.AddMeshData(mesh);
            return(true);
        }
示例#16
0
 public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
 {
     if (currentMesh != null)
     {
         mesher.AddMeshData(currentMesh);
     }
     return(true);
 }
示例#17
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            MeshData mesh = getStandMesh(Block.Variant["orientation"]);

            mesher.AddMeshData(mesh);

            return(base.OnTesselation(mesher, tesselator));
        }
示例#18
0
 public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
 {
     if (inv[0].Empty)
     {
         return(true);
     }
     mesher.AddMeshData(mesh);
     return(true);
 }
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            if (animUtil.activeAnimationsByAnimCode.Count > 0)
            {
                return(true);
            }

            return(false);
        }
示例#20
0
 public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
 {
     if (currentMesh == null || ownBlock.Code.Path.Contains("clay"))
     {
         return(false);
     }
     mesher.AddMeshData(currentMesh.Clone().Rotate(new Vec3f(0.5f, 0.5f, 0.5f), 0, 0, 0));
     return(true);
 }
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            base.OnTesselation(mesher, tesselator);

            LightRgba = Api.World.BlockAccessor.GetLightRGBs(Blockentity.Pos);

            return false;

        }
示例#22
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (Harvestable)
            {
                mesher.AddMeshData(Api.ObjectCache["beehive-harvestablemesh-" + orientation] as MeshData);
                return(true);
            }

            return(false);
        }
示例#23
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (currentMesh == null)
            {
                currentMesh = GenMesh();
            }

            mesher.AddMeshData(currentMesh);
            return(true);
        }
示例#24
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            int   nowLevel          = FertilityLevel((nutrients[0] + nutrients[1] + nutrients[2]) / 3);
            Block farmlandBlock     = api.World.BlockAccessor.GetBlock(pos);
            Block nextFarmlandBlock = api.World.GetBlock(farmlandBlock.CodeWithParts(IsWatered ? "moist" : "dry", Fertilities.GetKeyAtIndex(nowLevel)));

            mesher.AddMeshData((api as ICoreClientAPI).TesselatorManager.GetDefaultBlockMesh(nextFarmlandBlock));

            return(true);
        }
示例#25
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (quantityMolds == 0)
            {
                return(true);
            }

            mesher.AddMeshData(meshesByQuantity[quantityMolds - 1]);

            return(true);
        }
示例#26
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            //ICoreClientAPI capi = api as ICoreClientAPI;
            if (Mesh == null)
            {
                return(false);
            }

            mesher.AddMeshData(Mesh);
            return(true);
        }
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            mesher.AddMeshData(branchMesh);

            if (leavesMesh != null)
            {
                mesher.AddMeshData(leavesMesh);
            }

            return(true);
        }
示例#28
0
        public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator)
        {
            if (!HasDisc)
            {
                return(false);
            }

            mesher.AddMeshData(baseMesh);

            return(true);
        }
示例#29
0
        public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator)
        {
            bool parentSkip = base.OnTesselation(mesher, tessThreadTesselator);

            if (animUtil.activeAnimationsByAnimCode.Count > 0 || parentSkip || (animUtil.animator != null && animUtil.animator.ActiveAnimationCount > 0))
            {
                return(true);
            }

            return(false);
        }
示例#30
0
        public override bool OnTesselation(ITerrainMeshPool meshdata, ITesselatorAPI tesselator)
        {
            lock (inventoryLock)
            {
                int index = Math.Min(16, (int)Math.Ceiling(inventory[0].StackSize / 2.0));

                meshdata.AddMeshData(meshes[index]);
            }

            return(true);
        }