public void UniverseUpdateBefore(Universe universe, Timestep step) { if (universe.Server) { if (universe.IsGamePaused()) { Cycle.Pause(); } else { Cycle.Resume(); if (new TimeSpan(DateTime.Now.Ticks - _secondTick.Ticks).TotalSeconds > 1) { var players = new Lyst <Entity>(); universe.GetPlayers(players); foreach (var player in players) { var runUpdate = false; for (var i = 0; i < player.Inventory.SlotCount(); i++) { var stack = player.Inventory.GetItemStack(i); if (!stack.IsNull()) { if (stack.Item is ChargeableItem chargeable) { if (chargeable.RunOnUpdateSecond) { runUpdate = true; chargeable.RunOnUpdateSecond = false; } } } } if (runUpdate) { player.Inventory.ItemStoreNeedsStorage(); } } _secondTick = DateTime.Now; } //foreach (var location in new List<Vector3I>(Cycles)) { // if (universe.TryFetchTileStateEntityLogic(location, TileAccessFlags.OverrideUnbreakable, out var logic)) { // var logicParse = logic.GetPowerForTile(universe); // if (logicParse != null) { // logicParse.Cycle.RunCycle(logicParse.RunCycle); // } else { // Cycles.Remove(location); // } // } //} } } }
public Lyst <Entity> GetPlayerEntities() { var output = new Lyst <Entity>(); Universe.GetPlayers(output); return(output); }
public override void Construct(Blob arguments, EntityUniverseFacade entityUniverseFacade) { _despawn = arguments.GetBool("despawn", false); Location = arguments.FetchBlob("location").GetVector3I(); Configuration = GameContext.TileDatabase.GetTileConfiguration(arguments.GetString("tile")); if (_logicOwner == EntityId.NullEntityId) { var blob = BlobAllocator.Blob(true); blob.SetString("tile", Configuration.Code); blob.FetchBlob("location").SetVector3I(Location); blob.SetBool("ignoreSpawn", _despawn); var entities = new Lyst <Entity>(); entityUniverseFacade.FindAllEntitiesInRange(entities, Location.ToVector3D(), 1F, entity => { if (entity.Removed) { return(false); } if (entity.Logic is GeneratorTileEntityLogic logic) { return(Location == logic.Location); } return(false); }); var tileEntity = entities.FirstOrDefault(); if (tileEntity != default(Entity)) { _logicOwner = tileEntity.Id; } else { var components = Configuration.Components.Select <GeneratorComponent>().ToList(); if (components.Any()) { var component = components.First(); if (component.Type == "solar") { _logicOwner = ChargeableTileEntityBuilder.Spawn(Location, blob, entityUniverseFacade, SolarPanelTileEntityBuilder.KindCode).Id; } else if (component.Type == "waterMill") { _logicOwner = ChargeableTileEntityBuilder.Spawn(Location, blob, entityUniverseFacade, WaterMillTileEntityBuilder.KindCode).Id; } } } } }
public void UniverseUpdateBefore(Universe universe, Timestep step) { if (universe.Server) { _cycle.RunCycle(() => { var players = new Lyst <Entity>(); universe.GetPlayers(players); foreach (var player in players) { try { var batteries = player.Inventory.GetBatteries(); var chargeables = player.Inventory.GetChargeables(); foreach (var battery in batteries.Where(x => x.ChargeInventory && x.ItemPower.CurrentCharge != 0)) { var transfered = 0L; var toTransfer = battery.ItemPower.GetTransferOut(); foreach (var chargeable in chargeables.Where(x => x.ItemPower.CurrentCharge != x.ItemPower.MaxCharge)) { var iToTransfer = chargeable.ItemPower.GetTransferIn(toTransfer - transfered); var newCharge = chargeable.ItemPower.CurrentCharge + iToTransfer; if (newCharge > chargeable.ItemPower.MaxCharge) { transfered += chargeable.ItemPower.MaxCharge - chargeable.ItemPower.CurrentCharge; chargeable.SetPower(chargeable.ItemPower.MaxCharge); } else { transfered = iToTransfer; chargeable.SetPower(newCharge); } if (transfered == battery.ItemPower.TransferRate.Out) { break; } } battery.RemovePower(transfered); } } catch { } } }); } }
public override void Construct(Blob arguments, EntityUniverseFacade entityUniverseFacade) { Location = arguments.FetchBlob("location").GetVector3I(); Configuration = GameContext.TileDatabase.GetTileConfiguration(arguments.GetString("tile")); if (_logicOwner == EntityId.NullEntityId) { if (Configuration.Components.Contains <SwitchTileComponent>()) { var components = Configuration.Components.Get <SwitchTileComponent>(); On = GameContext.TileDatabase.GetTileConfiguration(components.On); Off = GameContext.TileDatabase.GetTileConfiguration(components.Off); } var blob = BlobAllocator.Blob(true); blob.SetString("tile", Configuration.Code); blob.FetchBlob("location").SetVector3I(Location); var entities = new Lyst <Entity>(); entityUniverseFacade.FindAllEntitiesInRange(entities, Location.ToVector3D(), 1F, entity => { if (entity.Removed) { return(false); } if (entity.Logic is SwitchTileEntityLogic logic) { return(Location == logic.Location); } return(false); }); var tileEntity = entities.FirstOrDefault(); if (tileEntity != default(Entity)) { _logicOwner = tileEntity.Id; } else { _logicOwner = SwitchTileEntityBuilder.Spawn(Location, blob, entityUniverseFacade).Id; } } }
public static bool AnyInnerCableEntitiesInTile(this EntityUniverseFacade facade, Vector3I location, out Lyst <Entity> entities) { var output = false; var outputEntities = new Lyst <Entity>(); facade.ForAllEntitiesInRange(location.ToTileCenterVector3D(), 1F, entity => { if (entity.Logic is InnerCableTileEntityLogic logic) { if (logic.Location == location) { output = true; outputEntities.Add(entity); } } }); entities = outputEntities; return(output); }
public void UniverseUpdateBefore(Universe universe, Timestep step) { if (_serverMessages.Any() && _serverMainLoop != null) { var first = _serverMessages.First(); _serverMessages.Remove(first); Logger.WriteLine("<Server>: " + first); var online = new Lyst <Entity>(); universe.GetPlayers(online); foreach (var player in online) { _serverMainLoop.MessagePlayer(player.PlayerEntityLogic.Uid(), "<Server>: " + first, new object[0]); } } if (_serverKicks.Any() && _serverMainLoop != null) { var first = _serverKicks.First(); _serverKicks.Remove(first); var online = new Lyst <Entity>(); universe.GetPlayers(online); if (online.Any(x => string.Equals(x.PlayerEntityLogic.DisplayName(), first, StringComparison.CurrentCultureIgnoreCase))) { _serverMainLoop.KickPlayer(online.First(x => string.Equals(x.PlayerEntityLogic.DisplayName(), first, StringComparison.CurrentCultureIgnoreCase)).PlayerEntityLogic.Uid()); } else { Logger.WriteLine("Unable to kick '" + first + "'. Please check if they are online"); } } if (_serverBans.Any() && _serverMainLoop != null) { var first = _serverBans.First(); _serverBans.Remove(first.Key); var online = new Lyst <Entity>(); universe.GetPlayers(online); var target = online.FirstOrDefault(x => string.Equals(x.PlayerEntityLogic.DisplayName(), first.Key, StringComparison.CurrentCultureIgnoreCase)); if (target != null) { ServerContext.RightsManager.BanUser(target.PlayerEntityLogic.DisplayName(), target.PlayerEntityLogic.Uid(), first.Value); } else { Logger.WriteLine("Unable to ban '" + first + "'. Please check they are online"); } } if (_serverUnbans.Any() && _serverMainLoop != null) { var first = _serverUnbans.First(); _serverUnbans.Remove(first); string uid; if (ServerContext.RightsManager.TryGetUIDByUsername(first, out uid)) { ServerContext.RightsManager.UnbanUser(first, uid); } else { Logger.WriteLine("Unable to unban '" + first + "'."); } } if (_serverMutes.Any() && _serverMainLoop != null) { var first = _serverMutes.First(); _serverMutes.Remove(first.Key); var online = new Lyst <Entity>(); universe.GetPlayers(online); var target = online.FirstOrDefault(x => string.Equals(x.PlayerEntityLogic.DisplayName(), first.Key, StringComparison.CurrentCultureIgnoreCase)); if (target != null) { ServerContext.RightsManager.MuteUser(target.PlayerEntityLogic.Uid(), target.PlayerEntityLogic.DisplayName(), step, first.Value); } else { Logger.WriteLine("Unable to mute '" + first.Key + "'. Please check they are online"); } SendUserList(); } if (_serverUnMutes.Any() && _serverMainLoop != null) { var first = _serverUnMutes.First(); _serverUnMutes.Remove(first); var online = new Lyst <Entity>(); universe.GetPlayers(online); var target = online.FirstOrDefault(x => string.Equals(x.PlayerEntityLogic.DisplayName(), first, StringComparison.CurrentCultureIgnoreCase)); if (target != null) { ServerContext.RightsManager.UnmuteUser(target.PlayerEntityLogic.Uid()); } else { Logger.WriteLine("Unable to unmute '" + first + "'. Please check they are online"); } SendUserList(); } if (_serverMainLoop != null) { if (_serverUsers.Count != universe.GetPlayerCount()) { _serverUsers.Clear(); universe.GetPlayers(_serverUsers); SendUserList(); } } }
public void UniverseUpdateBefore(Universe universe, Timestep step) { if (!universe.Server) { var entities = new Lyst <Entity>(); universe.GetPlayers(entities); Entity entity = null; foreach (var e in entities) { if (ClientContext.PlayerFacade.IsLocalPlayer(e)) { entity = e; } } if (entity == null) { return; } var tags = new List <Vector3I>(); if (entity.Inventory.ActiveItem().Item is MultiMeterItem) { universe.ForAllEntitiesInRange(entity.FeetLocation(), 5, tile => { if (tile.Logic is ChargeableTileEntityLogic logic) { if (!tags.Contains(logic.Location)) { tags.Add(logic.Location); } } }); } NameTags.Clear(); NameTags.AddRange(tags); var showCables = new List <Vector3I>(); if (!entity.Inventory.ActiveItem().IsNull()) { var item = entity.Inventory.ActiveItem().Item; var config = GameContext.TileDatabase.AllMaterials() .FirstOrDefault(x => x.Code == item.GetItemCode()); if (config != default(TileConfiguration) || item is CableDrillItem) { var component = config?.Components.Select <ChargeableComponent>().FirstOrDefault(); if (component != default(ChargeableComponent) || item is CableDrillItem) { universe.ForAllEntitiesInRange(entity.FeetLocation(), 5, tile => { if (tile.Logic is InnerCableTileEntityLogic logic) { if (!showCables.Contains(logic.Location)) { showCables.Add(logic.Location); } } }); } } } ShowCables.Clear(); ShowCables.AddRange(showCables); } }