Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }