Example #1
0
 public override void Save(BaseNetworkable.SaveInfo info)
 {
     base.Save(info);
     info.msg.ioEntity = (__Null)Pool.Get <IOEntity>();
     ((IOEntity)info.msg.ioEntity).inputs  = (__Null)Pool.GetList <IOEntity.IOConnection>();
     ((IOEntity)info.msg.ioEntity).outputs = (__Null)Pool.GetList <IOEntity.IOConnection>();
     foreach (IOEntity.IOSlot input in this.inputs)
     {
         IOEntity.IOConnection ioConnection = (IOEntity.IOConnection)Pool.Get <IOEntity.IOConnection>();
         ioConnection.connectedID     = (__Null)(int)input.connectedTo.entityRef.uid;
         ioConnection.connectedToSlot = (__Null)input.connectedToSlot;
         ioConnection.niceName        = (__Null)input.niceName;
         ioConnection.type            = (__Null)input.type;
         ioConnection.inUse           = (__Null)(ioConnection.connectedID > 0 ? 1 : 0);
         ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).inputs).Add(ioConnection);
     }
     foreach (IOEntity.IOSlot output in this.outputs)
     {
         IOEntity.IOConnection ioConnection = (IOEntity.IOConnection)Pool.Get <IOEntity.IOConnection>();
         ioConnection.connectedID     = (__Null)(int)output.connectedTo.entityRef.uid;
         ioConnection.connectedToSlot = (__Null)output.connectedToSlot;
         ioConnection.niceName        = (__Null)output.niceName;
         ioConnection.type            = (__Null)output.type;
         ioConnection.inUse           = (__Null)(ioConnection.connectedID > 0 ? 1 : 0);
         if (output.linePoints != null)
         {
             ioConnection.linePointList = (__Null)Pool.GetList <IOEntity.IOConnection.LineVec>();
             ((List <IOEntity.IOConnection.LineVec>)ioConnection.linePointList).Clear();
             foreach (Vector3 linePoint in output.linePoints)
             {
                 IOEntity.IOConnection.LineVec lineVec = (IOEntity.IOConnection.LineVec)Pool.Get <IOEntity.IOConnection.LineVec>();
                 lineVec.vec = (__Null)linePoint;
                 ((List <IOEntity.IOConnection.LineVec>)ioConnection.linePointList).Add(lineVec);
             }
         }
         ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).outputs).Add(ioConnection);
     }
 }
Example #2
0
    public override void Load(BaseNetworkable.LoadInfo info)
    {
        base.Load(info);
        if (info.msg.ioEntity == null)
        {
            return;
        }
        if (!info.fromDisk && ((IOEntity)info.msg.ioEntity).inputs != null)
        {
            int count = ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).inputs).Count;
            if (this.inputs.Length != count)
            {
                this.inputs = new IOEntity.IOSlot[count];
            }
            for (int index = 0; index < count; ++index)
            {
                if (this.inputs[index] == null)
                {
                    this.inputs[index] = new IOEntity.IOSlot();
                }
                IOEntity.IOConnection input = ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).inputs)[index];
                this.inputs[index].connectedTo = new IOEntity.IORef();
                this.inputs[index].connectedTo.entityRef.uid = (uint)input.connectedID;
                if (this.isClient)
                {
                    this.inputs[index].connectedTo.InitClient();
                }
                this.inputs[index].connectedToSlot = (int)input.connectedToSlot;
                this.inputs[index].niceName        = (string)input.niceName;
                this.inputs[index].type            = (IOEntity.IOType)input.type;
            }
        }
        if (((IOEntity)info.msg.ioEntity).outputs == null)
        {
            return;
        }
        if (!info.fromDisk && this.isClient)
        {
            foreach (IOEntity.IOSlot output in this.outputs)
            {
                output.Clear();
            }
        }
        int count1 = ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).outputs).Count;

        if (this.outputs.Length != count1 && count1 > 0)
        {
            IOEntity.IOSlot[] outputs = this.outputs;
            this.outputs = new IOEntity.IOSlot[count1];
            for (int index = 0; index < outputs.Length; ++index)
            {
                if (index < count1)
                {
                    this.outputs[index] = outputs[index];
                }
            }
        }
        for (int index1 = 0; index1 < count1; ++index1)
        {
            if (this.outputs[index1] == null)
            {
                this.outputs[index1] = new IOEntity.IOSlot();
            }
            IOEntity.IOConnection output = ((List <IOEntity.IOConnection>)((IOEntity)info.msg.ioEntity).outputs)[index1];
            this.outputs[index1].connectedTo = new IOEntity.IORef();
            this.outputs[index1].connectedTo.entityRef.uid = (uint)output.connectedID;
            if (this.isClient)
            {
                this.outputs[index1].connectedTo.InitClient();
            }
            this.outputs[index1].connectedToSlot = (int)output.connectedToSlot;
            this.outputs[index1].niceName        = (string)output.niceName;
            this.outputs[index1].type            = (IOEntity.IOType)output.type;
            if (info.fromDisk || this.isClient)
            {
                List <IOEntity.IOConnection.LineVec> linePointList = (List <IOEntity.IOConnection.LineVec>)output.linePointList;
                if (this.outputs[index1].linePoints == null || this.outputs[index1].linePoints.Length != linePointList.Count)
                {
                    this.outputs[index1].linePoints = new Vector3[linePointList.Count];
                }
                for (int index2 = 0; index2 < linePointList.Count; ++index2)
                {
                    this.outputs[index1].linePoints[index2] = (Vector3)linePointList[index2].vec;
                }
            }
        }
    }