/// <summary> /// 选择飞机消息数据处理 /// </summary> /// <param name="data"></param> public void OnChoosePlane(ISFSObject data) { ChooseResult = new ChoosePlaneResult(); if (data.ContainsKey(ConstantData.KeyChangeInfo)) { var infoArray = data.GetSFSArray(ConstantData.KeyChangeInfo); var count = infoArray.Count; ChooseResult.PlaneDataDic = new Dictionary <int, Dictionary <int, PludoPlaneData> >(); for (int i = 0; i < count; i++) { var dataItem = infoArray.GetSFSObject(i); var seat = dataItem.GetInt(RequestKey.KeySeat); var playerColor = GetPlayerInfo <PludoPlayerInfo>(seat, true).PlayerColor; var planeDic = new Dictionary <int, PludoPlaneData>(); for (int j = 0; j < ConstantData.ValuePlaneCount; j++) { if (dataItem.ContainsKey(j.ToString())) { var jData = dataItem.GetSFSObject(j.ToString()); var planeData = new PludoPlaneData(jData, playerColor); planeDic.Add(planeData.DataId, planeData); } } ChooseResult.PlaneDataDic.Add(seat, planeDic); } } SfsHelper.Parse(data, ConstantData.KeyCurrentPlayer, ref ChooseResult.OperationSeat); SfsHelper.Parse(data, ConstantData.KeyPlaneId, ref ChooseResult.OperationPlaneId); }
/// <summary> /// 飞机状态变化 /// </summary> /// <param name="choosePlaneData"></param> private void OnPlaneStateChange(ChoosePlaneResult choosePlaneData) { var curOpSeat = choosePlaneData.OperationSeat; var curOpPlaneId = choosePlaneData.OperationPlaneId; var curControl = ControlList.Find(item => item.Seat == curOpSeat); if (curControl) { var curPlayerPlanes = choosePlaneData.PlaneDataDic[curOpSeat]; var newPlaneData = curPlayerPlanes[curOpPlaneId]; if (newPlaneData.CheckPlaneInMulState((int)EnumPlaneStatus.Collide | (int)EnumPlaneStatus.Attack)) { OnAttackState(choosePlaneData.PlaneDataDic, curControl, newPlaneData, delegate { CollidePlanes(choosePlaneData.PlaneDataDic); }); } else if (newPlaneData.CheckPlaneInMulState((int)EnumPlaneStatus.Attack | (int)EnumPlaneStatus.Fit)) { OnAttackState(choosePlaneData.PlaneDataDic, curControl, newPlaneData, delegate { OnFitState(curPlayerPlanes, curControl, newPlaneData, false); }); } else { if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Finish)) { curControl.OnPlaneFinish(newPlaneData); return; } if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Collide)) { OnCollideState(choosePlaneData.PlaneDataDic, curControl, newPlaneData); return; } if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Attack)) { OnAttackState(choosePlaneData.PlaneDataDic, curControl, newPlaneData); return; } if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Fit)) { OnFitState(curPlayerPlanes, curControl, newPlaneData); return; } if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Fly)) { curControl.OnPlaneMove(newPlaneData); return; } if (newPlaneData.CheckPlaneState(EnumPlaneStatus.Ready)) { curControl.OnPlaneReady(newPlaneData); } } } }