コード例 #1
0
ファイル: ChunkGrain.cs プロジェクト: mweilb/Research
        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));
        }
コード例 #2
0
ファイル: ChunkGrain.Setup.cs プロジェクト: mweilb/Research
        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)));
        }
コード例 #3
0
        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")));
        }
コード例 #4
0
        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")));
        }
コード例 #5
0
ファイル: WorldGrain.cs プロジェクト: mweilb/Research
 public Tracking(IChunkGrain chunk, IntVec3 minPosition, IntVec3 maxPosition)
 {
     mChunk       = chunk;
     mMinPosition = new IntVec3(minPosition);
     mMaxPosition = new IntVec3(maxPosition);
 }