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); }
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)); }
public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tessThreadTesselator) { mat.Identity(); mat.RotateYDeg(block.Shape.rotateY); return(base.OnTesselation(mesher, tessThreadTesselator)); }
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); }
// 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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { if (currentMesh != null) { mesher.AddMeshData(currentMesh); } return(true); }
public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { MeshData mesh = getStandMesh(Block.Variant["orientation"]); mesher.AddMeshData(mesh); return(base.OnTesselation(mesher, tesselator)); }
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); }
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; }
public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { if (Harvestable) { mesher.AddMeshData(Api.ObjectCache["beehive-harvestablemesh-" + orientation] as MeshData); return(true); } return(false); }
public override bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { if (currentMesh == null) { currentMesh = GenMesh(); } mesher.AddMeshData(currentMesh); return(true); }
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); }
public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { if (quantityMolds == 0) { return(true); } mesher.AddMeshData(meshesByQuantity[quantityMolds - 1]); return(true); }
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); }
public bool OnTesselation(ITerrainMeshPool mesher, ITesselatorAPI tesselator) { if (!HasDisc) { return(false); } mesher.AddMeshData(baseMesh); return(true); }
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); }
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); }