public void PushGridObject(GridObject gridObject) { var message = new BattleScenePushGridObjectMessage(); message.view = gridObject.CharacterRef.View; message.objData = StreamableFactory.CreateBattleSceneGridObjData(gridObject); _connection.SendMessage(message); }
public Message MakeResponse(Message request) { try { if (!_isUsing) { return(null); } var container = BattleSceneContainer.Instance; switch (request.MessageType) { case BattleSceneGetGridObjectDataMessage.MESSAGE_TYPE: { var reqMsg = (BattleSceneGetGridObjectDataMessage)request; var resp = new BattleSceneGridObjectDataMessage(); var gridObject = BattleSceneContainer.Instance.FindObject(reqMsg.objID) as GridObject; if (gridObject == null) { return(null); } resp.objData = StreamableFactory.CreateBattleSceneGridObjData(gridObject); return(resp); } case BattleSceneGetLadderObjectDataMessage.MESSAGE_TYPE: { var reqMsg = (BattleSceneGetLadderObjectDataMessage)request; var resp = new BattleSceneLadderObjectDataMessage(); var ladderObject = BattleSceneContainer.Instance.FindObject(reqMsg.objID) as LadderObject; if (ladderObject == null) { return(null); } resp.objData = StreamableFactory.CreateBattleSceneLadderObjData(ladderObject); return(resp); } case BattleSceneGetMovePathInfoMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var list = container.CurrentActable.GetReachablePlaceList(); var resp = CreateMovePathInfoMessage(list); return(resp); } case BattleSceneGetCanExtraMoveMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var resp = new BattleSceneCanTakeExtraMoveMessage(); resp.result = container.CurrentActable.CanTakeExtraMove(); return(resp); } case BattleSceneGetInitiativeUsableSkillOrStuntListMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var reqMsg = (BattleSceneGetInitiativeUsableSkillOrStuntListMessage)request; if (reqMsg.stunt) { var resp = new BattleSceneObjectUsableStuntListMessage(); var candoList = new List <Stunt>(); if (container.CurrentActable.CharacterRef.Stunts != null) { foreach (var stunt in container.CurrentActable.CharacterRef.Stunts) { if (container.CurrentActable.CanUseStuntInAction(stunt, reqMsg.action) && container.CurrentActable.IsActionPointEnough(stunt.BattleMapProperty)) { candoList.Add(stunt); } } } resp.stunts = new CharacterPropertyDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.stunts[i] = StreamableFactory.CreateCharacterPropertyDescription(candoList[i]); } return(resp); } else { var resp = new BattleSceneObjectUsableSkillListMessage(); var candoList = new List <SkillType>(); foreach (var skillType in SkillType.SkillTypes) { var battleMapProperty = container.CurrentActable.CharacterRef.GetSkill(skillType.Value).BattleMapProperty; if (container.CurrentActable.CanUseSkillInAction(skillType.Value, reqMsg.action) && container.CurrentActable.IsActionPointEnough(battleMapProperty)) { candoList.Add(skillType.Value); } } resp.skillTypes = new SkillTypeDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.skillTypes[i] = StreamableFactory.CreateSkillTypeDescription(candoList[i]); } return(resp); } } case BattleSceneGetInitiativeUsableSkillOrStuntListOnInteractMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var reqMsg = (BattleSceneGetInitiativeUsableSkillOrStuntListOnInteractMessage)request; if (reqMsg.stunt) { var resp = new BattleSceneObjectUsableStuntListOnInteractMessage(); var candoList = new List <Stunt>(); if (container.CurrentActable.CharacterRef.Stunts != null) { foreach (var stunt in container.CurrentActable.CharacterRef.Stunts) { if (container.CurrentActable.CanUseStuntOnInteract(stunt) && container.CurrentActable.IsActionPointEnough(stunt.BattleMapProperty)) { candoList.Add(stunt); } } } resp.stunts = new CharacterPropertyDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.stunts[i] = StreamableFactory.CreateCharacterPropertyDescription(candoList[i]); } return(resp); } else { var resp = new BattleSceneObjectUsableSkillListOnInteractMessage(); var candoList = new List <SkillType>(); foreach (var skillType in SkillType.SkillTypes) { var battleMapProperty = container.CurrentActable.CharacterRef.GetSkill(skillType.Value).BattleMapProperty; if (container.CurrentActable.CanUseSkillOnInteract(skillType.Value) && container.CurrentActable.IsActionPointEnough(battleMapProperty)) { candoList.Add(skillType.Value); } } resp.skillTypes = new SkillTypeDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.skillTypes[i] = StreamableFactory.CreateSkillTypeDescription(candoList[i]); } return(resp); } } case BattleSceneGetActionAffectableAreasMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var reqMsg = (BattleSceneGetActionAffectableAreasMessage)request; var resp = new BattleSceneActionAffectableAreasMessage(); Dictionary <GridPos, List <GridPos> > areas; if (reqMsg.isStunt) { var stunt = container.CurrentActable.CharacterRef.FindStuntByID(reqMsg.skillTypeOrStuntID); areas = container.CurrentActable.GetStuntAffectableAreas(stunt); } else { var skillType = SkillType.SkillTypes[reqMsg.skillTypeOrStuntID]; areas = container.CurrentActable.GetSkillAffectableAreas(skillType); } resp.centers = new GridPos[areas.Count]; resp.areas = new GridPos[areas.Count][]; int i = 0; foreach (var area in areas) { resp.centers[i] = new GridPos() { row = area.Key.row, col = area.Key.col, highland = area.Key.highland }; var gridList = area.Value; int gridCount = area.Value.Count; resp.areas[i] = new GridPos[gridCount]; for (int j = 0; j < gridCount; ++j) { resp.areas[i][j] = new GridPos() { row = gridList[j].row, col = gridList[j].col, highland = gridList[j].highland }; } ++i; } return(resp); } case BattleSceneGetActionTargetCountMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var reqMsg = (BattleSceneGetActionTargetCountMessage)request; var resp = new BattleSceneActionTargetCountMessage(); if (reqMsg.isStunt) { var stunt = container.CurrentActable.CharacterRef.FindStuntByID(reqMsg.skillTypeOrStuntID); resp.count = stunt.BattleMapProperty.targetMaxCount; } else { var skillType = SkillType.SkillTypes[reqMsg.skillTypeOrStuntID]; resp.count = container.CurrentActable.CharacterRef.GetSkill(skillType).BattleMapProperty.targetMaxCount; } return(resp); } case GetStuntTargetSelectableMessage.MESSAGE_TYPE: { if (!_canOperate || container.CurrentActable.CharacterRef.Controller != _owner) { break; } var reqMsg = (GetStuntTargetSelectableMessage)request; var target = container.FindObject(reqMsg.targetID); var stunt = container.CurrentActable.CharacterRef.FindStuntByID(reqMsg.stuntID); if (target != null && stunt != null) { var resp = new StuntTargetSelectableMessage(); resp.result = container.CurrentActable.CanUseStuntOnTarget(target, stunt, reqMsg.isInteract, reqMsg.action); return(resp); } else { break; } } case BattleSceneGetPassiveUsableSkillOrStuntListMessage.MESSAGE_TYPE: { if (!container.IsChecking || container.CurrentPassive.CharacterRef.Controller != _owner) { break; } var reqMsg = (BattleSceneGetPassiveUsableSkillOrStuntListMessage)request; if (reqMsg.stunt) { var resp = new BattleSceneObjectUsableStuntListMessage(); var candoList = new List <Stunt>(); if (container.CurrentPassive.CharacterRef.Stunts != null) { foreach (var stunt in container.CurrentPassive.CharacterRef.Stunts) { if (container.CanCurrentPassiveUseStunt(stunt)) { candoList.Add(stunt); } } } resp.stunts = new CharacterPropertyDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.stunts[i] = StreamableFactory.CreateCharacterPropertyDescription(candoList[i]); } return(resp); } else { var resp = new BattleSceneObjectUsableSkillListMessage(); var candoList = new List <SkillType>(); foreach (var skillType in SkillType.SkillTypes) { if (container.CanCurrentPassiveUseSkill(skillType.Value)) { candoList.Add(skillType.Value); } } resp.skillTypes = new SkillTypeDescription[candoList.Count]; for (int i = 0; i < candoList.Count; ++i) { resp.skillTypes[i] = StreamableFactory.CreateSkillTypeDescription(candoList[i]); } return(resp); } } default: break; } return(null); } catch (Exception e) { Logger.WriteLine(e.Message); return(null); } }