Broke some stuff, added index screen to select a name

This commit is contained in:
2021-01-30 23:10:56 +02:00
parent 4ebe437c93
commit 0780c1ed52
14 changed files with 448 additions and 92 deletions

View File

@@ -1,4 +1,5 @@
import socketIO from 'socket.io'
import { Position } from './types'
export default class Player {
@@ -6,6 +7,16 @@ export default class Player {
private position: {x: number, y: number}
private color: string
private health: number
private damage: number
private defence: number
private keysPressed: Map<number, boolean>
private KEY_W = 87
private KEY_A = 65
private KEY_S = 83
private KEY_D = 68
private MOVEMENT_SPEED = 1
constructor(private _socket: socketIO.Socket) {
this.name = 'Player#' + Math.floor(Math.random() * 10000)
@@ -15,12 +26,43 @@ export default class Player {
}
this.color = '#' + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16)
this.health = Math.floor(Math.random() * 50) + 50
this.damage = 10
this.defence = 10
this.keysPressed = new Map<number, boolean>()
}
get socket() {
return this._socket
}
setName(name: string) {
this.name = name
}
getName() {
return this.name
}
keyAction(key: number, isDown: boolean) {
this.keysPressed.set(key, isDown)
}
getDamage() {
return this.damage
}
getDefence() {
return this.defence
}
setDamage(damage: number) {
this.damage += damage
}
setDefence(defence: number) {
this.defence += defence
}
getHealth() {
return this.health
}
@@ -48,4 +90,29 @@ export default class Player {
this.position.y = y
}
getPosition(): Position {
return {
x: this.position.x,
y: this.position.y,
}
}
move(delta: number) {
if (this.keysPressed.get(this.KEY_A)) {
this.position.x -= this.MOVEMENT_SPEED * delta
}
if (this.keysPressed.get(this.KEY_D)) {
this.position.x += this.MOVEMENT_SPEED * delta
}
if (this.keysPressed.get(this.KEY_W)) {
this.position.y -= this.MOVEMENT_SPEED * delta
}
if (this.keysPressed.get(this.KEY_S)) {
this.position.y += this.MOVEMENT_SPEED * delta
}
}
}

View File

@@ -38,6 +38,12 @@ export default class Players {
}
}
getPlayer(id: string) {
return this.players.find((player) => {
return player.socketID === id
})
}
getPlayers(): Player[] {
let playerList = []
for (let player of this.players) {

View File

@@ -1,7 +1,6 @@
import express from 'express'
import http from 'http'
import socketIO from 'socket.io'
import fs from 'fs'
import cors from 'cors'
import path from 'path'
import Players from './Players'
@@ -21,6 +20,11 @@ app.use(express.static(path.join(__dirname, '/../../client/dist')))
app.get('/', function(req, res) {
res.sendFile('index.html', { root: __dirname + '/../../client/static/'});
});
app.get('/game', function(req, res) {
res.sendFile('game.html', { root: __dirname + '/../../client/static/'});
});
app.get('/ded', function(req, res) {
res.sendFile('ded.html', { root: __dirname + '/../../client/static/'});
});
@@ -32,9 +36,16 @@ server.listen(8089, function() {
io.on('connection', function(socket: socketIO.Socket) {
console.log(socket.id, 'connected');
let player = new Player(socket)
players.addPlayer(socket.id, player)
socket.emit('your-info', player.getPlayerDescription())
socket.emit('greetings')
socket.on('greetings', (data: {name: string}) => {
let player = new Player(socket)
player.setName(data.name)
players.addPlayer(socket.id, player)
socket.emit('your-info', player.getPlayerDescription())
io.emit('new-player-joined', player.getPlayerDescription())
})
socket.on('get-other-players', () => {
let otherPlayers = []
@@ -46,13 +57,10 @@ io.on('connection', function(socket: socketIO.Socket) {
socket.emit('players-info', otherPlayers)
})
io.emit('new-player-joined', player.getPlayerDescription())
socket.on('i-moved', (position: {x: number, y: number}) => {
players.updatePlayerPosition(socket.id, {x: position.x, y: position.y})
io.emit('player-moved', {id: socket.id, position: position})
})
// socket.on('i-moved', (position: {x: number, y: number}) => {
// players.updatePlayerPosition(socket.id, {x: position.x, y: position.y})
// io.emit('player-moved', {id: socket.id, position: position})
// })
socket.on('disconnect', () => {
console.log(socket.id, 'disconnected')
@@ -69,4 +77,78 @@ io.on('connection', function(socket: socketIO.Socket) {
io.emit('health-update', {id: data.player, health: hpLeft})
})
// ITEM ACTIONS //
socket.on('item-heal', () => {
let p = players.getPlayer(socket.id)
if (p) {
p.player.setHealth(100)
io.emit('health-update', {id: p.player.socket.id, health: p.player.getHealth()})
}
})
socket.on('item-defence', () => {
let p = players.getPlayer(socket.id)
if (p) {
p.player.setDefence(p.player.getDefence() + 5)
}
})
socket.on('item-damage', () => {
let p = players.getPlayer(socket.id)
if (p) {
p.player.setDamage(p.player.getDamage() + 5)
}
})
socket.on('key-action', (data: {key: number, isDown: boolean}) => {
let p = players.getPlayer(socket.id)
if (p) {
p.player.keyAction(data.key, data.isDown)
}
})
});
let time = Date.now()
const getDeltaTime = () => {
let t = Date.now()
let dt = t - time
time = t
return dt
}
setInterval(() => {
// game tick
let delta = getDeltaTime()
for (let player of players.getPlayers()) {
if (player.getHealth() <= 0) {
player.socket.disconnect()
}
// player movement
let previosPosition = player.getPosition()
player.move(delta)
if (previosPosition.x !== player.getPosition().x || previosPosition.y !== player.getPosition().y) {
io.emit('player-moved', {id: player.socket.id, position: player.getPosition()})
}
// endof: player movement
}
}, 1000/60)

4
server/src/types.ts Normal file
View File

@@ -0,0 +1,4 @@
export type Position = {
x: number,
y: number,
}