コード例 #1
0
        public override ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder)
        {
            var result = base.SerializeToBytes(chunk, blockPosition, builder);

            builder.WriteVariable(BlockTypeBelow?.ItemIndex ?? 0);
            return(result);
        }
コード例 #2
0
        public override ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder)
        {
            var result = base.SerializeToBytes(chunk, blockPosition, builder);

            builder.WriteVariable(StoredItemCount);
            return(result);
        }
コード例 #3
0
 protected Vector2 ScalePosition(Vector3Byte position)
 {
     return(new Vector2(MarkerContainer.rect.width * position.x / 255f, MarkerContainer.rect.height * position.z / 255f));
 }
コード例 #4
0
 public ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder)
 {
     builder.WriteVariable(Colony != null ? Colony.ColonyID : 0);
     return(ESerializeEntityResult.LoadChunkOnStartup | ESerializeEntityResult.WroteData);
 }
コード例 #5
0
        public static void ChangeSeasons()
        {
            if (Time.SecondsSinceStartDouble > _nextCycleTime)
            {
                var worldChunks = GetWorldChunks();
                var i           = 0;

                worldChunks.ForeachValue(c =>
                {
                    if (i >= _currentMin && i < _currentMax)
                    {
                        c.LockWriteData();

                        try
                        {
                            if (c.DataState != Chunk.ChunkDataState.DataFull)
                            {
                                return;
                            }

                            var data     = c.Data;
                            var didThing = false;

                            for (var d = 0; d < 4096; d++)
                            {
                                var existingType = data[d];

                                foreach (var type in BlockTypeRegistry.Mappings)
                                {
                                    if ((type.Value.Contains(existingType) &&
                                         NextSeason.SeasonalBlocks.ContainsKey(type.Key)) ||
                                        (PreviousSeason.SeasonalBlocks.ContainsKey(type.Key) &&
                                         PreviousSeason.SeasonalBlocks[type.Key] == existingType))
                                    {
                                        var localPos = new Vector3Byte(d);

                                        data = data.Set(localPos, NextSeason.SeasonalBlocks[type.Key]);

                                        if (!didThing)
                                        {
                                            didThing  = true;
                                            c.IsDirty = true;
                                        }

                                        ServerManager.SendBlockChange(localPos.ToWorld(c.Position),
                                                                      NextSeason.SeasonalBlocks[type.Key]);
                                        break;
                                    }
                                }
                            }

                            if (didThing)
                            {
                                c.Data = data;
                            }
                        }
                        finally
                        {
                            c.UnlockWriteData();
                        }
                    }

                    i++;
                });

                _currentMax   += CHUNKS_PER_CYCLE;
                _currentMin   += CHUNKS_PER_CYCLE;
                _nextCycleTime = Time.SecondsSinceStartDouble + CYCLE_SECONDS;

                if (_currentMax > _totalChunks)
                {
                    _currentMax = CHUNKS_PER_CYCLE;
                    _currentMin = 0;
                }

                if (TimeCycle.TotalTime > _nextUpdate)
                {
                    _currentSeason = _nextSeason;

                    _nextSeason++;

                    if (_nextSeason >= _seasons.Count)
                    {
                        _nextSeason     = 0;
                        _previousSesion = _seasons.Count - 1;
                    }
                    else
                    {
                        _previousSesion = _nextSeason - 1;
                    }

                    _currentMax    = CHUNKS_PER_CYCLE;
                    _currentMin    = 0;
                    _nextCycleTime = 0;
                    _nextUpdate    = TimeCycle.TotalTime + (24 * _daysBetweenSeasonChanges);
                }
            }
        }