Exemple #1
0
        static Gtk.Toolbar CreateToolbar(CircuitEditor editor)
        {
            Gtk.Toolbar toolbar = new Gtk.Toolbar();

            SelectTool selectTool = new SelectTool(editor, toolbar);
            WireTool   wireTool   = new WireTool(editor, toolbar);
            // FIXME: Make this be selected with a callback or something
            //editor.CurrentTool = selectTool;

            // FIXME: We don't want to new the components here!!
            ComponentTool andTool = new ComponentTool(ComponentType.And, "And gate", editor, toolbar);

            ComponentTool notTool = new ComponentTool(ComponentType.Not, "Not gate", editor, toolbar);

            ComponentTool orTool = new ComponentTool(ComponentType.Or, "Or gate", editor, toolbar);

            ToolButton xorTool = new ToolButton(
                Util.Icon.XorGate(), "Xor Gate"
                );

            SeparatorToolItem sep = new SeparatorToolItem();

            toolbar.Insert(selectTool, 0);
            toolbar.Insert(wireTool, 1);
            toolbar.Insert(sep, 2);
            toolbar.Insert(andTool, 3);
            toolbar.Insert(notTool, 4);
            toolbar.Insert(orTool, 5);
            toolbar.Insert(xorTool, 6);

            return(toolbar);
        }
Exemple #2
0
    public void TryClear(BaseEntity.RPCMessage msg)
    {
        IOEntity component;

        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            num             = msg.read.UInt32();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(num);

        if (baseNetworkable == null)
        {
            component = null;
        }
        else
        {
            component = baseNetworkable.GetComponent <IOEntity>();
        }
        IOEntity oEntity = component;

        if (oEntity == null)
        {
            return;
        }
        oEntity.ClearConnections();
        oEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
    public void MakeConnection(BaseEntity.RPCMessage msg)
    {
        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            uid1             = msg.read.UInt32();
        int             index1           = msg.read.Int32();
        uint            uid2             = msg.read.UInt32();
        int             index2           = msg.read.Int32();
        BaseNetworkable baseNetworkable1 = BaseNetworkable.serverEntities.Find(uid1);
        IOEntity        newIOEnt1        = Object.op_Equality((Object)baseNetworkable1, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable1).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)newIOEnt1, (Object)null))
        {
            return;
        }
        BaseNetworkable baseNetworkable2 = BaseNetworkable.serverEntities.Find(uid2);
        IOEntity        newIOEnt2        = Object.op_Equality((Object)baseNetworkable2, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable2).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)newIOEnt2, (Object)null) || (double)Vector3.Distance(((Component)baseNetworkable2).get_transform().get_position(), ((Component)baseNetworkable1).get_transform().get_position()) > (double)WireTool.maxWireLength || (index1 >= newIOEnt1.inputs.Length || index2 >= newIOEnt2.outputs.Length) || (Object.op_Inequality((Object)newIOEnt1.inputs[index1].connectedTo.Get(true), (Object)null) || Object.op_Inequality((Object)newIOEnt2.outputs[index2].connectedTo.Get(true), (Object)null) || newIOEnt1.inputs[index1].rootConnectionsOnly && !newIOEnt2.IsRootEntity()))
        {
            return;
        }
        newIOEnt1.inputs[index1].connectedTo.Set(newIOEnt2);
        newIOEnt1.inputs[index1].connectedToSlot = index2;
        newIOEnt1.inputs[index1].connectedTo.Init();
        newIOEnt2.outputs[index2].connectedTo.Set(newIOEnt1);
        newIOEnt2.outputs[index2].connectedToSlot = index1;
        newIOEnt2.outputs[index2].connectedTo.Init();
        newIOEnt2.MarkDirtyForceUpdateOutputs();
        newIOEnt2.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        newIOEnt1.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Exemple #4
0
    public void RequestClear(BaseEntity.RPCMessage msg)
    {
        IOEntity component;

        IOEntity.IOSlot oSlot;
        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            num             = msg.read.UInt32();
        int             num1            = msg.read.Int32();
        bool            flag            = msg.read.Bit();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(num);

        if (baseNetworkable == null)
        {
            component = null;
        }
        else
        {
            component = baseNetworkable.GetComponent <IOEntity>();
        }
        IOEntity oEntity = component;

        if (oEntity == null)
        {
            return;
        }
        if (num1 >= (flag ? (int)oEntity.inputs.Length : (int)oEntity.outputs.Length))
        {
            return;
        }
        IOEntity.IOSlot oSlot1 = (flag ? oEntity.inputs[num1] : oEntity.outputs[num1]);
        if (oSlot1.connectedTo.Get(true) == null)
        {
            return;
        }
        IOEntity oEntity1 = oSlot1.connectedTo.Get(true);

        oSlot = (flag ? oEntity1.outputs[oSlot1.connectedToSlot] : oEntity1.inputs[oSlot1.connectedToSlot]);
        if (flag)
        {
            oEntity.UpdateFromInput(0, num1);
        }
        else if (oEntity1)
        {
            oEntity1.UpdateFromInput(0, oSlot1.connectedToSlot);
        }
        oSlot1.Clear();
        oSlot.Clear();
        if (oEntity1)
        {
            oEntity1.MarkDirtyForceUpdateOutputs();
            oEntity1.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        oEntity.MarkDirtyForceUpdateOutputs();
        oEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Exemple #5
0
        static Gtk.Toolbar CreateToolbar(CircuitEditor editor)
        {
            Gtk.Toolbar toolbar = new Gtk.Toolbar();

            SelectTool selectTool = new SelectTool(editor);
            WireTool   wireTool   = new WireTool(editor);
            // FIXME: Make this be selected with a callback or something
            //editor.CurrentTool = selectTool;

            // FIXME: We want something better for this...
            ComponentTool <AndGateInstance> andTool = new ComponentTool <AndGateInstance>(default, editor);
    public void TryClear(BaseEntity.RPCMessage msg)
    {
        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            uid             = msg.read.UInt32();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(uid);
        IOEntity        ioEntity        = Object.op_Equality((Object)baseNetworkable, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)ioEntity, (Object)null))
        {
            return;
        }
        ioEntity.ClearConnections();
        ioEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
    public void AddLine(BaseEntity.RPCMessage msg)
    {
        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        int num = msg.read.Int32();

        if (num > 18)
        {
            return;
        }
        List <Vector3> lineList = new List <Vector3>();

        for (int index = 0; index < num; ++index)
        {
            Vector3 vector3 = msg.read.Vector3();
            lineList.Add(vector3);
        }
        if (!this.ValidateLine(lineList))
        {
            return;
        }
        uint            uid1             = msg.read.UInt32();
        int             index1           = msg.read.Int32();
        uint            uid2             = msg.read.UInt32();
        int             index2           = msg.read.Int32();
        BaseNetworkable baseNetworkable1 = BaseNetworkable.serverEntities.Find(uid1);
        IOEntity        ioEntity1        = Object.op_Equality((Object)baseNetworkable1, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable1).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)ioEntity1, (Object)null))
        {
            return;
        }
        BaseNetworkable baseNetworkable2 = BaseNetworkable.serverEntities.Find(uid2);
        IOEntity        ioEntity2        = Object.op_Equality((Object)baseNetworkable2, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable2).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)ioEntity2, (Object)null) || index1 >= ioEntity1.inputs.Length || (index2 >= ioEntity2.outputs.Length || Object.op_Inequality((Object)ioEntity1.inputs[index1].connectedTo.Get(true), (Object)null)) || Object.op_Inequality((Object)ioEntity2.outputs[index2].connectedTo.Get(true), (Object)null))
        {
            return;
        }
        ioEntity2.outputs[index2].linePoints = lineList.ToArray();
        ioEntity2.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
    public void RequestClear(BaseEntity.RPCMessage msg)
    {
        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            uid             = msg.read.UInt32();
        int             inputSlot       = msg.read.Int32();
        bool            flag            = msg.read.Bit();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(uid);
        IOEntity        ioEntity1       = Object.op_Equality((Object)baseNetworkable, (Object)null) ? (IOEntity)null : (IOEntity)((Component)baseNetworkable).GetComponent <IOEntity>();

        if (Object.op_Equality((Object)ioEntity1, (Object)null) || inputSlot >= (flag ? ioEntity1.inputs.Length : ioEntity1.outputs.Length))
        {
            return;
        }
        IOEntity.IOSlot ioSlot1 = flag ? ioEntity1.inputs[inputSlot] : ioEntity1.outputs[inputSlot];
        if (Object.op_Equality((Object)ioSlot1.connectedTo.Get(true), (Object)null))
        {
            return;
        }
        IOEntity ioEntity2 = ioSlot1.connectedTo.Get(true);

        IOEntity.IOSlot ioSlot2 = flag ? ioEntity2.outputs[ioSlot1.connectedToSlot] : ioEntity2.inputs[ioSlot1.connectedToSlot];
        if (flag)
        {
            ioEntity1.UpdateFromInput(0, inputSlot);
        }
        else if (Object.op_Implicit((Object)ioEntity2))
        {
            ioEntity2.UpdateFromInput(0, ioSlot1.connectedToSlot);
        }
        ioSlot1.Clear();
        ioSlot2.Clear();
        if (Object.op_Implicit((Object)ioEntity2))
        {
            ioEntity2.MarkDirtyForceUpdateOutputs();
            ioEntity2.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        ioEntity1.MarkDirtyForceUpdateOutputs();
        ioEntity1.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Exemple #9
0
        static Gtk.Toolbar CreateToolbar(CircuitEditor editor)
        {
            Gtk.Toolbar toolbar = new Gtk.Toolbar();

            SelectTool selectTool = new SelectTool(editor, toolbar);
            WireTool   wireTool   = new WireTool(editor, toolbar);
            // FIXME: Make this be selected with a callback or something
            //editor.CurrentTool = selectTool;

            ComponentTool constantTool = new ComponentTool(ComponentType.Constant, "Constant", editor, toolbar);

            ComponentTool bufferTool = new ComponentTool(ComponentType.Buffer, "Buffer gate", editor, toolbar);
            ComponentTool notTool    = new ComponentTool(ComponentType.Not, "Not gate", editor, toolbar);

            ComponentTool andTool = new ComponentTool(ComponentType.And, "And gate", editor, toolbar);

            ComponentTool orTool = new ComponentTool(ComponentType.Or, "Or gate", editor, toolbar);

            ComponentTool xorTool = new ComponentTool(ComponentType.Xor, "Xor gate", editor, toolbar);

            SeparatorToolItem sep = new SeparatorToolItem();

            int index = 0;

            toolbar.Insert(selectTool, index++);
            toolbar.Insert(wireTool, index++);
            toolbar.Insert(sep, index++);
            toolbar.Insert(constantTool, index++);
            toolbar.Insert(bufferTool, index++);
            toolbar.Insert(notTool, index++);
            toolbar.Insert(andTool, index++);
            toolbar.Insert(orTool, index++);
            toolbar.Insert(xorTool, index++);

            return(toolbar);
        }
Exemple #10
0
    public void AddLine(BaseEntity.RPCMessage msg)
    {
        IOEntity component;
        IOEntity oEntity;

        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        int num = msg.read.Int32();

        if (num > 18)
        {
            return;
        }
        List <Vector3> vector3s = new List <Vector3>();

        for (int i = 0; i < num; i++)
        {
            vector3s.Add(msg.read.Vector3());
        }
        if (!this.ValidateLine(vector3s))
        {
            return;
        }
        uint            num1            = msg.read.UInt32();
        int             num2            = msg.read.Int32();
        uint            num3            = msg.read.UInt32();
        int             num4            = msg.read.Int32();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(num1);

        if (baseNetworkable == null)
        {
            component = null;
        }
        else
        {
            component = baseNetworkable.GetComponent <IOEntity>();
        }
        IOEntity oEntity1 = component;

        if (oEntity1 == null)
        {
            return;
        }
        BaseNetworkable baseNetworkable1 = BaseNetworkable.serverEntities.Find(num3);

        if (baseNetworkable1 == null)
        {
            oEntity = null;
        }
        else
        {
            oEntity = baseNetworkable1.GetComponent <IOEntity>();
        }
        IOEntity array = oEntity;

        if (array == null)
        {
            return;
        }
        if (num2 >= (int)oEntity1.inputs.Length)
        {
            return;
        }
        if (num4 >= (int)array.outputs.Length)
        {
            return;
        }
        if (oEntity1.inputs[num2].connectedTo.Get(true) != null)
        {
            return;
        }
        if (array.outputs[num4].connectedTo.Get(true) != null)
        {
            return;
        }
        array.outputs[num4].linePoints = vector3s.ToArray();
        array.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Exemple #11
0
    public void MakeConnection(BaseEntity.RPCMessage msg)
    {
        IOEntity component;
        IOEntity oEntity;

        if (!WireTool.CanPlayerUseWires(msg.player))
        {
            return;
        }
        uint            num             = msg.read.UInt32();
        int             num1            = msg.read.Int32();
        uint            num2            = msg.read.UInt32();
        int             num3            = msg.read.Int32();
        BaseNetworkable baseNetworkable = BaseNetworkable.serverEntities.Find(num);

        if (baseNetworkable == null)
        {
            component = null;
        }
        else
        {
            component = baseNetworkable.GetComponent <IOEntity>();
        }
        IOEntity oEntity1 = component;

        if (oEntity1 == null)
        {
            return;
        }
        BaseNetworkable baseNetworkable1 = BaseNetworkable.serverEntities.Find(num2);

        if (baseNetworkable1 == null)
        {
            oEntity = null;
        }
        else
        {
            oEntity = baseNetworkable1.GetComponent <IOEntity>();
        }
        IOEntity oEntity2 = oEntity;

        if (oEntity2 == null)
        {
            return;
        }
        if (Vector3.Distance(baseNetworkable1.transform.position, baseNetworkable.transform.position) > WireTool.maxWireLength)
        {
            return;
        }
        if (num1 >= (int)oEntity1.inputs.Length)
        {
            return;
        }
        if (num3 >= (int)oEntity2.outputs.Length)
        {
            return;
        }
        if (oEntity1.inputs[num1].connectedTo.Get(true) != null)
        {
            return;
        }
        if (oEntity2.outputs[num3].connectedTo.Get(true) != null)
        {
            return;
        }
        if (oEntity1.inputs[num1].rootConnectionsOnly && !oEntity2.IsRootEntity())
        {
            return;
        }
        oEntity1.inputs[num1].connectedTo.Set(oEntity2);
        oEntity1.inputs[num1].connectedToSlot = num3;
        oEntity1.inputs[num1].connectedTo.Init();
        oEntity2.outputs[num3].connectedTo.Set(oEntity1);
        oEntity2.outputs[num3].connectedToSlot = num1;
        oEntity2.outputs[num3].connectedTo.Init();
        oEntity2.MarkDirtyForceUpdateOutputs();
        oEntity2.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        oEntity1.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Exemple #12
0
 void Awake()
 {
     singleton = this;
 }