コード例 #1
0
 public void SaveMap()
 {
     IoCManager.Resolve <IMapManager>().SaveMap();
 }
コード例 #2
0
 public ReagentPrototype()
 {
     IoCManager.InjectDependencies(this);
 }
コード例 #3
0
        public void Execute(IConsoleShell shell, IPlayerSession?player, string[] args)
        {
            if (args.Length < 5)
            {
                return;
            }
            if (!int.TryParse(args[0], out var x) ||
                !int.TryParse(args[1], out var y) ||
                !int.TryParse(args[2], out var id) ||
                !float.TryParse(args[3], out var amount) ||
                !bool.TryParse(args[4], out var ratio))
            {
                return;
            }

            var gridId = new GridId(id);

            var mapMan = IoCManager.Resolve <IMapManager>();

            if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp))
            {
                shell.SendText(player, "Invalid grid ID.");
                return;
            }

            var entMan = IoCManager.Resolve <IEntityManager>();

            if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid))
            {
                shell.SendText(player, "Failed to get grid entity.");
                return;
            }

            if (!grid.HasComponent <GridAtmosphereComponent>())
            {
                shell.SendText(player, "Grid doesn't have an atmosphere.");
                return;
            }

            var gam     = grid.GetComponent <GridAtmosphereComponent>();
            var indices = new Vector2i(x, y);
            var tile    = gam.GetTile(indices);

            if (tile == null)
            {
                shell.SendText(player, "Invalid coordinates.");
                return;
            }

            if (tile.Air == null)
            {
                shell.SendText(player, "Can't remove gas from that tile.");
                return;
            }

            if (ratio)
            {
                tile.Air.RemoveRatio(amount);
            }
            else
            {
                tile.Air.Remove(amount);
            }

            gam.Invalidate(indices);
        }
コード例 #4
0
        protected override Control MakeUI(object?value)
        {
            var coords        = (EntityCoordinates)value !;
            var hBoxContainer = new BoxContainer
            {
                Orientation = LayoutOrientation.Horizontal,
                MinSize     = new Vector2(240, 0),
            };

            hBoxContainer.AddChild(new Label {
                Text = "grid: "
            });

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var gridId = new LineEdit
            {
                Editable         = !ReadOnly,
                HorizontalExpand = true,
                PlaceHolder      = "Grid ID",
                ToolTip          = "Grid ID",
                Text             = coords.GetGridId(entityManager).ToString()
            };

            hBoxContainer.AddChild(gridId);

            hBoxContainer.AddChild(new Label {
                Text = "pos: "
            });

            var x = new LineEdit
            {
                Editable         = !ReadOnly,
                HorizontalExpand = true,
                PlaceHolder      = "X",
                ToolTip          = "X",
                Text             = coords.X.ToString(CultureInfo.InvariantCulture)
            };

            hBoxContainer.AddChild(x);

            var y = new LineEdit
            {
                Editable         = !ReadOnly,
                HorizontalExpand = true,
                PlaceHolder      = "Y",
                ToolTip          = "Y",
                Text             = coords.Y.ToString(CultureInfo.InvariantCulture)
            };

            hBoxContainer.AddChild(y);

            void OnEntered(LineEdit.LineEditEventArgs e)
            {
                var gridVal    = int.Parse(gridId.Text, CultureInfo.InvariantCulture);
                var mapManager = IoCManager.Resolve <IMapManager>();
                var xVal       = float.Parse(x.Text, CultureInfo.InvariantCulture);
                var yVal       = float.Parse(y.Text, CultureInfo.InvariantCulture);

                if (!mapManager.TryGetGrid(new GridId(gridVal), out var grid))
                {
                    ValueChanged(new EntityCoordinates(EntityUid.Invalid, (xVal, yVal)));
                    return;
                }

                ValueChanged(new EntityCoordinates(grid.GridEntityId, (xVal, yVal)));
            }

            if (!ReadOnly)
            {
                gridId.OnTextEntered += OnEntered;
                x.OnTextEntered      += OnEntered;
                y.OnTextEntered      += OnEntered;
            }

            return(hBoxContainer);
        }
コード例 #5
0
 public T res <T>()
 {
     return(IoCManager.Resolve <T>());
 }
コード例 #6
0
        public bool Execute(IDebugConsole console, params string[] args)
        {
            var vvm = IoCManager.Resolve <IViewVariablesManager>();

            // If you don't provide an entity ID, it opens the test class.
            // Spooky huh.
            if (args.Length == 0)
            {
                vvm.OpenVV(new VVTest());
                return(false);
            }

            var valArg = args[0];

            if (valArg.StartsWith("SI"))
            {
                // Server-side IoC selector.
                var selector = new ViewVariablesIoCSelector(valArg.Substring(1));
                vvm.OpenVV(selector);
                return(false);
            }

            if (valArg.StartsWith("I"))
            {
                // Client-side IoC selector.
                var reflection = IoCManager.Resolve <IReflectionManager>();
                if (!reflection.TryLooseGetType(valArg, out var type))
                {
                    console.AddLine("Unable to find that type.");
                    return(false);
                }

                object obj;
                try
                {
                    obj = IoCManager.ResolveType(type);
                }
                catch (UnregisteredTypeException)
                {
                    console.AddLine("Unable to find that type.");
                    return(false);
                }
                vvm.OpenVV(obj);
                return(false);
            }

            if (valArg.StartsWith("gui/"))
            {
                // UI element.
                var obj = IoCManager.Resolve <IUserInterfaceManager>().RootControl;
                if (!obj.TryGetChild(valArg.Substring(4), out var control))
                {
                    console.AddLine("That control does not exist.");
                    return(false);
                }
                vvm.OpenVV(control);
                return(false);
            }

            // Entity.
            if (!EntityUid.TryParse(args[0], out var uid))
            {
                console.AddLine("Invalid specifier format.");
                return(false);
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            if (!entityManager.TryGetEntity(uid, out var entity))
            {
                console.AddLine("That entity does not exist.");
                return(false);
            }

            vvm.OpenVV(entity);

            return(false);
        }
コード例 #7
0
        public ConstructionMenu()
        {
            IoCManager.InjectDependencies(this);
            Placement = (PlacementManager)IoCManager.Resolve <IPlacementManager>();
            Placement.PlacementChanged += OnPlacementChanged;

            Title = "Construction";

            var hSplitContainer = new HSplitContainer();

            // Left side
            var recipes = new VBoxContainer {
                CustomMinimumSize = new Vector2(150.0f, 0.0f)
            };

            SearchBar = new LineEdit {
                PlaceHolder = "Search"
            };
            RecipeList = new Tree {
                SizeFlagsVertical = SizeFlags.FillExpand, HideRoot = true
            };
            recipes.AddChild(SearchBar);
            recipes.AddChild(RecipeList);
            hSplitContainer.AddChild(recipes);

            // Right side
            var guide = new VBoxContainer();
            var info  = new HBoxContainer();

            InfoIcon  = new TextureRect();
            InfoLabel = new Label
            {
                SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsVertical = SizeFlags.ShrinkCenter
            };
            info.AddChild(InfoIcon);
            info.AddChild(InfoLabel);
            guide.AddChild(info);

            var stepsLabel = new Label
            {
                SizeFlagsHorizontal = SizeFlags.ShrinkCenter,
                SizeFlagsVertical   = SizeFlags.ShrinkCenter,
                Text = "Steps"
            };

            guide.AddChild(stepsLabel);

            StepList = new ItemList
            {
                SizeFlagsVertical = SizeFlags.FillExpand, SelectMode = ItemList.ItemListSelectMode.None
            };
            guide.AddChild(StepList);

            var buttonsContainer = new HBoxContainer();

            BuildButton = new Button
            {
                SizeFlagsHorizontal = SizeFlags.FillExpand,
                TextAlign           = Label.AlignMode.Center,
                Text       = "Build!",
                Disabled   = true,
                ToggleMode = true
            };
            EraseButton = new Button
            {
                TextAlign = Label.AlignMode.Center, Text = "Clear Ghosts", ToggleMode = true
            };
            buttonsContainer.AddChild(BuildButton);
            buttonsContainer.AddChild(EraseButton);
            guide.AddChild(buttonsContainer);

            hSplitContainer.AddChild(guide);
            Contents.AddChild(hSplitContainer);

            BuildButton.OnToggled     += OnBuildToggled;
            EraseButton.OnToggled     += OnEraseToggled;
            SearchBar.OnTextChanged   += OnTextEntered;
            RecipeList.OnItemSelected += OnItemSelected;

            PopulatePrototypeList();
            PopulateTree();
        }
コード例 #8
0
            public StorageWindow()
            {
                Title           = "Storage Item";
                RectClipContent = true;

                var containerButton = new ContainerButton
                {
                    SizeFlagsHorizontal = SizeFlags.Fill,
                    SizeFlagsVertical   = SizeFlags.Fill,
                    MouseFilter         = MouseFilterMode.Pass,
                };

                var innerContainerButton = new PanelContainer
                {
                    PanelOverride       = _unHoveredBox,
                    SizeFlagsHorizontal = SizeFlags.Fill,
                    SizeFlagsVertical   = SizeFlags.Fill,
                };


                containerButton.AddChild(innerContainerButton);
                containerButton.OnPressed += args =>
                {
                    var controlledEntity = IoCManager.Resolve <IPlayerManager>().LocalPlayer.ControlledEntity;

                    if (controlledEntity.TryGetComponent(out HandsComponent hands))
                    {
                        StorageEntity.SendNetworkMessage(new InsertEntityMessage());
                    }
                };

                VSplitContainer = new VBoxContainer()
                {
                    MouseFilter = MouseFilterMode.Ignore,
                };
                containerButton.AddChild(VSplitContainer);
                Information = new Label
                {
                    Text = "Items: 0 Volume: 0/0 Stuff",
                    SizeFlagsVertical = SizeFlags.ShrinkCenter
                };
                VSplitContainer.AddChild(Information);

                var listScrollContainer = new ScrollContainer
                {
                    SizeFlagsVertical   = SizeFlags.FillExpand,
                    SizeFlagsHorizontal = SizeFlags.FillExpand,
                    HScrollEnabled      = true,
                    VScrollEnabled      = true,
                };

                EntityList = new VBoxContainer
                {
                    SizeFlagsHorizontal = SizeFlags.FillExpand
                };
                listScrollContainer.AddChild(EntityList);
                VSplitContainer.AddChild(listScrollContainer);

                Contents.AddChild(containerButton);

                listScrollContainer.OnMouseEntered += args =>
                {
                    innerContainerButton.PanelOverride = _HoveredBox;
                };

                listScrollContainer.OnMouseExited += args =>
                {
                    innerContainerButton.PanelOverride = _unHoveredBox;
                };
            }
コード例 #9
0
        public void DoTargetEntityAction(TargetEntityActionEventArgs args)
        {
            var disarmedActs = args.Target.GetAllComponents <IDisarmedAct>().ToArray();

            if (!args.Performer.InRangeUnobstructed(args.Target))
            {
                return;
            }

            if (disarmedActs.Length == 0)
            {
                if (args.Performer.TryGetComponent(out ActorComponent? actor))
                {
                    // Fall back to a normal interaction with the entity
                    var player      = actor.PlayerSession;
                    var coordinates = args.Target.Transform.Coordinates;
                    var target      = args.Target.Uid;
                    EntitySystem.Get <InteractionSystem>().HandleUseInteraction(player, coordinates, target);
                    return;
                }

                return;
            }

            if (!args.Performer.TryGetComponent <SharedActionsComponent>(out var actions))
            {
                return;
            }
            if (args.Target == args.Performer || !EntitySystem.Get <ActionBlockerSystem>().CanAttack(args.Performer))
            {
                return;
            }

            var random = IoCManager.Resolve <IRobustRandom>();
            var audio  = EntitySystem.Get <AudioSystem>();
            var system = EntitySystem.Get <MeleeWeaponSystem>();

            var diff  = args.Target.Transform.MapPosition.Position - args.Performer.Transform.MapPosition.Position;
            var angle = Angle.FromWorldVec(diff);

            actions.Cooldown(ActionType.Disarm, Cooldowns.SecondsFromNow(_cooldown));

            if (random.Prob(_failProb))
            {
                SoundSystem.Play(Filter.Pvs(args.Performer), "/Audio/Weapons/punchmiss.ogg", args.Performer,
                                 AudioHelpers.WithVariation(0.025f));
                args.Performer.PopupMessageOtherClients(Loc.GetString("disarm-action-popup-message-other-clients",
                                                                      ("performerName", args.Performer.Name),
                                                                      ("targetName", args.Target.Name)));
                args.Performer.PopupMessageCursor(Loc.GetString("disarm-action-popup-message-cursor",
                                                                ("targetName", args.Target.Name)));
                system.SendLunge(angle, args.Performer);
                return;
            }

            system.SendAnimation("disarm", angle, args.Performer, args.Performer, new [] { args.Target });

            var eventArgs = new DisarmedActEventArgs()
            {
                Target = args.Target, Source = args.Performer, PushProbability = _pushProb
            };

            // Sort by priority.
            Array.Sort(disarmedActs, (a, b) => a.Priority.CompareTo(b.Priority));

            foreach (var disarmedAct in disarmedActs)
            {
                if (disarmedAct.Disarmed(eventArgs))
                {
                    return;
                }
            }

            SoundSystem.Play(Filter.Pvs(args.Performer), "/Audio/Effects/thudswoosh.ogg", args.Performer.Transform.Coordinates,
                             AudioHelpers.WithVariation(0.025f));
        }
コード例 #10
0
 public void PlayFootstep()
 {
     SoundSystem.Play(Filter.Pvs(Owner), SoundCollection.GetSound(), IoCManager.Resolve <IEntityManager>().GetComponent <TransformComponent>(Owner).Coordinates, AudioHelpers.WithVariation(Variation).WithVolume(-2f));
 }