public override void RemoveInvalidBlocks() { this._blockRefCount = 0; this._tickRefCount = 0; for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { for (int z = 0; z < 16; z++) { var idx = GetCoordinateIndex(x, y, z); var blockstate = this.Get(x, y, z, 0);//.Block; if (blockstate == null) { continue; } var block = blockstate.Block; //TransparentBlocks.Set(idx, block.Transparent); // SolidBlocks.Set(idx, block.Solid); if (!(block is Air)) { ++this._blockRefCount; if (block.RandomTicked) { ++this._tickRefCount; } if (block.BlockMaterial.IsWatterLoggable) { Set(1, x, y, z, BlockFactory.GetBlockState("minecraft:water")); } } if (block.LightValue > 0) { var coords = new BlockCoordinates(x, y, z); if (!LightSources.Contains(coords)) { LightSources.Add(coords); } if (GetBlocklight(x, y, z) != block.LightValue) { SetBlocklight(x, y, z, (byte)block.LightValue); SetBlockLightScheduled(x, y, z, true); } } } } } }
public void RemoveInvalidBlocks() { this._blockRefCount = 0; this._tickRefCount = 0; for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { for (int z = 0; z < 16; z++) { var idx = GetCoordinateIndex(x, y, z); //foreach (var state in this.GetAll(x, y, z)) { var block = this.Get(x, y, z, 0).Block; TransparentBlocks.Set(idx, block.Transparent); SolidBlocks.Set(idx, block.Solid); if (!(block is Air)) { ++this._blockRefCount; if (block.RandomTicked) { ++this._tickRefCount; } } if (Alex.ServerType == ServerType.Java) { if (block.LightValue > 0) { var coords = new BlockCoordinates(x, y, z); if (!LightSources.Contains(coords)) { LightSources.Add(coords); } if (GetBlocklight(x, y, z) != block.LightValue) { SetBlocklight(x, y, z, (byte)block.LightValue); SetBlockLightScheduled(x, y, z, true); } } } } } } } //CheckForSolidBorder(); }
private void UpdateItemGlow(Item item, SpriteBatch spriteBatch, Vector2 viewPosition, float alpha, float scaleSize, DepthProvider depthProvider) { var color = GetItemGlowColor(item); if (color == null) { return; } var isDarkItem = (color == Color.Black); if (GlowConfig.ShowGlows) { var colorAlpha = isDarkItem ? 0.8f : 0.6f; spriteBatch.Draw( GlowTexture, viewPosition + TileSize / 2 * (scaleSize * Config.Layout.Scale / Game1.pixelZoom), GlowTexture.Bounds, color.Value * colorAlpha * alpha, 0, GlowTexture.Bounds.Center.ToVector(), 4f * (scaleSize * Config.Layout.Scale / Game1.pixelZoom), SpriteEffects.None, depthProvider.GetDepth()); } if (isDarkItem || !GlowConfig.ShowLights) { return; } if (!LightSources.TryGetValue(item, out var light)) { light = new LightSource(LightSource.lantern, Vector2.Zero, 32f / Game1.options.lightingQuality); LightSources.Add(item, light); } light.position = viewPosition + new Vector2(Game1.viewport.X, Game1.viewport.Y) + TileSize / 2; }
public StarSystem(UniverseIni universe, Section section, FreelancerData data) : base(data) { if (universe == null) { throw new ArgumentNullException("universe"); } if (section == null) { throw new ArgumentNullException("section"); } string file = null; foreach (Entry e in section) { switch (e.Name.ToLowerInvariant()) { case "nickname": if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (Nickname != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } Nickname = e[0].ToString(); break; case "file": if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (file != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } file = e[0].ToString(); break; case "pos": if (e.Count != 2) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (Pos != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } Pos = new Vector2(e[0].ToSingle(), e[1].ToSingle()); break; case "msg_id_prefix": if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (MsgIdPrefix != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } MsgIdPrefix = e[0].ToString(); break; case "visit": if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (Visit != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } Visit = e[0].ToInt32(); break; case "strid_name": if (e.Count == 0) { break; } if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (IdsName != 0) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } IdsName = e[0].ToInt32(); break; case "ids_info": if (e.Count == 0) { break; } if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (IdsInfo != 0) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } IdsInfo = e[0].ToInt32(); break; case "navmapscale": if (e.Count != 1) { throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count); } if (NavMapScale != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name); } NavMapScale = e[0].ToSingle(); break; default: throw new Exception("Invalid Entry in " + section.Name + ": " + e.Name); } } if (file == null) //TODO: MultiUniverse { FLLog.Warning("Ini", "Unimplemented: Possible MultiUniverse system " + Nickname); MultiUniverse = true; return; } foreach (Section s in ParseFile(GameData.Freelancer.DataPath + "universe\\" + file)) { switch (s.Name.ToLowerInvariant()) { case "systeminfo": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "name": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (Name != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } Name = e[0].ToString(); break; case "space_color": if (e.Count != 3) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (SpaceColor != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } SpaceColor = new Color4(e[0].ToInt32() / 255f, e[1].ToInt32() / 255f, e[2].ToInt32() / 255f, 1f); break; case "local_faction": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (LocalFaction != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } LocalFaction = e[0].ToString(); break; case "rpop_solar_detection": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (RpopSolarDetection != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } RpopSolarDetection = e[0].ToBoolean(); break; case "space_farclip": if (SpaceFarClip != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } SpaceFarClip = e[0].ToSingle(); break; default: throw new Exception("Invalid Entry in " + section.Name + ": " + e.Name); } } break; case "music": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "space": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (MusicSpace != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } MusicSpace = e[0].ToString(); break; case "danger": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (MusicDanger != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } MusicDanger = e[0].ToString(); break; case "battle": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (MusicBattle != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } MusicBattle = e[0].ToString(); break; default: throw new Exception("Invalid Entry in " + section.Name + ": " + e.Name); } } break; case "archetype": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "ship": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (ArchetypeShip == null) { ArchetypeShip = new List <string>(); } ArchetypeShip.Add(e[0].ToString()); break; case "simple": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (ArchetypeSimple == null) { ArchetypeSimple = new List <string>(); } ArchetypeSimple.Add(e[0].ToString()); break; case "solar": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (ArchetypeSolar == null) { ArchetypeSolar = new List <string>(); } ArchetypeSolar.Add(e[0].ToString()); break; case "equipment": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (ArchetypeEquipment == null) { ArchetypeEquipment = new List <string>(); } ArchetypeEquipment.Add(e[0].ToString()); break; case "snd": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (ArchetypeSnd == null) { ArchetypeSnd = new List <string>(); } ArchetypeSnd.Add(e[0].ToString()); break; case "voice": if (ArchetypeVoice == null) { ArchetypeVoice = new List <List <string> >(); } ArchetypeVoice.Add(new List <string>()); foreach (IValue i in e) { ArchetypeVoice[ArchetypeVoice.Count - 1].Add(i.ToString()); } break; default: throw new Exception("Invalid Entry in " + s.Name + ": " + e.Name); } } break; case "dust": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "spacedust": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (Spacedust != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } Spacedust = e[0].ToString(); break; default: throw new Exception("Invalid Entry in " + s.Name + ": " + e.Name); } } break; case "nebula": if (Nebulae == null) { Nebulae = new List <Nebula>(); } Nebulae.Add(new Nebula(this, s, GameData)); break; case "asteroids": if (Asteroids == null) { Asteroids = new List <AsteroidField>(); } Asteroids.Add(new AsteroidField(this, s, GameData)); break; case "ambient": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "color": if (e.Count != 3) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (AmbientColor != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } AmbientColor = new Color4(e[0].ToInt32() / 255f, e[1].ToInt32() / 255f, e[2].ToInt32() / 255f, 1f); break; default: throw new Exception("Invalid Entry in " + s.Name + ": " + e.Name); } } break; case "lightsource": if (LightSources == null) { LightSources = new List <LightSource>(); } LightSources.Add(new LightSource(s, GameData)); break; case "object": if (Objects == null) { Objects = new List <SystemObject>(); } Objects.Add(new SystemObject(universe, this, s, GameData)); break; case "encounterparameters": if (EncounterParameters == null) { EncounterParameters = new List <EncounterParameter>(); } EncounterParameters.Add(new EncounterParameter(s)); break; case "texturepanels": TexturePanels = new TexturePanelsRef(s, GameData); break; case "background": foreach (Entry e in s) { switch (e.Name.ToLowerInvariant()) { case "basic_stars": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (BackgroundBasicStarsPath != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } BackgroundBasicStarsPath = VFS.GetPath(GameData.Freelancer.DataPath + e [0].ToString()); break; case "complex_stars": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } if (BackgroundComplexStarsPath != null) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } BackgroundComplexStarsPath = VFS.GetPath(GameData.Freelancer.DataPath + e [0].ToString()); break; case "nebulae": if (e.Count != 1) { throw new Exception("Invalid number of values in " + s.Name + " Entry " + e.Name + ": " + e.Count); } string temp = VFS.GetPath(GameData.Freelancer.DataPath + e[0].ToString(), false); if (BackgroundNebulaePath != null && BackgroundNebulaePath != temp) { throw new Exception("Duplicate " + e.Name + " Entry in " + s.Name); } BackgroundNebulaePath = temp; break; default: throw new Exception("Invalid Entry in " + s.Name + ": " + e.Name); } } break; case "zone": if (Zones == null) { Zones = new List <Zone>(); } Zones.Add(new Zone(s, GameData)); break; case "field": Field = new Field(s); break; case "asteroidbillboards": AsteroidBillboards = new AsteroidBillboards(s); break; default: throw new Exception("Invalid Section in " + file + ": " + s.Name); } } }
public void Set(int storage, int x, int y, int z, BlockState state) { if (storage > _blockStorages.Length) { throw new IndexOutOfRangeException($"The storage id {storage} does not exist!"); } var blockCoordinates = new BlockCoordinates(x, y, z); if (state == null) { Log.Warn($"State == null"); return; } var coordsIndex = GetCoordinateIndex(x, y, z); if (storage == 0) { if (state.Block.LightValue > 0) { if (!LightSources.Contains(blockCoordinates)) { LightSources.Add(blockCoordinates); } SetBlocklight(x, y, z, (byte)state.Block.LightValue); SetBlockLightScheduled(x, y, z, true); } else { if (LightSources.Contains(blockCoordinates)) { LightSources.Remove(blockCoordinates); } } BlockState iblockstate = this.Get(x, y, z, storage); if (iblockstate != null) { Block block = iblockstate.Block; if (!(block is Air)) { --this._blockRefCount; if (block.RandomTicked) { --this._tickRefCount; } TransparentBlocks.Set(coordsIndex, true); SolidBlocks.Set(coordsIndex, false); } } OnBlockSet(x, y, z, state, iblockstate); } Block block1 = state.Block; if (storage == 0) { if (!(block1 is Air)) { ++this._blockRefCount; if (block1.RandomTicked) { ++this._tickRefCount; } TransparentBlocks.Set(coordsIndex, block1.Transparent); SolidBlocks.Set(coordsIndex, block1.Solid); } } if (state != null) { _blockStorages[storage].Set(x, y, z, state); } //ScheduledUpdates.Set(coordsIndex, true); SetScheduled(x, y, z, true); IsDirty = true; }