无标题
心跳事件:
前端heart beat {step:1,action:heartbeat,playes:player1,playerState:[{name:player1,status:walking,des:[0,1,2,3],loc:[0,2,2,2]},{name:player2...}...]}
后端state: {step:1,playerState:[{name:player1,status:idle,des:[0,1,2,3],loc:[0,2,3,2]},{name:player2...}...]}
后端收到heart beat 状态位置变化以前端为准, 并返回其他用户的state {step:1,playerState:[{name:player1,status:walking,des:[0,1,2,3],loc:[0,2,2,2]},{name:player2...}...]}
前端收到state, Player1 检测player2 是否同步,如果超出一定距离则直接同步, 如果地图不同则直接同步
player2检测所有其他玩家位置是否同步, 如果超出一定距离则直接同步, 如果地图不同则直接同步
对话事件:
前端发动事件{player:player1, action:talk,target:[player1,player2,player3]}
后端执行发到ai端, ai端返回对话, 后端转发到前端
对话过程中 前端收到对话时检测自己是否在对话里表中. 如果在则停止移动并更改状态. 如果不在则忽略.
如果对话过程中玩家进入话域, 前端检测到则把玩家也加入对话. 并向后端重新发送开启对话.
ai行为:
移动, 后端发送ai端, ai端返回ai意图, 后端修改state, 前端收到会自动执行. 后端根据player1的心跳更新所有ai的状态信息, p2收到就会更新
ai主动对话:
当ai的状态从walk变更为idle时, 后端call ai端获取意图, 如果意图为说话, 发送给前端des为目标人物现在的位置, state为findPerson, player1前端控制ai走到目标位置, 从findPerson变更为idle时检测, 如果目标已经不在附近, 重复直到结束时目标在附近, 后端直接开启对话