Example #1
0
        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);
                    //        }
                    //    }
                    //}
                }
            }
        }
Example #2
0
        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;
                }
            }
        }
Example #6
0
        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);
        }
Example #7
0
        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(), "&lt;Server&gt;: " + 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();
                }
            }
        }
Example #8
0
        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);
            }
        }