예제 #1
0
 public override void Save(SaveInfo info)
 {
     base.Save(info);
     info.msg.ioEntity         = Facepunch.Pool.Get <ProtoBuf.IOEntity>();
     info.msg.ioEntity.inputs  = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection>();
     info.msg.ioEntity.outputs = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection>();
     IOSlot[] array = inputs;
     foreach (IOSlot iOSlot in array)
     {
         ProtoBuf.IOEntity.IOConnection iOConnection = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection>();
         iOConnection.connectedID     = iOSlot.connectedTo.entityRef.uid;
         iOConnection.connectedToSlot = iOSlot.connectedToSlot;
         iOConnection.niceName        = iOSlot.niceName;
         iOConnection.type            = (int)iOSlot.type;
         iOConnection.inUse           = iOConnection.connectedID != 0;
         iOConnection.colour          = (int)iOSlot.wireColour;
         info.msg.ioEntity.inputs.Add(iOConnection);
     }
     array = outputs;
     foreach (IOSlot iOSlot2 in array)
     {
         ProtoBuf.IOEntity.IOConnection iOConnection2 = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection>();
         iOConnection2.connectedID     = iOSlot2.connectedTo.entityRef.uid;
         iOConnection2.connectedToSlot = iOSlot2.connectedToSlot;
         iOConnection2.niceName        = iOSlot2.niceName;
         iOConnection2.type            = (int)iOSlot2.type;
         iOConnection2.inUse           = iOConnection2.connectedID != 0;
         iOConnection2.colour          = (int)iOSlot2.wireColour;
         if (iOSlot2.linePoints != null)
         {
             iOConnection2.linePointList = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection.LineVec>();
             iOConnection2.linePointList.Clear();
             for (int j = 0; j < iOSlot2.linePoints.Length; j++)
             {
                 Vector3 vector = iOSlot2.linePoints[j];
                 ProtoBuf.IOEntity.IOConnection.LineVec lineVec = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection.LineVec>();
                 lineVec.vec = vector;
                 if (iOSlot2.slackLevels.Length > j)
                 {
                     lineVec.vec.w = iOSlot2.slackLevels[j];
                 }
                 iOConnection2.linePointList.Add(lineVec);
             }
         }
         info.msg.ioEntity.outputs.Add(iOConnection2);
     }
 }
예제 #2
0
    public override void Save(BaseNetworkable.SaveInfo info)
    {
        int i;

        base.Save(info);
        info.msg.ioEntity         = Facepunch.Pool.Get <ProtoBuf.IOEntity>();
        info.msg.ioEntity.inputs  = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection>();
        info.msg.ioEntity.outputs = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection>();
        IOEntity.IOSlot[] oSlotArray = this.inputs;
        for (i = 0; i < (int)oSlotArray.Length; i++)
        {
            IOEntity.IOSlot oSlot = oSlotArray[i];
            ProtoBuf.IOEntity.IOConnection oConnection = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection>();
            oConnection.connectedID     = oSlot.connectedTo.entityRef.uid;
            oConnection.connectedToSlot = oSlot.connectedToSlot;
            oConnection.niceName        = oSlot.niceName;
            oConnection.type            = (int)oSlot.type;
            oConnection.inUse           = oConnection.connectedID != 0;
            info.msg.ioEntity.inputs.Add(oConnection);
        }
        oSlotArray = this.outputs;
        for (i = 0; i < (int)oSlotArray.Length; i++)
        {
            IOEntity.IOSlot oSlot1 = oSlotArray[i];
            ProtoBuf.IOEntity.IOConnection list = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection>();
            list.connectedID     = oSlot1.connectedTo.entityRef.uid;
            list.connectedToSlot = oSlot1.connectedToSlot;
            list.niceName        = oSlot1.niceName;
            list.type            = (int)oSlot1.type;
            list.inUse           = list.connectedID != 0;
            if (oSlot1.linePoints != null)
            {
                list.linePointList = Facepunch.Pool.GetList <ProtoBuf.IOEntity.IOConnection.LineVec>();
                list.linePointList.Clear();
                Vector3[] vector3Array = oSlot1.linePoints;
                for (int j = 0; j < (int)vector3Array.Length; j++)
                {
                    Vector3 vector3 = vector3Array[j];
                    ProtoBuf.IOEntity.IOConnection.LineVec lineVec = Facepunch.Pool.Get <ProtoBuf.IOEntity.IOConnection.LineVec>();
                    lineVec.vec = vector3;
                    list.linePointList.Add(lineVec);
                }
            }
            info.msg.ioEntity.outputs.Add(list);
        }
    }
예제 #3
0
    public override void Load(LoadInfo info)
    {
        base.Load(info);
        if (info.msg.ioEntity == null)
        {
            return;
        }
        if (!info.fromDisk && info.msg.ioEntity.inputs != null)
        {
            int count = info.msg.ioEntity.inputs.Count;
            if (inputs.Length != count)
            {
                inputs = new IOSlot[count];
            }
            for (int i = 0; i < count; i++)
            {
                if (inputs[i] == null)
                {
                    inputs[i] = new IOSlot();
                }
                ProtoBuf.IOEntity.IOConnection iOConnection = info.msg.ioEntity.inputs[i];
                inputs[i].connectedTo = new IORef();
                inputs[i].connectedTo.entityRef.uid = iOConnection.connectedID;
                if (base.isClient)
                {
                    inputs[i].connectedTo.InitClient();
                }
                inputs[i].connectedToSlot = iOConnection.connectedToSlot;
                inputs[i].niceName        = iOConnection.niceName;
                inputs[i].type            = (IOType)iOConnection.type;
                inputs[i].wireColour      = (WireTool.WireColour)iOConnection.colour;
            }
        }
        if (info.msg.ioEntity.outputs == null)
        {
            return;
        }
        if (!info.fromDisk && base.isClient)
        {
            IOSlot[] array = outputs;
            for (int j = 0; j < array.Length; j++)
            {
                array[j].Clear();
            }
        }
        int count2 = info.msg.ioEntity.outputs.Count;

        IOSlot[] array2 = null;
        if (outputs.Length != count2 && count2 > 0)
        {
            array2  = outputs;
            outputs = new IOSlot[count2];
            for (int k = 0; k < array2.Length; k++)
            {
                if (k < count2)
                {
                    outputs[k] = array2[k];
                }
            }
        }
        for (int l = 0; l < count2; l++)
        {
            if (outputs[l] == null)
            {
                outputs[l] = new IOSlot();
            }
            ProtoBuf.IOEntity.IOConnection iOConnection2 = info.msg.ioEntity.outputs[l];
            outputs[l].connectedTo = new IORef();
            outputs[l].connectedTo.entityRef.uid = iOConnection2.connectedID;
            if (base.isClient)
            {
                outputs[l].connectedTo.InitClient();
            }
            outputs[l].connectedToSlot = iOConnection2.connectedToSlot;
            outputs[l].niceName        = iOConnection2.niceName;
            outputs[l].type            = (IOType)iOConnection2.type;
            outputs[l].wireColour      = (WireTool.WireColour)iOConnection2.colour;
            if (info.fromDisk || base.isClient)
            {
                List <ProtoBuf.IOEntity.IOConnection.LineVec> linePointList = iOConnection2.linePointList;
                if (outputs[l].linePoints == null || outputs[l].linePoints.Length != linePointList.Count)
                {
                    outputs[l].linePoints = new Vector3[linePointList.Count];
                }
                if (outputs[l].slackLevels == null || outputs[l].slackLevels.Length != linePointList.Count)
                {
                    outputs[l].slackLevels = new float[linePointList.Count];
                }
                for (int m = 0; m < linePointList.Count; m++)
                {
                    outputs[l].linePoints[m]  = linePointList[m].vec;
                    outputs[l].slackLevels[m] = linePointList[m].vec.w;
                }
            }
        }
    }
예제 #4
0
 public override void Load(BaseNetworkable.LoadInfo info)
 {
     base.Load(info);
     if (info.msg.ioEntity == null)
     {
         return;
     }
     if (!info.fromDisk && info.msg.ioEntity.inputs != null)
     {
         int count = info.msg.ioEntity.inputs.Count;
         if ((int)this.inputs.Length != count)
         {
             this.inputs = new IOEntity.IOSlot[count];
         }
         for (int i = 0; i < count; i++)
         {
             if (this.inputs[i] == null)
             {
                 this.inputs[i] = new IOEntity.IOSlot();
             }
             ProtoBuf.IOEntity.IOConnection item = info.msg.ioEntity.inputs[i];
             this.inputs[i].connectedTo = new IOEntity.IORef();
             this.inputs[i].connectedTo.entityRef.uid = item.connectedID;
             if (base.isClient)
             {
                 this.inputs[i].connectedTo.InitClient();
             }
             this.inputs[i].connectedToSlot = item.connectedToSlot;
             this.inputs[i].niceName        = item.niceName;
             this.inputs[i].type            = (IOEntity.IOType)item.type;
         }
     }
     if (info.msg.ioEntity.outputs != null)
     {
         if (!info.fromDisk && base.isClient)
         {
             IOEntity.IOSlot[] oSlotArray = this.outputs;
             for (int j = 0; j < (int)oSlotArray.Length; j++)
             {
                 oSlotArray[j].Clear();
             }
         }
         int num = info.msg.ioEntity.outputs.Count;
         IOEntity.IOSlot[] oSlotArray1 = null;
         if ((int)this.outputs.Length != num && num > 0)
         {
             oSlotArray1  = this.outputs;
             this.outputs = new IOEntity.IOSlot[num];
             for (int k = 0; k < (int)oSlotArray1.Length; k++)
             {
                 if (k < num)
                 {
                     this.outputs[k] = oSlotArray1[k];
                 }
             }
         }
         for (int l = 0; l < num; l++)
         {
             if (this.outputs[l] == null)
             {
                 this.outputs[l] = new IOEntity.IOSlot();
             }
             ProtoBuf.IOEntity.IOConnection oConnection = info.msg.ioEntity.outputs[l];
             this.outputs[l].connectedTo = new IOEntity.IORef();
             this.outputs[l].connectedTo.entityRef.uid = oConnection.connectedID;
             if (base.isClient)
             {
                 this.outputs[l].connectedTo.InitClient();
             }
             this.outputs[l].connectedToSlot = oConnection.connectedToSlot;
             this.outputs[l].niceName        = oConnection.niceName;
             this.outputs[l].type            = (IOEntity.IOType)oConnection.type;
             if (info.fromDisk || base.isClient)
             {
                 List <ProtoBuf.IOEntity.IOConnection.LineVec> lineVecs = oConnection.linePointList;
                 if (this.outputs[l].linePoints == null || (int)this.outputs[l].linePoints.Length != lineVecs.Count)
                 {
                     this.outputs[l].linePoints = new Vector3[lineVecs.Count];
                 }
                 for (int m = 0; m < lineVecs.Count; m++)
                 {
                     this.outputs[l].linePoints[m] = lineVecs[m].vec;
                 }
             }
         }
     }
 }