Skip to content

Commit

Permalink
fix(game, backend): 修改新玩家注册星球问题
Browse files Browse the repository at this point in the history
  • Loading branch information
lovezhangchuangxin committed Dec 5, 2024
1 parent ea77be9 commit 3687485
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 3 deletions.
24 changes: 24 additions & 0 deletions packages/backend/src/service/map/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,30 @@ export default class MapService {
planet.position = [x, y]
userData.planets[planetId] = planet
initPlanetData(planet, userDataMap)
if (!MapService.objectCache[originChunkId]) {
MapService.objectCache[originChunkId] = []
}
MapService.objectCache[originChunkId].push({
userId,
userName: data.user.find((user) => user.id === userId)?.username || '',
planet,
})
if (!MapService.originalPlanetIds[originChunkId]) {
MapService.originalPlanetIds[originChunkId] = new Set()
}
MapService.originalPlanetIds[originChunkId].add(+planetId)
}

/**
* 获取我的所有星球
*/
static async getMyPlanets(userId: string) {
const data = await GameDB.getDB().getData()
const userData = data.userDataMap[userId]
if (!userData) {
throw new GameError(ErrorCode.USER_NOT_EXIST)
}
return userData.planets
}

/**
Expand Down
1 change: 0 additions & 1 deletion packages/backend/src/socket/event/game/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ export const gameEventHandler = (socket: Socket, io: Server) => {
UserService.onlineUser(userId)
return callback(Result.success(data))
} catch (error: unknown) {
console.error(error)
if (error instanceof GameError) {
return callback(Result.error(error.errorCode))
}
Expand Down
21 changes: 19 additions & 2 deletions packages/backend/src/socket/event/map/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ export const mapEventHandler = (socket: Socket, io: Server) => {
await MapService.registerPlanet(userId, planetId)
return callback(Result.success({}))
} catch (error: unknown) {
console.error(error)
if (error instanceof GameError) {
return callback(Result.error(error.errorCode))
}
Expand All @@ -40,7 +39,25 @@ export const mapEventHandler = (socket: Socket, io: Server) => {
}),
)
} catch (error: unknown) {
console.error(error)
if (error instanceof GameError) {
return callback(Result.error(error.errorCode))
}
}
})

/**
* 获取我的所有星球
*/
socket.on('getMyPlanets', async (callback) => {
const userId = socket.userId
if (!userId) {
return callback(Result.error(ErrorCode.PARAM_ERROR))
}

try {
const data = await MapService.getMyPlanets(userId)
return callback(Result.success(data))
} catch (error: unknown) {
if (error instanceof GameError) {
return callback(Result.error(error.errorCode))
}
Expand Down
83 changes: 83 additions & 0 deletions packages/game/src/components/game-map/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { Socket } from 'socket.io-client'
import { message as toast } from '@/utils/message'
import { PlanetData, UniverseMap } from '@star-angry/core'
import { debounce } from '@star-angry/shared'
import { ElMessageBox } from 'element-plus'
interface MapObjectData {
seed: number
Expand All @@ -24,10 +25,13 @@ interface MapObjectData {
const socket = inject<Ref<Socket>>('socket')
const mapObjectData = ref<MapObjectData>()
const myPlanets = ref<Record<string, PlanetData>>()
// 仅用于提供一些操作方法,不用于真实的地图渲染
const blankMap = new UniverseMap(0)
onMounted(() => {
getMyPlanets()
const stage = new Konva.Stage({
container: 'universe',
width: window.innerWidth,
Expand All @@ -47,6 +51,35 @@ onMounted(() => {
render(stage, layer)
})
layer.on('mouseenter', function (evt) {
const target = evt.target
if (target.id().startsWith('planet') && target instanceof Konva.Circle) {
stage.container().style.cursor = 'pointer'
}
})
layer.on('mouseleave', function (evt) {
const target = evt.target
if (target.id().startsWith('planet') && target instanceof Konva.Circle) {
stage.container().style.cursor = 'default'
}
})
layer.on('dblclick', function (evt) {
const target = evt.target
if (target.id().startsWith('planet') && target instanceof Konva.Circle) {
if (!myPlanets.value) {
toast.warn('正在获取我的星球数据,请稍后再试')
return
}
if (Object.keys(myPlanets.value).length) {
return
}
const planetId = +target.id().split('-')[1]
registerPlanet(planetId.toString())
}
})
window.addEventListener('resize', () => {
stage.width(window.innerWidth)
stage.height(window.innerHeight)
Expand Down Expand Up @@ -108,6 +141,56 @@ const getMapObject = (
})
}
/**
* 获取我的星球
*/
const getMyPlanets = () => {
if (!socket?.value) {
return
}
socket.value.timeout(5000).emit('getMyPlanets', (err: any, response: any) => {
if (err) {
toast.error('获取我的星球失败')
} else if (response.code === 0) {
myPlanets.value = response.data
if (!Object.keys(myPlanets.value || {}).length) {
ElMessageBox.alert(
'您暂无星球,请在地图上挑选星球,双击该星球即可确认',
'',
{
autofocus: false,
confirmButtonText: '确认',
},
)
}
} else {
toast.error(response.msg)
}
})
}
/**
* 注册星球
*/
const registerPlanet = (planetId: string) => {
if (!socket?.value) {
return
}
socket.value
.timeout(5000)
.emit('registerPlanet', planetId, (err: any, response: any) => {
if (err) {
toast.error('注册星球失败')
} else if (response.code === 0) {
toast.success('注册星球成功')
} else {
toast.error(response.msg)
}
})
}
/**
* 渲染可视区的物体
*/
Expand Down
9 changes: 9 additions & 0 deletions packages/game/src/utils/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ type Message = ((config: MessageParams) => void) & {
error: (msg: string) => void
} & {
success: (msg: string) => void
} & {
warn: (msg: string) => void
}

export const message: Message = (config: MessageParams) => {
Expand Down Expand Up @@ -35,3 +37,10 @@ message.success = function (msg: string) {
type: 'success',
})
}

message.warn = function (msg: string) {
message({
message: msg,
type: 'warning',
})
}

0 comments on commit 3687485

Please sign in to comment.