In deze handleiding wordt uitgelegd hoe u de aangepaste UseObjects gebruikt die zijn toegevoegd aan de modding-API in SE 1.199.
Introductie
Sinds SE-versie 1.199 heeft Keen aan de Modding API de mogelijkheid toegevoegd om aangepaste UseObjects te maken. Een UseObject is een interactief punt op een blok, zoals terminaltoegang of een knop op een knoppenpaneel.
Als je ooit eerder een blokmodificatie hebt gemaakt, heb je waarschijnlijk een interactiepunt gemaakt. Dit zijn lege (dummies) met de naam zoiets als detector_terminal_1.
Deze gids laat je zien hoe je je eigen interactiedummies kunt maken, die je kunt gebruiken om elk gewenst gedrag te triggeren dat mogelijk is met de ModAPI.
Modelvoorbereiding
De modelopstelling is vergelijkbaar met elke andere interactiedummy die u zou maken voor reguliere blokken.
Het enige verschil is de naam van de lege/dummy.
- Een model maken (of wijzigen)
- Voeg een nieuwe lege toe volgens dezelfde procedure voor het maken van dummies
- Geef de lege naam volgens de hieronder beschreven syntaxis.
De naam van een interactiedummy is onderverdeeld in 3 of meer delen: marker, type, subtype, volgnummer (seq no); in dit formaat: marker_type_subtype_reeksnummer.
Twee delen moeten specifiek worden genoemd: de markering en het volgnummer.
Voor de doeleinden van deze handleiding is de markering de detector en is seq no een geheel getal vanaf 1.
UseObject Code-implementatie
Zodra het model is opgezet, wordt de daadwerkelijke interactie-implementatie gedaan via een C#-script.
// Initialiseer het UseObject met het type "DHD" // Dit moet overeenkomen met het tweede element van de lege/dummy-naam, maar is niet hoofdlettergevoelig. [MyUseObject ("DHD")] openbare klasse DHDUseObject: MyUseObjectBase { IMyGps m_selectedButton; IMyTerminalBlock m_dhd; public DHDUseObject(IMyEntity owner, string dummyName, IMyModelDummy dummyData, uint key) : base(owner, dummyData) { // Sla een verwijzing op naar het bovenliggende blok, zodat we de actie later op het juiste kunnen uitvoeren. m_dhd = eigenaar als IMyTerminalBlock; } // Dit is de primaire actie, zoals het indrukken van een knop. openbare overschrijving UseActionEnum PrimaryAction => UseActionEnum.Manipulate; // Dit is de secundaire actie, zoals op K drukken om het actietoewijzingsmenu van een knop te openen. Dit is optioneel. openbare overschrijving UseActionEnum SecondaryAction => UseActionEnum.OpenTerminal; // Dit vertelt het spel welke acties je wilt ondersteunen. In dit geval wordt alleen de primaire gebruikt. // U kunt meerdere acties specificeren door ze te combineren met een bitsgewijze OR-operator // bijv. PrimaryAction | SecondaryAction openbare overschrijving UseActionEnum SupportedActions => PrimaryAction; // Dit wordt aangeroepen wanneer de speler op de interactiedummy richt. public override MyActionDescription GetActionInfo(UseActionEnum actionEnum) { // Dit voorbeeld geeft niet om het subtype ("knop" in de lege naam van het model), // U kunt dat veld echter gebruiken, indien ingesteld, om één script te delen met meerdere dummy's acties. // Bijvoorbeeld detector_mypower_on_1 kan worden gebruikt om een blok aan te zetten, en // detector_mypower_off_1 kan worden gebruikt om een blok uit te schakelen. Je zou zelfs een // een derde kunnen hebben, detector_mypower_toggle_1 die de blokstatus omschakelt. // Je kunt het subtypeveld pakken door de dummynaam op '_' te splitsen en het derde element (index 2) te pakken. switch (actionEnum) { case UseActionEnum.Manipulate: if (m_selectedButton == null) { // Haal het seq nr van de dummy op (spaties toegevoegd om te voorkomen dat Steam als URL wordt gemarkeerd) var button = int.Parse(this.Dummy .Name. Substring (this.Dummy .Name.LastIndexOf('_') + 1 ) ) - 1; var button_text = "Knop" + button.ToString(); // Dit creëert een HUD-markering voor de interactiedummy, zoals knoppenpanelen. Dit is optioneel. m_selectedButton = MyAPIGateway.Session.GPS.Create(button_text, "DHD Symbol", ActivationMatrix.Translation, true); MyAPIGateway.Session.GPS.AddLocalGps (m_selectedButton); } else { m_selectedButton.Coords = ActivationMatrix.Translation; } // Deze sectie biedt de HUD-helptekst wanneer de speler de interactie wil aangaan met Control Hints ingeschakeld. // Let op, het label van de gamebesturingssleutel is om [] gewikkeld, waardoor het geel wordt in de melding. var hint = "Druk op {0} om het symbool op {1} te activeren"; return new MyActionDescription() { Text = MyStringId.GetOrCompute(hint), FormatParams = new[] { "[" + MyAPIGateway.Input.GetGameControl(MyControlsSpace.USE) + "]", m_dhd?.DisplayNameText }, IsTextControlHint = true, }; case UseActionEnum.OpenTerminal: retourneer nieuwe MyActionDescription() { Text = MySpaceTexts.NotificationHintPressToOpenControlPanel, FormatParams = new [] { "[" + MyAPIGateway.Input.GetGameControl(MyControlsSpace.TERMINAL) + "]", m_dhd? WAAR, }; default: return default(MyActionDescription); } } // Dit wordt aangeroepen als de speler niet langer op de interactiedummy richt. public override void OnSelectionLost () {// Verwijder de HUD-markering if (m_selectedButton! = null) MyAPIGateway.Session.GPS.RemoveLocalGps (m_selectedButton); m_selectedButton = null; } // Dit wordt aangeroepen wanneer de speler interactie heeft met het object (drukt op de toegewezen keybind). public override void Use (UseActionEnum actionEnum, IMyEntity user) { switch (actionEnum) { case UseActionEnum.Manipulate: try { var button = int.Parse (this.Dummy .Name.Substring (this.Dummy .Name.LastIndexOf('_' ) + 1 ) ) - 1; // Plaats hier de code die je wilt om de actie uit te voeren die je wilt doen. // Dit voorbeeld schakelt de actie blok Aan/Uit; let op dit voorbeeld vereist een MyFunctionalBlock, // maar u kunt een gewone MyTerminalBlock gebruiken, afhankelijk van wat u wilt doen. m_dhd.Enabled = !m_dhd.Enabled } catch(Exception) { /* vermijd het crashen van het spel, maar schrijf een bericht naar het log */} break; case UseActionEnum.OpenTerminal: // Er is nog geen manier om de terminal te openen.
Testen
Zodra je het model en de code hebt ingesteld, kun je het in het spel laden, net als elke andere mod. De stappen voor het maken van een mod vallen in het algemeen buiten het bestek van deze handleiding.
Nadat je het hebt geladen, kun je de dummy bekijken door debug-tekenen in te schakelen in het ModAPI-foutopsporingsmenu (Shift-F11). Richt, en je zou je helptekst moeten zien als je Control Hints hebt ingeschakeld in de spelopties. Druk erop met uw toegewezen keybind en kijk hoe hij de gewenste actie uitvoert!
Dat is alles wat we hiervoor vandaag delen Space Engineers gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door Gwindalmir. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.