public Task <string> UpdatePlayer(string playerSessionID, IPlayerObserver playerObserver, Vec3 position) { int idx = mActivePlayers.FindIndex(item => (item.mID == playerSessionID)); if (idx >= 0) { if ((position.x < mMinLocation.x) || (position.y < mMinLocation.y) || (position.z < mMinLocation.z) || (position.x > mMaxLocation.x) || (position.y > mMaxLocation.y) || (position.z > mMaxLocation.z)) { IChunkGrain transfer = TransferPlayerTo(playerSessionID, playerObserver, ref position, mActivePlayers[idx].mPosition); if (transfer != null) { LeavePlayer(playerSessionID); return(Task.FromResult <string>(transfer.GetPrimaryKeyString())); } } mActivePlayers[idx].mPosition = position; mActivePlayers[idx].mVersion = MinecraftVersion.GetNext(); return(Task.FromResult <string>(this.GetPrimaryKeyString())); } return(Task.FromResult <string>(null)); }
public Task <FeedbackMessage> Associate(string id, string grainID, int fidelity, IntVec3 minLocation, IntVec3 maxLocation) { IChunkGrain chunkGrain = GrainFactory.GetGrain <IChunkGrain>(grainID); var chunkTracking = new ChunkTracking(); chunkTracking.mGrain = chunkGrain; chunkTracking.mFidelity = fidelity; chunkTracking.mMinLocation = minLocation; chunkTracking.mPlayerVersion = MinecraftVersion.MinValue; chunkTracking.mBlockVersion = MinecraftVersion.MinValue; chunkTracking.mMaxLocation = maxLocation; mAssociatedGrains.Add(minLocation.ToString(), chunkTracking); return(Task.FromResult <FeedbackMessage>(new FeedbackMessage(FeedbackMessage.Responces.None))); }
public async Task <FeedbackMessage> Initialize(MinecraftOrleansWorldClient world, string playerID, IPlayerObserver observer, Vec3 spawnPoint) { mWorld = world; mPlayerID = playerID; mObserver = await GrainClient.GrainFactory.CreateObjectReference <IPlayerObserver>(observer); var grainID = mWorld.GetChunk(spawnPoint); if (grainID != "") { mCurGrain = GrainClient.GrainFactory.GetGrain <IChunkGrain>(grainID); return(await mCurGrain.StartPlayer(mPlayerID, mObserver, spawnPoint, null)); } return(await Task.FromResult(new FeedbackMessage(FeedbackMessage.Responces.Error, "Spawn point not in available Chunk"))); }
public async Task <FeedbackMessage> Update(Vec3 position) { if (mCurGrain != null) { var grainID = await mCurGrain.UpdatePlayer(mPlayerID, mObserver, position); if (grainID != null) { mCurGrain = GrainClient.GrainFactory.GetGrain <IChunkGrain>(grainID); } else { return(await Task.FromResult <FeedbackMessage>(new FeedbackMessage(FeedbackMessage.Responces.Error, "Update - player not found"))); } return(await Task.FromResult <FeedbackMessage>(new FeedbackMessage(FeedbackMessage.Responces.None))); } return(await Task.FromResult <FeedbackMessage>(new FeedbackMessage(FeedbackMessage.Responces.Error, "Update was not initialized first or null chunk returned"))); }
public Tracking(IChunkGrain chunk, IntVec3 minPosition, IntVec3 maxPosition) { mChunk = chunk; mMinPosition = new IntVec3(minPosition); mMaxPosition = new IntVec3(maxPosition); }