/// <summary> /// 缓存待确认数据 /// </summary> /// <param name="opMsg"></param> /// <param name="isLocal">是否为发送等待, 否则为接收等待</param> private void PushBeComfirmData(MsgOptional opMsg, bool isLocal = false) { // 保存数据, 等待确认数据 var opUniqueId = opMsg.OpUniqueNum; if (isLocal) { opMsgBufferSend.Add(opUniqueId, opMsg); } else { opMsgBufferReceive.Add(opUniqueId, opMsg); } }
/// <summary> /// 创建操作消息 /// </summary> /// <param name="opType">操作类型</param> /// <param name="opPosX">操作位置x</param> /// <param name="opPosY">操作位置y</param> /// <param name="opPosZ">操作位置z</param> /// <param name="opParams">操作其他参数</param> /// <returns></returns> public static MsgOptional GetMsgOptional(int opType, float opPosX, float opPosY, float opPosZ, string opParams) { MsgOptional result = null; result = new MsgOptional() { OpType = opType, OpPosX = opPosX, OpPosY = opPosY, OpPosZ = opPosZ, OpParams = opParams, OpUniqueNum = AddtionOpUniqueNum }; return(result); }
/// <summary> /// 发送测试消息 /// </summary> private void SendTestMsg() { //if (head == null) //{ // Debug.LogError("请先请求head数据"); // return; //} //var msg = Encoding.UTF8.GetBytes("111测试"); //TestData td = new TestData(); //td.Att2 = "www"; //var msg = Serialize(td); MsgOptional opMsg = new MsgOptional() { OpPosX = 0, OpPosY = 0, OpPosZ = 0, OpType = 1 }; var stream = new MemoryStream(); ProtoBuf.Serializer.Serialize(stream, opMsg); data = PackageData(stream.ToArray(), userId, 1); isReceivedServerMsg = true; }
/// <summary> /// 确认操作 /// </summary> /// <param name="msgOp">被确认操作消息</param> /// <param name="isLocal">是否本地创建</param> private void ComfirmOptional(MsgOptional msgOp, bool isLocal = false) { // 下兵操作 // 解析Params // TODO 模型动画相关参数不全 var kvDic = GetParams(msgOp.OpParams); var objectId = Convert.ToInt32(kvDic["ObjectId"]); var unitType = Convert.ToInt32(kvDic["UnitType"]); var uniqueId = Convert.ToInt32(kvDic["UniqueId"]); //var cmName = kvDic["CmName"]; var level = Convert.ToInt32(kvDic["Level"]); string meshPackname = null; string texturePackname = null; if (kvDic.ContainsKey("MeshPackName")) { meshPackname = kvDic["MeshPackName"]; } if (kvDic.ContainsKey("TexturePackName")) { texturePackname = kvDic["TexturePackName"]; } // 如果本地缓存了DisplayOwner不创建 DisplayOwner memberDisplay = null; if (isLocal) { // 获取本地DisplayOwner memberDisplay = DisplayerManager.Single.GetElementById((ObjectID.ObjectType)unitType, objectId); // 设置起始位置 memberDisplay.GameObj.transform.position = new Vector3(msgOp.OpPosX, msgOp.OpPosY, msgOp.OpPosZ); } else { // 映射类型 if (enemyTypeList.ContainsKey(unitType)) { unitType = enemyTypeList[unitType]; } // 映射位置 // 地图绝对宽度 //var mapAbsoluteWidth = LoadMap.Single.MapWidth*LoadMap.Single.UnitWidth; //var setPosX = mapAbsoluteWidth - msgOp.OpPosX; var mapingPos = LoadMap.Single.MapItemToEnemy(new Vector3(msgOp.OpPosX, msgOp.OpPosY, msgOp.OpPosZ)); // 创建单位 memberDisplay = FightUnitFactory.CreateUnit(unitType, new CreateActorParam(mapingPos.x, mapingPos.z, level) { //ColorMat = true, //CardID = 0, //MeshPackName = meshPackname, //TexturePackName = texturePackname, SoldierID = uniqueId, }); memberDisplay.ClusterData.Begin(); } // 本地操作结束callback opSendCallbackDic[msgOp.OpUniqueNum](); // 激活单位 memberDisplay.GameObj.SetActive(true); // 开始移动 memberDisplay.RanderControl.Begin(); }