public override ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder) { var result = base.SerializeToBytes(chunk, blockPosition, builder); builder.WriteVariable(BlockTypeBelow?.ItemIndex ?? 0); return(result); }
public override ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder) { var result = base.SerializeToBytes(chunk, blockPosition, builder); builder.WriteVariable(StoredItemCount); return(result); }
protected Vector2 ScalePosition(Vector3Byte position) { return(new Vector2(MarkerContainer.rect.width * position.x / 255f, MarkerContainer.rect.height * position.z / 255f)); }
public ESerializeEntityResult SerializeToBytes(Chunk chunk, Vector3Byte blockPosition, ByteBuilder builder) { builder.WriteVariable(Colony != null ? Colony.ColonyID : 0); return(ESerializeEntityResult.LoadChunkOnStartup | ESerializeEntityResult.WroteData); }
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); } } }