write game abilities to db
This commit is contained in:
parent
69e1a3fcea
commit
69fe6e8f55
@ -5,8 +5,8 @@ const CrypList = require('./cryp.list');
|
||||
const addState = connect(
|
||||
function receiveState(state) {
|
||||
const { ws, cryps, activeItem } = state;
|
||||
function sendCombatPve(crypId) {
|
||||
return ws.sendCombatPve(crypId);
|
||||
function sendGamePve(crypId) {
|
||||
return ws.sendGamePve(crypId);
|
||||
}
|
||||
|
||||
function sendItemUse(targetId) {
|
||||
@ -16,7 +16,7 @@ const addState = connect(
|
||||
return false;
|
||||
}
|
||||
|
||||
return { cryps, sendCombatPve, activeItem, sendItemUse };
|
||||
return { cryps, sendGamePve, activeItem, sendItemUse };
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ const preact = require('preact');
|
||||
const { stringSort } = require('./../utils');
|
||||
const nameSort = stringSort('name');
|
||||
|
||||
function CrypList({ cryps, activeItem, sendCombatPve, sendItemUse }) {
|
||||
function CrypList({ cryps, activeItem, sendGamePve, sendItemUse }) {
|
||||
if (!cryps) return <div>not ready</div>;
|
||||
const crypPanels = cryps.sort(nameSort).map(cryp => (
|
||||
|
||||
@ -35,7 +35,7 @@ function CrypList({ cryps, activeItem, sendCombatPve, sendItemUse }) {
|
||||
className="button is-dark"
|
||||
type="submit"
|
||||
disabled={cryp.hp.value === 0}
|
||||
onClick={() => sendCombatPve(cryp.id)}>
|
||||
onClick={() => sendGamePve(cryp.id)}>
|
||||
Start PVE
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@ -4,12 +4,12 @@ const Game = require('./game');
|
||||
|
||||
const addState = connect(
|
||||
function receiveState(state) {
|
||||
const { game, account } = state;
|
||||
// function sendCombatPve(crypId) {
|
||||
// return ws.sendCombatPve(crypId);
|
||||
// }
|
||||
const { ws, game, account } = state;
|
||||
function sendGameAbility(crypId, targetTeamId, ability) {
|
||||
return ws.sendGameAbility(game.id, crypId, targetTeamId, ability);
|
||||
}
|
||||
|
||||
return { game };
|
||||
return { game, account, sendGameAbility };
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@ -2,16 +2,34 @@ const preact = require('preact');
|
||||
|
||||
function GamePanel({ game, sendGameAbility, account }) {
|
||||
if (!game) return <div>...</div>;
|
||||
return (
|
||||
<div>
|
||||
<div>{JSON.stringify(game)}</div>
|
||||
|
||||
const otherTeams = game.teams.filter(t => t.id !== account.id);
|
||||
|
||||
const playerTeam = game.teams.find(t => t.id === account.id);
|
||||
const playerCryps = playerTeam.cryps.map(c => (
|
||||
<div key={c.id} >
|
||||
<div>{c.name}</div>
|
||||
<button
|
||||
className="button is-dark is-fullwidth"
|
||||
type="submit"
|
||||
onClick={() => sendCrypSpawn(name)}>
|
||||
Spawn 👾
|
||||
onClick={() => sendGameAbility(c.id, otherTeams[0].id, 'Attack')}>
|
||||
Attack
|
||||
</button>
|
||||
</div>
|
||||
));
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div>
|
||||
<h1>them</h1>
|
||||
<div>{JSON.stringify(otherTeams)}</div>
|
||||
</div>
|
||||
<div>
|
||||
<h1>us</h1>
|
||||
{playerCryps}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
// return (
|
||||
// <div className="">
|
||||
|
||||
@ -24,7 +24,7 @@ function createSocket(store) {
|
||||
|
||||
// Connection opened
|
||||
ws.addEventListener('open', function wsOpen(event) {
|
||||
//send({ method: 'account_login', params: { name: 'ntr', password: 'grepgrepgrep' } });
|
||||
send({ method: 'account_login', params: { name: 'ntr', password: 'grepgrepgrep' } });
|
||||
});
|
||||
|
||||
// Listen for messages
|
||||
@ -79,7 +79,7 @@ function createSocket(store) {
|
||||
console.log('got a new cryp', cryp);
|
||||
}
|
||||
|
||||
function combatPve(response) {
|
||||
function gamePve(response) {
|
||||
const [structName, game] = response;
|
||||
console.log('got a new game', game);
|
||||
}
|
||||
@ -109,10 +109,15 @@ function createSocket(store) {
|
||||
send({ method: 'cryp_spawn', params: { name } });
|
||||
}
|
||||
|
||||
function sendCombatPve(id) {
|
||||
send({ method: 'combat_pve', params: { id } });
|
||||
function sendGamePve(id) {
|
||||
send({ method: 'game_pve', params: { id } });
|
||||
}
|
||||
|
||||
function sendGameAbility(gameId, crypId, targetTeamId, ability) {
|
||||
send({ method: 'game_ability', params: { game_id: gameId, cryp_id: crypId, target_team_id: targetTeamId, ability } });
|
||||
}
|
||||
|
||||
|
||||
function sendItemUse(item, target) {
|
||||
console.log(item, target);
|
||||
send({ method: 'item_use', params: { item, target } });
|
||||
@ -127,7 +132,7 @@ function createSocket(store) {
|
||||
// this object wraps the reply types to a function
|
||||
const handlers = {
|
||||
cryp_spawn: crypSpawn,
|
||||
combat_pve: combatPve,
|
||||
game_pve: gamePve,
|
||||
game_state: gameState,
|
||||
account_login: accountLogin,
|
||||
account_create: accountLogin,
|
||||
@ -153,7 +158,8 @@ function createSocket(store) {
|
||||
return {
|
||||
sendAccountLogin,
|
||||
sendAccountRegister,
|
||||
sendCombatPve,
|
||||
sendGamePve,
|
||||
sendGameAbility,
|
||||
sendCrypSpawn,
|
||||
sendItemUse,
|
||||
connect,
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
exports.up = async knex => {
|
||||
knex.schema.createTable('games', table => {
|
||||
await knex.schema.createTable('games', table => {
|
||||
table.uuid('id').primary();
|
||||
table.timestamps();
|
||||
table.binary('data').notNullable();
|
||||
table.index('id');
|
||||
table.timestamps();
|
||||
|
||||
table.binary('data').notNullable();
|
||||
});
|
||||
|
||||
knex.schema.createTable('players', table => {
|
||||
await knex.schema.createTable('players', table => {
|
||||
table.uuid('id').primary();
|
||||
table.index('id');
|
||||
|
||||
|
||||
@ -363,12 +363,12 @@ pub fn game_new(game: Game, tx: &mut Transaction) -> Result<Game, Error> {
|
||||
|
||||
let query = "
|
||||
INSERT INTO games (id, data)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING id, account;
|
||||
VALUES ($1, $2)
|
||||
RETURNING id;
|
||||
";
|
||||
|
||||
let result = tx
|
||||
.query(query, &[&game_bytes, &game.id])?;
|
||||
.query(query, &[&game.id, &game_bytes])?;
|
||||
|
||||
let _returned = result.iter().next().expect("no row returned");
|
||||
|
||||
@ -377,6 +377,34 @@ pub fn game_new(game: Game, tx: &mut Transaction) -> Result<Game, Error> {
|
||||
return Ok(game);
|
||||
}
|
||||
|
||||
pub fn players_write(game: Game, tx: &mut Transaction) -> Result<Game, Error> {
|
||||
let game_bytes = to_vec(&game)?;
|
||||
|
||||
for team in &game.teams {
|
||||
// pve
|
||||
if !team.id.is_nil() {
|
||||
for cryp in &team.cryps {
|
||||
let id = Uuid::new_v4();
|
||||
|
||||
let query = "
|
||||
INSERT INTO players (id, game, cryp, account)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING id, account;
|
||||
";
|
||||
|
||||
let result = tx
|
||||
.query(query, &[&id, &game.id, &cryp.id, &team.id])?;
|
||||
|
||||
let _returned = result.iter().next().expect("no row written");
|
||||
|
||||
println!("wrote player entry game:{:?} cryp:{:?} account:{:?}", game.id, cryp.id, team.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Ok(game);
|
||||
}
|
||||
|
||||
pub fn game_write(game: Game, tx: &mut Transaction) -> Result<Game, Error> {
|
||||
let game_bytes = to_vec(&game)?;
|
||||
|
||||
@ -390,7 +418,7 @@ pub fn game_write(game: Game, tx: &mut Transaction) -> Result<Game, Error> {
|
||||
let result = tx
|
||||
.query(query, &[&game_bytes, &game.id])?;
|
||||
|
||||
let _returned = result.iter().next().expect("no row returned");
|
||||
let returned = result.iter().next().expect("no row returned");
|
||||
|
||||
println!("{:?} wrote game", game.id);
|
||||
|
||||
@ -461,7 +489,7 @@ pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account)
|
||||
|
||||
game.start();
|
||||
|
||||
Ok(game)
|
||||
return game_new(game, tx);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user