public void RegenCircuitMesh(VoxelCircuit circuit) { networkStates = new Dictionary <int, byte>(); circuitMesh = new MeshData(24, 36, false); MeshData singleVoxelMesh = getsimpleVoxelMesh(); wireMeshesRefs = new Dictionary <int, MeshRef>(); Vec3f rotate = new Vec3f(0, 0, 0); if (facing != null && orientation != null) { rotate = SignalsUtils.FacingToRotation(orientation, facing); } int j = 0; foreach (VoxelWire net in circuit.wiring.networks.Values) { tmpMesh = GetNetworkMesh(net, singleVoxelMesh); tmpMesh.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), rotate.X * GameMath.PI / 180, rotate.Y * GameMath.PI / 180, rotate.Z * GameMath.PI / 180); wireMeshesRefs[net.id] = capi.Render.UploadMesh(tmpMesh); j++; } foreach (CircuitComponent comp in circuit.components) { circuitMesh.AddMeshData(comp.getMesh(capi)); } circuitMesh.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), rotate.X * GameMath.PI / 180, rotate.Y * GameMath.PI / 180, rotate.Z * GameMath.PI / 180); circuitMeshRef = capi.Render.UploadMesh(circuitMesh); }
public void OnUseOver(IPlayer byPlayer, Vec3i voxelHitPos, Vec3i voxelBoxPos, BlockFacing facing, ItemStack itemStack, bool mouseBreakMode) { Item heldItem = itemStack?.Item; if (heldItem?.Code?.ToString() == "signals:el_wire") { if (mouseBreakMode) { if (wiring.OnRemove(voxelHitPos)) { AvailableWireVoxels++; if (AvailableWireVoxels >= 25) { byPlayer.InventoryManager.TryGiveItemstack(new ItemStack(heldItem)); AvailableWireVoxels = 0; } } return; } if (canPlaceWireAt(voxelHitPos.AddCopy(facing))) { if (AvailableWireVoxels == 0) { AvailableWireVoxels = 25; //slot.TakeOut(1); //slot.MarkDirty(); } wiring.OnAdd(voxelHitPos.AddCopy(facing)); AvailableWireVoxels--; } return; } CircuitComponent comp = SignalsUtils.GetCircuitComponentFromItem(api, heldItem); if (comp != null) { comp.Pos = voxelBoxPos.Clone(); comp.myCircuit = this; comp.Initialize(api, this); components.Add(comp); } }
public MeshData GetCircuitMeshForItem(VoxelCircuit circuit) { MeshData singleVoxelMesh = getsimpleVoxelMesh(); MeshData outMesh = new MeshData(24, 36, false); Vec3f rotate = new Vec3f(0, 0, 0); if (facing != null && orientation != null) { rotate = SignalsUtils.FacingToRotation(orientation, facing); } foreach (VoxelWire net in circuit.wiring.networks.Values) { outMesh.AddMeshData(GetNetworkMesh(net, singleVoxelMesh)); } foreach (CircuitComponent comp in circuit.components) { outMesh.AddMeshData(comp.getMesh(capi)); } outMesh.Rotate(new Vec3f(0.5f, 0.5f, 0.5f), rotate.X * GameMath.PI / 180, rotate.Y * GameMath.PI / 180, rotate.Z * GameMath.PI / 180); return(outMesh); }