WIP: Player Saving
This commit is contained in:
parent
e303cbc5df
commit
5a250cb601
5 changed files with 59 additions and 6 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import { IReader, IWriter } from "bufferstuff";
|
||||||
import AABB from "../AABB";
|
import AABB from "../AABB";
|
||||||
import { Chunk } from "../Chunk";
|
import { Chunk } from "../Chunk";
|
||||||
import { MetadataEntry, MetadataWriter } from "../MetadataWriter";
|
import { MetadataEntry, MetadataWriter } from "../MetadataWriter";
|
||||||
|
@ -37,8 +38,6 @@ export class Entity implements IEntity {
|
||||||
public absRotation:Rotation;
|
public absRotation:Rotation;
|
||||||
public lastAbsRotation:Rotation;
|
public lastAbsRotation:Rotation;
|
||||||
|
|
||||||
public velocity:Vec3;
|
|
||||||
|
|
||||||
public health:number;
|
public health:number;
|
||||||
public wasHurt:boolean;
|
public wasHurt:boolean;
|
||||||
public isDead:boolean;
|
public isDead:boolean;
|
||||||
|
@ -85,8 +84,6 @@ export class Entity implements IEntity {
|
||||||
this.absRotation = new Rotation();
|
this.absRotation = new Rotation();
|
||||||
this.lastAbsRotation = new Rotation();
|
this.lastAbsRotation = new Rotation();
|
||||||
|
|
||||||
this.velocity = new Vec3();
|
|
||||||
|
|
||||||
this.crouching = this.lastCrouchState = this.lastFireState = this.queuedChunkUpdate = false;
|
this.crouching = this.lastCrouchState = this.lastFireState = this.queuedChunkUpdate = false;
|
||||||
|
|
||||||
this.chunk = world.getChunk(this.position.x >> 4, this.position.z >> 4);
|
this.chunk = world.getChunk(this.position.x >> 4, this.position.z >> 4);
|
||||||
|
@ -96,6 +93,24 @@ export class Entity implements IEntity {
|
||||||
this.isDead = false;
|
this.isDead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fromSave(reader:IReader) {
|
||||||
|
this.position.set(reader.readDouble(), reader.readDouble(), reader.readDouble());
|
||||||
|
this.motion.set(reader.readFloat(), reader.readFloat(), reader.readFloat());
|
||||||
|
this.rotation.set(reader.readFloat(), reader.readFloat());
|
||||||
|
this.fire = reader.readShort();
|
||||||
|
this.fallDistance = reader.readFloat();
|
||||||
|
this.health = reader.readByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public toSave(writer:IWriter) {
|
||||||
|
writer.writeDouble(this.position.x).writeDouble(this.position.y).writeDouble(this.position.z) // Position
|
||||||
|
.writeDouble(this.motion.x).writeDouble(this.motion.y).writeDouble(this.motion.z) // Motion
|
||||||
|
.writeFloat(this.rotation.x).writeFloat(this.rotation.y) // Rotation
|
||||||
|
.writeShort(this.fire)
|
||||||
|
.writeFloat(this.fallDistance)
|
||||||
|
.writeByte(this.health);
|
||||||
|
}
|
||||||
|
|
||||||
sendToNearby(buffer:Buffer) {
|
sendToNearby(buffer:Buffer) {
|
||||||
this.world.sendToNearbyClients(this, buffer);
|
this.world.sendToNearbyClients(this, buffer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,8 @@ import Vec3 from "../Vec3"
|
||||||
export interface IEntity {
|
export interface IEntity {
|
||||||
entityId:number,
|
entityId:number,
|
||||||
position:Vec3,
|
position:Vec3,
|
||||||
|
motion:Vec3,
|
||||||
lastPosition:Vec3,
|
lastPosition:Vec3,
|
||||||
velocity:Vec3,
|
|
||||||
crouching:boolean,
|
crouching:boolean,
|
||||||
updateMetadata:() => void,
|
updateMetadata:() => void,
|
||||||
distanceTo:(entity:IEntity) => number,
|
distanceTo:(entity:IEntity) => number,
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
import { IReader, IWriter } from "bufferstuff";
|
||||||
import { ItemStack } from "./ItemStack";
|
import { ItemStack } from "./ItemStack";
|
||||||
|
|
||||||
export default interface IInventory {
|
export default interface IInventory {
|
||||||
|
fromSave:(reader:IReader) => void,
|
||||||
|
toSave:(writer:IWriter) => void,
|
||||||
getInventoryName:() => string,
|
getInventoryName:() => string,
|
||||||
getInventorySize:() => number,
|
getInventorySize:() => number,
|
||||||
getSlotItemStack:(slotId:number) => ItemStack | null
|
getSlotItemStack:(slotId:number) => ItemStack | null
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Endian, createWriter } from "bufferstuff";
|
import { Endian, IReader, IWriter, createWriter } from "bufferstuff";
|
||||||
import { ItemStack } from "./ItemStack";
|
import { ItemStack } from "./ItemStack";
|
||||||
import IInventory from "./IInventory";
|
import IInventory from "./IInventory";
|
||||||
|
|
||||||
|
@ -18,6 +18,25 @@ export class Inventory implements IInventory {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fromSave(reader:IReader) {
|
||||||
|
const inventorySize = reader.readByte();
|
||||||
|
for (let i = 0; i < inventorySize; i++) {
|
||||||
|
this.itemStacks[i] = ItemStack.FromSave(reader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public toSave(writer:IWriter) {
|
||||||
|
writer.writeByte(this.size);
|
||||||
|
for (const itemStack of this.itemStacks) {
|
||||||
|
if (itemStack === null) {
|
||||||
|
writer.writeShort(-1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemStack.toSave(writer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
addItemStack(itemStack:ItemStack) {
|
addItemStack(itemStack:ItemStack) {
|
||||||
// Check bottom inventory row (hotbar) first.
|
// Check bottom inventory row (hotbar) first.
|
||||||
/*let workingItemStack:ItemStack | null;
|
/*let workingItemStack:ItemStack | null;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { IReader, IWriter } from "bufferstuff";
|
||||||
import { Block } from "../blocks/Block";
|
import { Block } from "../blocks/Block";
|
||||||
import { IEntity } from "../entities/IEntity";
|
import { IEntity } from "../entities/IEntity";
|
||||||
import { Player } from "../entities/Player";
|
import { Player } from "../entities/Player";
|
||||||
|
@ -65,6 +66,21 @@ export class ItemStack {
|
||||||
this.itemStackId = ItemStack.ITEMSTACK_ID_ADDER++;
|
this.itemStackId = ItemStack.ITEMSTACK_ID_ADDER++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FromSave(reader:IReader) {
|
||||||
|
const itemId = reader.readShort();
|
||||||
|
if (itemId === -1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ItemStack(itemId, reader.readByte(), reader.readShort());
|
||||||
|
}
|
||||||
|
|
||||||
|
public toSave(writer:IWriter) {
|
||||||
|
writer.writeShort(this.itemID)
|
||||||
|
.writeByte(this.size)
|
||||||
|
.writeShort(this.damage);
|
||||||
|
}
|
||||||
|
|
||||||
public static Compare(itemStack1:ItemStack, itemStack2:ItemStack) {
|
public static Compare(itemStack1:ItemStack, itemStack2:ItemStack) {
|
||||||
return itemStack1.itemStackId === itemStack2.itemStackId;
|
return itemStack1.itemStackId === itemStack2.itemStackId;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue