/// <summary> /// 写入字节流(简版) /// </summary> protected override void toWriteBytesSimple(BytesWriteStream stream) { stream.writeInt(this.index); if(this.commands!=null) { stream.writeBoolean(true); stream.writeLen(this.commands.size()); if(!this.commands.isEmpty()) { FrameSyncCommandData[] commandsVValues=this.commands.getValues(); for(int commandsVI=0,commandsVLen=this.commands.length();commandsVI<commandsVLen;++commandsVI) { FrameSyncCommandData commandsV=commandsVValues[commandsVI]; if(commandsV!=null) { stream.writeBoolean(true); stream.writeDataSimpleNotNull(commandsV); } else { stream.writeBoolean(false); } } } } else { stream.writeBoolean(false); } }
/// <summary> /// 回池 /// </summary> protected override void toRelease(DataPool pool) { base.toRelease(pool); this.command.release(pool); this.command = null; }
/// <summary> /// 创建实例 /// </summary> public static FrameSyncOneRequest create(FrameSyncCommandData command) { FrameSyncOneRequest re = (FrameSyncOneRequest)BytesControl.createRequest(dataID); re.command = command; return(re); }
/** 预备执行指令 */ protected virtual void preExecuteCommand(FrameSyncCommandData command) { Unit unit = _scene.getCharacterByIndex(command.index); if (unit == null) { Ctrl.throwError("帧同步出错"); return; } executeCommand(unit, command); }
/// <summary> /// 复制(潜拷贝) /// </summary> protected override void toShadowCopy(BaseData data) { if (!(data is FrameSyncCommandData)) { return; } FrameSyncCommandData mData = (FrameSyncCommandData)data; this.index = mData.index; this.type = mData.type; this.ints = mData.ints; this.floats = mData.floats; }
protected override void copyData() { base.copyData(); FrameSyncCommandData commandTemp = command; if (commandTemp != null) { this.command = (FrameSyncCommandData)commandTemp.clone(); } else { this.command = null; nullObjError("command"); } }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if(!(data is FrameSyncData)) return; FrameSyncData mData=(FrameSyncData)data; this.index=mData.index; if(mData.commands!=null) { if(this.commands!=null) { this.commands.clear(); this.commands.ensureCapacity(mData.commands.size()); } else { this.commands=new SList<FrameSyncCommandData>(); } SList<FrameSyncCommandData> commandsT=this.commands; if(!mData.commands.isEmpty()) { FrameSyncCommandData[] commandsVValues=mData.commands.getValues(); for(int commandsVI=0,commandsVLen=mData.commands.length();commandsVI<commandsVLen;++commandsVI) { FrameSyncCommandData commandsV=commandsVValues[commandsVI]; FrameSyncCommandData commandsU; if(commandsV!=null) { commandsU=(FrameSyncCommandData)commandsV.clone(); } else { commandsU=null; } commandsT.add(commandsU); } } } else { this.commands=null; } }
/// <summary> /// 转文本输出 /// </summary> protected override void toWriteDataString(DataWriter writer) { writer.writeTabs(); writer.sb.Append("index"); writer.sb.Append(':'); writer.sb.Append(this.index); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("commands"); writer.sb.Append(':'); writer.sb.Append("List<FrameSyncCommandData>"); if(this.commands!=null) { SList<FrameSyncCommandData> commandsT=this.commands; int commandsLen=commandsT.size(); writer.sb.Append('('); writer.sb.Append(commandsLen); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); for(int commandsI=0;commandsI<commandsLen;++commandsI) { FrameSyncCommandData commandsV=commandsT.get(commandsI); writer.writeTabs(); writer.sb.Append(commandsI); writer.sb.Append(':'); if(commandsV!=null) { commandsV.writeDataString(writer); } else { writer.sb.Append("FrameSyncCommandData=null"); } writer.writeEnter(); } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is FrameSyncCommandData)) { return; } FrameSyncCommandData mData = (FrameSyncCommandData)data; this.index = mData.index; this.type = mData.type; if (mData.ints != null) { int[] intsR = mData.ints; int intsLen = intsR.Length; if (this.ints == null || this.ints.Length != intsLen) { this.ints = new int[intsLen]; } BytesControl.arrayCopy(mData.ints, this.ints, intsLen); } else { this.ints = null; nullObjError("ints"); } if (mData.floats != null) { float[] floatsR = mData.floats; int floatsLen = floatsR.Length; if (this.floats == null || this.floats.Length != floatsLen) { this.floats = new float[floatsLen]; } BytesControl.arrayCopy(mData.floats, this.floats, floatsLen); } else { this.floats = null; nullObjError("floats"); } }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { FrameSyncData mData=(FrameSyncData)data; if(this.index!=mData.index) return false; if(mData.commands!=null) { if(this.commands==null) return false; if(this.commands.size()!=mData.commands.size()) return false; SList<FrameSyncCommandData> commandsT=this.commands; SList<FrameSyncCommandData> commandsR=mData.commands; int commandsLen=commandsT.size(); for(int commandsI=0;commandsI<commandsLen;++commandsI) { FrameSyncCommandData commandsU=commandsT.get(commandsI); FrameSyncCommandData commandsV=commandsR.get(commandsI); if(commandsV!=null) { if(commandsU==null) return false; if(!commandsU.dataEquals(commandsV)) return false; } else { if(commandsU!=null) return false; } } } else { if(this.commands!=null) return false; } return true; }
/// <summary> /// 读取字节流(完整版) /// </summary> protected override void toReadBytesFull(BytesReadStream stream) { stream.startReadObj(); this.index=stream.readInt(); if(stream.readBoolean()) { int commandsLen=stream.readLen(); if(this.commands!=null) { this.commands.clear(); this.commands.ensureCapacity(commandsLen); } else { this.commands=new SList<FrameSyncCommandData>(); } SList<FrameSyncCommandData> commandsT=this.commands; for(int commandsI=commandsLen-1;commandsI>=0;--commandsI) { FrameSyncCommandData commandsV; if(stream.readBoolean()) { BaseData commandsVT=stream.readDataFullNotNull(); if(commandsVT!=null) { if(commandsVT is FrameSyncCommandData) { commandsV=(FrameSyncCommandData)commandsVT; } else { commandsV=new FrameSyncCommandData(); if(!(commandsVT.GetType().IsAssignableFrom(typeof(FrameSyncCommandData)))) { stream.throwTypeReadError(typeof(FrameSyncCommandData),commandsVT.GetType()); } commandsV.shadowCopy(commandsVT); } } else { commandsV=null; } } else { commandsV=null; } commandsT.add(commandsV); } } else { this.commands=null; } stream.endReadObj(); }
/** 执行指令 */ protected virtual void executeCommand(Unit unit, FrameSyncCommandData command) { }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { FrameSyncCommandData mData = (FrameSyncCommandData)data; if (this.index != mData.index) { return(false); } if (this.type != mData.type) { return(false); } if (mData.ints != null) { if (this.ints == null) { return(false); } if (this.ints.Length != mData.ints.Length) { return(false); } int[] intsT = this.ints; int[] intsR = mData.ints; int intsLen = intsT.Length; for (int intsI = 0; intsI < intsLen; ++intsI) { int intsU = intsT[intsI]; int intsV = intsR[intsI]; if (intsU != intsV) { return(false); } } } else { if (this.ints != null) { return(false); } } if (mData.floats != null) { if (this.floats == null) { return(false); } if (this.floats.Length != mData.floats.Length) { return(false); } float[] floatsT = this.floats; float[] floatsR = mData.floats; int floatsLen = floatsT.Length; for (int floatsI = 0; floatsI < floatsLen; ++floatsI) { float floatsU = floatsT[floatsI]; float floatsV = floatsR[floatsI]; if (floatsU != floatsV) { return(false); } } } else { if (this.floats != null) { return(false); } } return(true); }