Fix stuff, add a small implementation of picking up blocks (doesn't go into inventory)

This commit is contained in:
DemiPixel 2015-11-19 21:16:27 -08:00
parent a02983c2bd
commit 2a376626e6
5 changed files with 36 additions and 12 deletions

View file

@ -1,5 +1,3 @@
var Vec3 = require("vec3").Vec3;
module.exports.player=function(player,serv)
{
player.changeBlock=async (position,blockType,blockData) =>
@ -33,7 +31,7 @@ module.exports.player=function(player,serv)
action(params) {
var res = params.map((num, i) => { // parseInt paramaters
if (num.indexOf('~') == 0) {
return (player.entity.position[['', 'x', 'y', 'z'][i]] >> 5) + parseInt(num.slice(1) || 0);
return (player.position[['', 'x', 'y', 'z'][i]] >> 5) + parseInt(num.slice(1) || 0);
} else {
return parseInt(num); // return parseInt>>5 if position, not id
}

View file

@ -4,7 +4,7 @@ module.exports.player=function(player)
{
player._client.on('block_place', async ({location} = {}) => {
var referencePosition=new Vec3(location.x,location.y,location.z);
if (player.entity.crouching) return;
if (player.crouching) return;
try {
var id = await player.world.getBlockType(referencePosition);
var blockAbove = await player.world.getBlockType(referencePosition.clone().add(new Vec3(0, 1, 0)));

View file

@ -76,7 +76,7 @@ module.exports.player=function(player,serv)
player.changeBlock(location,0,0);
// Drop block
serv.spawnObject(2, player.world, location.offset(0.5, 0.5, 0.5), {
velocity: Vec3(Math.random()*4 - 2, Math.random()*2 + 2, Math.random()*4 - 2),
velocity: new Vec3(Math.random()*4 - 2, Math.random()*2 + 2, Math.random()*4 - 2),
itemId: currentlyDugBlock.type,
itemDamage: currentlyDugBlock.metadata
});

View file

@ -34,6 +34,7 @@ module.exports.server=function(serv,options) {
object.friction = (new Vec3(10*32, 0, 10*32)).floored();
object.size = new Vec3(0.25*32, 0.25*32, 0.25*32); // Hardcoded, will be dependent on type!
object.deathTime = 60*1000; // 60 seconds
object.pickupTime = 200;
object.itemId = itemId;
object.itemDamage = itemDamage;
@ -72,6 +73,16 @@ module.exports.server=function(serv,options) {
if (entity.deathTime && Date.now() - entity.bornTime >= entity.deathTime) {
entity.destroy();
return;
} else if (entity.pickupTime && Date.now() - entity.bornTime >= entity.pickupTime) {
var players = serv.getNearby({
world: entity.world,
position: entity.position,
radius: 1.5*32 // Seems good for now
});
if (players.length) {
players[0].collect(entity);
entity.destroy();
}
}
if (!entity.velocity || !entity.size) return;
var oldPosAndOnGround = await entity.calculatePhysics(delta);
@ -241,19 +252,28 @@ module.exports.entity=function(entity,serv){
if (entity.type == 'player') {
entity.despawnEntities(entitiesToRemove);
entitiesToAdd.forEach(entity.spawnEntity);
entity.lastPositionPlayersUpdated=entity.position.clone();
} else {
entity.lastPositionPlayersUpdated=entity.position.clone();
}
entity.lastPositionPlayersUpdated=entity.position.clone();
var playersToAdd = entitiesToAdd.filter(e => e.type == 'player').map(e => e.player);
var playersToRemove = entitiesToRemove.filter(e => e.type == 'player').map(e => e.player);
var playersToAdd = entitiesToAdd.filter(e => e.type == 'player');
var playersToRemove = entitiesToRemove.filter(e => e.type == 'player');
playersToRemove.forEach(p => p.despawnEntities([entity]));
playersToRemove.forEach(p => p.entity.nearbyEntities=p.entity.getNearby());
playersToRemove.forEach(p => p.nearbyEntities=p.getNearby());
playersToAdd.forEach(p => p.spawnEntity(entity));
playersToAdd.forEach(p => p.entity.nearbyEntities=p.entity.getNearby());
playersToAdd.forEach(p => p.nearbyEntities=p.getNearby());
entity.nearbyEntities=updatedEntities;
};
entity.collect = (collectEntity) => {
if (entity.type != 'player') serv.emit('error', 'Non-player entity (ttype ' + entity.type + ') cannot collect another entity');
else {
serv._writeNearby('collect', {
collectedEntityId: collectEntity.id,
collectorEntityId: entity.id
}, collectEntity);
entity.playSoundAtSelf('random.pop');
}
}
};

View file

@ -102,4 +102,10 @@ module.exports.player=function(player,serv) {
serv.playSound(sound_name, player.world, player.position.scaled(1/32), {volume: volume,pitch: pitch});
}
});
};
module.exports.entity=function(entity,serv) {
entity.playSoundAtSelf = (sound, opt={}) => {
serv.playSound(sound, entity.world, entity.position.scaled(1/32), opt);
}
};