Broke some stuff, added index screen to select a name
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
4
server/src/types.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export type Position = {
|
||||
x: number,
|
||||
y: number,
|
||||
}
|
||||
Reference in New Issue
Block a user