header Ich möchte Deutsch. YouTube
Clonk Livestream on Twitch.tv!
Not logged inClonkspot Forum
Forum Home Help Search Register Login
Up Topic Deutsch / Miniblogs / Console Mode (aka Editor) Remake
1 2 3 4 5 Previous Next  
Parent - By Wipfhunter (More than 200 posts.) Date 28.03.2016 20:28
So ein Passwort macht aber auch nur Sinn, wenn der Editor auch erlaubt, sich seine Objektordner zu zerschießen!
Parent - - By Armin (More than 50 posts.) Date 28.03.2016 19:45
Ich find cool, wenn das Menü direkt zeigt wie moddingfreundlich Clonk ist. Ich kann verstehen wenn man Leute bei Shareware mit Miniblockaden daran hindern will, die originalen Spielinhalte kaputt zu machen aber sonst fallen mir keine Gründe dafür ein.

Der normale Editor macht ja normal nix mit Rundenordner & Pakete. Also sieht das für mich idiotensicher aus.
Parent - By Armin (More than 50 posts.) Date 28.03.2016 19:48 Upvotes 2
Hab gerade ein Szenario Test.ocs mit dem Editor in Test.ocs gespeichert. Es entstand eine Endlosschleife mit dutzenden Szenarios: Test.ocs/Test.ocs/Test.ocs/Test.ocs/Test.ocs/Test.ocs[...] :tongue:
- - By Sven2 (More than 500 posts.) Date 09.04.2016 20:18 Upvotes 4
Update:

Objekte koennen angeben, welche Eigenschaften sich bequem ueber den Editor setzen lassen sollen. Das sollte es Neulingen erleichtern, die wichtigsten Eigenshaften z.B. fuer Spielziele bequem auszuwaehlen.

Beispiel im Screenshot: Der ItemSpawn veroeffentlicht eine Property, die nur einsammelbare Definitionen auflistet:
local EditorProp_spawn_id = { Type="def", Filter="Collectible", Set="SetSpawnObject" };

Im Editor sieht das dann so aus (Screenshot):



Die internen Eigenschaften aus den Proplists sind dafuer etwas nach unten gewandert.
Parent - By Fulgen (More than 500 posts.) Date 09.04.2016 20:44
Wow.
Parent - - By Apfelclonk (More than 50 posts.) Date 10.04.2016 15:00
Bietet qt so wie es eingebunden ist möglichkeiten den UI Kram zu stylen? Für den Moment ist es ja wahrscheinlich ziemlich wumpe, ich würde es nur mal gerne wissen wo da die Möglchkeiten sind, da ich da so'n kleiner Fanatiker bin was Interfacedesign angeht.
Parent - By Luchs (More than 1000 posts.) Date 10.04.2016 16:10
Ja. Qt malt alles selbst, abhängig vom ausgewählten Theme. Weiter oben habe ich einen Screenshot gepostet, wie es mir einem Linux-Theme aussieht.
Parent - - By Newton (More than 50 posts.) Date 20.08.2016 00:31

>local EditorProp_spawn_id = { Type="def", Filter="Collectible", Set="SetSpawnObject" };


Die Syntax finde ich etwas komisch. Ich würde etwa sowas in der Art erwarten:
local EditorProps = [{ Name = "$spawnId$", Type="def", Filter="MyFilterFunction" Set="SetSpawnObject" },...

* $spawnId$ kann dann lokalisiert werden
* MyFilterFunction ist eine Funktion in dem Spawn Objekt die einen Parameter annimmt und boolean zurückgibt
* in dem Array kann eine beliebige Anzahl dieser Props angegeben werden
* Objekte die von anderen erben würden halt einen weiteren Eintrag in dieses Array hinzufügen
Parent - - By Sven2 (More than 500 posts.) Date 20.08.2016 02:23
Inzwischen ist es auch aehnlich:

local EditorProps =
{
  spawn_id = { Name="$SpawnID$", Type="def", EditorHelp="$SpawnIDToolTip$", Filter=..., Priority=... }
}


Statt eines Arrays ist es eine Proplist. Objekte, die von anderen erben, fuegen eine Property hinzu. Mit Priority kann man die Rangfolge beeinflussen (Standard ist alphabetisch).

Die spawn_id bezieht sich damit immer auf eine gleichnamige lokale Variable. Das ist wichtig, weil man Eigenschaften auf fuer verschiedene Variablen wiederverwenden kann und weil der Name fuer verschachtelte Proplists und Arrays gebraucht wird.

Filterfunktionen statt Filtereigenschaften sind nicht synchron. Wenn jemand Filter="Random(5)" schreibt, desynct das im Netzwerk.
Parent - - By Newton (More than 50 posts.) Date 20.08.2016 19:09

> Die spawn_id bezieht sich damit immer auf eine gleichnamige lokale Variable. Das ist wichtig, weil man Eigenschaften auf fuer verschiedene Variablen wiederverwenden kann und weil der Name fuer verschachtelte Proplists und Arrays gebraucht wird.


Das verstehe ich nicht. Hast du ein Beispiel?
Parent - By Sven2 (More than 500 posts.) Date 21.08.2016 16:08 Upvotes 1
Aus dem Sequenzobjekt. Das ist das Objekt, mit dem man sich im Editor Sequenzen wie Intros oder Ereignisse auf der Karte zusammen bauen kann:

public func Definition(def)
{
  // EditorActions
  if (!def.EditorActions) def.EditorActions = {};
  def.EditorActions.Test = { Name="$Test$", Command="OnTrigger(nil, nil, true)" };
  // UserActions
  UserAction->AddEvaluator("Action", "$Name$", "$SetActive$", "$SetActiveDesc$", "sequence_set_active", [def, def.EvalAct_SetActive], { Target = { Function="action_object" }, Status = { Function="bool_constant", Value=true } }, { Type="proplist", Display="{{Target}}: {{Status}}", EditorProps = {
    Target = UserAction->GetObjectEvaluator("IsSequence", "$Name$"),
    Status = new UserAction.Evaluator.Boolean { Name="$Status$", EditorHelp="$SetActiveStatusHelp$" }
    } } );
  // EditorProps
  if (!def.EditorProps) def.EditorProps = {};
  def.EditorProps.active = { Name="$Active$", Type="bool", Set="SetActive" };
  def.EditorProps.finished = { Name="$Finished$", Type="bool", Set="SetFinished" };
  def.EditorProps.trigger = { Name="$Trigger$", Type="enum", OptionKey="Trigger", Set="SetTrigger", Priority=110, Options = [
    { Name="$None$" },
    { Name="$PlayerEnterRegionRect$", EditorHelp="$PlayerEnterRegionHelp$", Value={ Trigger="player_enter_region_rect", Rect=[-20, -20, 40, 40] }, ValueKey="Rect", Delegate={ Type="rect", Color=0xff8000, Relative=true, Set="SetTriggerRect", SetRoot=true } },
    { Name="$PlayerEnterRegionCircle$", EditorHelp="$PlayerEnterRegionHelp$", Value={ Trigger="player_enter_region_circle", Radius=25 }, ValueKey="Radius", Delegate={ Type="circle", Color=0xff8000, Relative=true, Set="SetTriggerRadius", SetRoot=true } },
    { Name="$ObjectEnterRegionRect$", EditorHelp="$ObjectEnterRegionHelp$", Value={ Trigger="object_enter_region_rect", Rect=[-20, -20, 40, 40] }, Delegate={ Name="$ObjectEnterRegionRect$", EditorHelp="$ObjectEnterRegionHelp$", Type="proplist", EditorProps = {
      ID = { Name="$ID$", EditorHelp="$IDHelp$", Type="def", Set="SetTriggerID", SetRoot=true },
      Rect = { Type="rect", Color=0xff8000, Relative=true, Set="SetTriggerRect", SetRoot=true }
      } } },
    { Name="$ObjectEnterRegionCircle$", EditorHelp="$ObjectEnterRegionHelp$", Value={ Trigger="object_enter_region_circle", Radius=25 }, Delegate={ Name="$ObjectEnterRegionCircle$", EditorHelp="$ObjectEnterRegionHelp$", Type="proplist", EditorProps = {
      ID = { Name="$ID$", EditorHelp="$IDHelp$", Type="def", Set="SetTriggerID", SetRoot=true },
      Radius = { Type="circle", Color=0xff8000, Relative=true, Set="SetTriggerRadius", SetRoot=true }
      } } },
    { Name="$ObjectCountInContainer$", EditorHelp="$ObjectCountInContainerHelp$", Value={ Trigger="contained_object_count", Count=1 }, Delegate={ Name="$ObjectCountInContainer$", EditorHelp="$ObjectCountInContainerHelp$", Type="proplist", EditorProps = {
      Container = { Name="$Container$", EditorHelp="$CountContainerHelp$", Type="object" },
      ID = { Name="$ID$", EditorHelp="$CountIDHelp$", Type="def", EmptyName="$AnyID$" },
      Count = { Name="$Count$", Type="int", Min=1 },
      Operation = { Name="$Operation$", EditorHelp="$CountOperationHelp$", Type="enum", Options = [
        { Name="$GreaterEqual$", EditorHelp="$GreaterEqualHelp$" },
        { Name="$LessThan$", EditorHelp="$LessThanHelp$", Value="lt" }
        ] }
      } } },
    { Name="$Interval$", EditorHelp="$IntervalHelp$", Value={ Trigger="interval", Interval=60 }, ValueKey="Interval", Delegate={ Name="$IntervalTime$", Type="int", Min=1, Set="SetIntervalTimer", SetRoot=true } },
    { Name="$GameStart$", Value={ Trigger="game_start" } },
    { Name="$PlayerJoin$", Value={ Trigger="player_join" } },
    { Name="$PlayerRemove$", Value={ Trigger="player_remove" } },
    { Name="$GoalsFulfilled$", Value={ Trigger="goals_fulfilled" } },
    { Group="$ClonkDeath$", Name="$AnyClonkDeath$", Value={ Trigger="any_clonk_death" } },
    { Group="$ClonkDeath$", Name="$PlayerClonkDeath$", Value={ Trigger="player_clonk_death" } },
    { Group="$ClonkDeath$", Name="$NeutralClonkDeath$", Value={ Trigger="neutral_clonk_death" } },
    { Group="$ClonkDeath$", Name="$SpecificClonkDeath$", Value={ Trigger="specific_clonk_death" }, ValueKey="Object", Delegate={ Type="object", Filter="IsClonk" } },
    { Name="$Construction$", Value={ Trigger="construction" }, ValueKey="ID", Delegate={ Type="def", Filter="IsStructure", EmptyName="$Anything$" } },
    { Name="$Production$", Value={ Trigger="production" }, ValueKey="ID", Delegate={ Type="def", EmptyName="$Anything$" } },
    ] };
  def.EditorProps.condition = new UserAction.Evaluator.Boolean { Name="$Condition$" };
  def.EditorProps.action = new UserAction.Prop { Priority=105 };
  def.EditorProps.action_progress_mode = UserAction.PropProgressMode;
  def.EditorProps.action_allow_parallel = UserAction.PropParallel;
  def.EditorProps.deactivate_after_action = { Name="$DeactivateAfterAction$", Type="bool" };
  def.EditorProps.check_interval = { Name="$CheckInterval$", EditorHelp="$CheckIntervalHelp$", Type="int", Set="SetCheckInterval", Save="Interval" };
}


* Die Eigenschaften "condition", "action", "action_progress_mode", etc. sind im UserAction-Objekt definiert und werden ueberall dort benutzt, wo man Aktionen auf Objekte legen kann. Zum Beispiel auch im Schalter oder auf Checkpoints im Parkour.
* Die Eigenschaft "trigger" hat je nach Auswahl des Ausloesers im enum einen oder mehrere Parameter, die Eigenschaften der Variable sind. Beispiel: Ich waehle $ObjectCountInContainer$ als Ausloeser aus. Dann oeffnet sich ein neues Property-Fenster mit den Eigenschaften welcher Objekttyp, welcher Container, etc. Der Container bezieht sich im Editor dann auf trigger.Container.

Natuerlich koennte man das auch mit Arrays schreiben. Nach deinem Vorschlag mit Arrays:

// Methode jetzt:
def.EditorProps.active = { Name="$Active$", Type="bool", Set="SetActive" };

// Mit Arrays:
def.EditorProps[GetLength(def.EditorProps)] = { Name="$Active$", Type="bool", Get="active", Set="SetActive" };


das ist aber laenger und kann auch nicht mehr ausdruecken.
- - By Sven2 (More than 500 posts.) Date 07.06.2016 06:06 Upvotes 6
Update:
Neues vom Editor!

Fuer Objekteigenschaften kann man nun auch Arrays und PropLists festlegen. Damit kann man per Script komplexere Datentypen bauen, die sich bequem im Editor setzen lassen.

Das Konstruktions-Spielziel braucht zum Beispiel die Liste der Gebaeude mit Anzahl, die man bauen muss. Es gibt keinen Datentyp fuer ID-Liste. Man kann ihn sich aber selber definieren. Zunaechst der Datentyp fuer "Gebaeudetyp + Anzahl":

var CountedID = { Type = "proplist", Display = "{{count}}x{{id}}", DefaultValue = { count=1, id=nil }, Elements = {
Name = "ID list entry",
    EditorProp_count = { Type = "int", Min = 1 },
    EditorProp_id = { Type = "def" } } };


Der Datentyp ist "proplist", das heisst zum Bearbeiten geht der Editor eine Ebene tiefer und zeigt alle Eigenschaften an. Die zwei Eigenschaften sind "id" und "count" fuer den Gebaeudetyp und die Menge. Mit Display kann man angeben, dass die Eigenschaft statt als Proplist ({ id=Clonk, count=10 }) kuerzer angezeigt wird (10xClonk).

Die ID-Liste ist einfach nur ein Array bestehend aus diesen Eintraegen:
var IDList = { Name = "ID list", Type = "array", Display = 3, Elements = CountedID };

Benutzung dann zum Beispiel im Konstruktions-Spielziel:

EditorProp_construction_list = IDList;

Im Editor sieht das so aus:



Hier die Anzeige im Konstruktions-Spielziel. Klickt man die Eigenschaft an, kommt man in den Array-Editor. Hier kann man Elemente hinzufuegen, umsortieren (mit Drag+Drop) und entfernen:



Klickt man einen einzelnen Wert an, gelangt man in den Property-Editor fuer das gewaelte Element:



So kann man beliebige Listen zusammen bauen. Nach dem Speichern des Szenarios wird automatisch das Script in Objects.c generiert:
/* Automatically created objects file */

func InitializeObjects()
{
  var Goal_Construction001 = CreateObject(Goal_Construction, 459, 98);
  Goal_Construction001->AddConstruction(Flagpole, 1);
  Goal_Construction001->AddConstruction(Windmill, 5);
  return true;
}
Parent - By Clonkonaut (More than 200 posts.) Date 07.06.2016 09:30
Ziemlich gut.
Parent - - By Maikel (More than 200 posts.) Date 08.06.2016 10:18
Ja! Wie lange noch bis zum Merge?

Wir sollten dann echt mal versuchen im editor mode ein netzwerk spiel zu starten und dann ein Szenario zusammen bauen.
Parent - By Sven2 (More than 500 posts.) Date 08.06.2016 21:15
Es gibt leider noch viel zu tun und nicht so viel Zeit. Habe die Liste im Startposting mal aktualisiert.
- - By Sven2 (More than 500 posts.) Date 09.06.2016 04:41 Edited 09.06.2016 04:44 Upvotes 7
Update:

Oh nein, schon wieder ein Update!

Es gibt nun ein "Player Start"-Objekt. Dieses koennen Newbies statt der [PlayerX]-Sektionen in der Scenario.txt oder statt InitializePlayer-Scripten benutzen, um Startposition/Geld/Clonks/Material/Bauplaene einfach im Editor zu setzen. Hier ein Serviervorschlag mit zwei Startobjekten fuer ein Team-Melee:



Spieler starten automatisch an diesem Objekt. Es gibt folgende Einstellungen:
* Spieler: Zum Beispiel alle Spieler oder nur die Spieler eines Teams
* Startgold: Wie reich zu Beginn?
* Crew: Wie viele Clonks?
* Startmaterial: Objekte werden automatisch auf die Clonks verteilt (z.B. bei 2 Clonks und 2 Schaufeln kriegt jeder Clonk eine Schaufel)
* Bauplaene: Keine, Alle, Alle ausser ID-Liste oder nur ID-Liste

Man kann auch mehrere Startobjekte fuer mehrere Teams setzen oder einfach nur mehrere Startpunkte fuer alle Spieler. Es wird dann ein zufaelliger Startpunkt moeglichst weit weg von Gegnern ausgewaehlt (z.B. fuer Melees). Das Startobjekt ist komplett im Script und kann natuerlich auch ueberladen werden.

Neulinge haetten natuerlich keine Ahnung, dass es dieses Objekt gibt. Darum enthalten mit "Neu..." im Editor erstellte Szenarien automatisch ein Startobjekt in der Mitte der Karte.
Parent - - By Pitri (More than 200 posts.) Date 09.06.2016 07:33 Edited 09.06.2016 07:36
Redundant, aber einsteigerfreundlich.
Klingt sinnvoll. :)
Parent - - By Luchs (More than 1000 posts.) Date 09.06.2016 08:16
Dafür können dann ja in Zukunft die Player-Sektionen aus der Scenario.txt entfernt werden. Die waren sowieso wegen der Einschränkung auf vier Spieler immer etwas eingeschränkt.
Parent - By Pitri (More than 200 posts.) Date 09.06.2016 09:59
Jo, stimmt. Die Limitierung auf vier Spieler (LimiVIERung. haha... >_>) fand ich schon immer etwas doof. Vielleicht wäre ja eine Sektion, die für alle Spieler gilt, ganz praktisch, so als Grundlage, dass man dort Gemeinsamkeiten definieren kann.
Parent - By Zapper (More than 500 posts.) Date 09.06.2016 10:55
Sehr cool!
Parent - - By Clonkonaut (More than 200 posts.) Date 09.06.2016 11:39
Ziemlich gut. Startpositionen wären noch toll, daran scheitern zu Beginn auch viele!
Parent - - By Mupf (More than 200 posts.) Date 09.06.2016 13:48
Versteh ich nicht. Startposition kann man damit doch festlegen?
Parent - By Clonkonaut (More than 200 posts.) Date 09.06.2016 15:04
Ach. Übersehen. :sad:
Parent - By Nachtfalter (More than 1000 posts.) Date 09.06.2016 12:18
Gogo Sven! :birthday:
Parent - - By Armin (More than 50 posts.) Date 10.06.2016 11:46

>Bauplaene: Keine, Alle, Alle ausser ID-Liste oder nur ID-Liste


Wäre sowieso mal cool schnell auf einen Schlag alle Baupläne freischalten zu können. Scenario.txt ändern ist doof, vorallem weiß man nie welches Szen von wo aus man das kopiert alle Baupläne hat.
Parent - By Clonkonaut (More than 200 posts.) Date 10.06.2016 14:07
Eine solche Funktion ist ja nicht allzu schwierig zu schreiben.
Parent - - By Zapper (More than 500 posts.) Date 10.06.2016 16:35

>Wäre sowieso mal cool schnell auf einen Schlag alle Baupläne freischalten zu können.


GivePlayerAllKnowledge
Parent - - By Armin (More than 50 posts.) Date 10.06.2016 17:03
Jo kenn ich schon, sowas in der Art hat er ja auch in Basemelees. Aber statt Worlds zu includen oder ganze Funktionen in jedes Szen zu kopieren wäre dieses Kommando in irgenteinem globalen System.ocg gut damit man es überall kurz in einer Zeile verwenden kann und ohne das ein neu eingeführtes Fahrzeug viele Listen unaktuell macht. Ich denke es kommt sowieso viel öfter vor, dass man alles bauen darf statt nichts. Und letztes kann man ja auch realisieren indem es keinen Hammer gibt.
Parent - - By Zapper (More than 500 posts.) Date 11.06.2016 12:50
Ich denke es spricht nichts dagegen, den Script nach Objects.ocd/System.c4g zu verschieben
Parent - - By Luchs (More than 1000 posts.) Date 11.06.2016 13:53
Nur bringt das nicht so viel ;)
Parent - - By Fulgen (More than 500 posts.) Date 11.06.2016 14:32
Eigentlich schon.
Parent - By Luchs (More than 1000 posts.) Date 11.06.2016 16:13
Siehe Maikel.
Parent - - By Maikel (More than 200 posts.) Date 11.06.2016 15:58
System.ocg, aber ja das könnte man machen. Aber die Skripte dann einfach zu ändern geht dann nicht mehr weil Welten dann betroffen sind und vielleicht Wissen verfügbar wird was eine Runde total einfach macht.
Parent - By Luchs (More than 1000 posts.) Date 11.06.2016 16:08 Edited 11.06.2016 16:13
Vielleicht wäre es dann aber praktischer, direkt die Arrays als Konstanten zur Verfügung zu stellen. Dann könnte man evtl. besser filtern.

Grundsätzlich fände ich es aber nicht so schlimm, wenn Runden durch neue Items total einfach werden. So ein Problem findet sich meistens ja recht schnell und ist dann zumindest das eine Mal auch ganz witzig. Und in den letzten Releases haben wir ja sowieso gesehen, dass das Risiko recht hoch ist, dass ein ungespieltes Szenario in der Zwischenzeit kaputt geht, was viel schlimmer ist als eine zu leichte Runde.
Parent - - By Zapper (More than 500 posts.) Date 12.06.2016 11:39

>Aber die Skripte dann einfach zu ändern geht dann nicht mehr weil Welten dann betroffen sind und vielleicht Wissen verfügbar wird was eine Runde total einfach macht.


Das Problem haben wir auch auch aktuell. Wenn wir ein neues Gebäude haben, dann packen wir das da wahrscheinlich erstmal rein(?). Und dann kann es trotzdem sein, dass das für 99% der Welten total toll ist und für genau EINE Welt dann alles einfach macht.
Ich glaube das Problem hängt nicht damit zusammen, WO das definiert ist.
Parent - - By Maikel (More than 200 posts.) Date 12.06.2016 19:33
Doch, weil es bisher nur 1 Person gab der die Welten geändert hat und das war ich, in der globale System.ocg gibt es eben diese Kontrolle nicht. Man kann auch die Funktionen andere Namen geben meinetwegen.
Parent - By Zapper (More than 500 posts.) Date 12.06.2016 21:24

>Doch, weil es bisher nur 1 Person gab der die Welten geändert hat und das war ich, in der globale System.ocg gibt es eben diese Kontrolle nicht.


Naja, ob du alleine die Welten änderst oder ob du alleine die Funktion in Objects.ocd änderst macht doch keinen großen Unterschied, oder?
Es sollte jedenfalls selbstverständlich sein, dass man sich überlegen muss ob irgendwas kaputt geht, wenn man da neues Zeug einfügt. Aber es ist ja eh grad nicht so, dass wir zu oft zu viel neues Zeug haben.. :)
Parent - - By Der Tod (More than 15 posts.) Date 11.06.2016 23:09 Upvotes 1
Warum nicht mit GetDefinition alle Definitionen durchiterieren, statt die IDs hardcoden?
Parent - - By Luchs (More than 1000 posts.) Date 12.06.2016 00:06
In dem Fall ist es speziell für die Welten, wo man meistens nur eine kleinere Untermenge aller verfügbaren Sachen will. Die Windmühle sieht etwa zwar schön aus, ist aber dort ziemlich nutzlos.
Parent - - By Der Tod (More than 15 posts.) Date 12.06.2016 14:39
Na dann.
Der Funktionsname ist nur etwas irreführend.
Parent - By Pitri (More than 200 posts.) Date 12.06.2016 15:30
Jo, stimmt. sollte vielleicht eher sowas wie GivePlayerStandardKnowledge() heißen
Parent - - By Sven2 (More than 500 posts.) Date 12.06.2016 05:08
Das mache ich im Editor momentan (mit Ausnahnme von C4D_Goal/Rule/Environment), wenn man "alle" auswaehlt. Gibt allerdings auch ein paar Bauplaene, die nicht so sinnvoll sind (z.B. Steintor). Das sollte aber mMn im Hammer bzw. in der jeweiligen Definition korrigiert werden.
Parent - By Clonkonaut (More than 200 posts.) Date 12.06.2016 11:36
Steht auf meiner Todo!
- - By Sven2 (More than 500 posts.) Date 16.06.2016 22:44 Upvotes 6
Update:

Endlich kommen die zwei wichtigsten neuen Typen fuer Objekteigenschaften:

string: Benutzt z.B. damit man nun fuer jedes Objekt einen eigenen Namen setzen kann, um es einfacher in der Objektliste wieder zu finden.

In EditorBase:
local EditorProp_Name = { Type = "string", AsyncGet = "GetName", Set = "SetName" };

object: Verbinden von Objekten. Beispiel: Schalter mit Toren verbinden. Natuerlich kann man auch Filter setzen (z.B. nur einsammelbare Objekte oder nur Ziele fuer Schalter). Angezeigt werden die jeweils 20 naechstliegenden Objekte in Reihenfolge des Abstandes vom ausgewaehlten Objekt, sowie alle Objekte in einer zweiten Liste wenn man diese braucht. Der Eintrag, auf den die Maus zeigt, wird im Viewport leuchtend markiert und orange umrandet, so dass man schnell das richtige Objekt findet (siehe Screenshot).

Im Schalter:
local EditorProp_targetdoor = { Name="$Target$", Type="object", Filter="IsSwitchTarget" };

Parent - By Mupf (More than 200 posts.) Date 16.06.2016 23:20
Make developing great again!
Parent - - By Marky (More than 50 posts.) Date 18.06.2016 09:23
Ich habe mich schon gefragt, wie das mit den Zielen funktioniert. Ich muss also in meinem Objekt eine local EditorProp_Name definieren, in der ich festlegen kann, was dort angezeigt wird? Was, wenn ich mehrere solcher Eigenschaften haben möchte? Ah, das beantwortet sich von selbst. EditorProp_ ist das Keyword, der Rest muss dann einfach nur eindeutig sein. Coole Sache!
Parent - By Marky (More than 50 posts.) Date 18.06.2016 09:25
Hier gibt es irgendeinen Bug in der Forensoftware? Ich habe keine kursiv Schrift definiert, nur zweimal hintereinander tt-tags: (hier ein Text in TT)(hier ein Text, nachdem tt wieder geschlossen wurde)(und nochmal ein Text in tt). Ok, im vorhergehenden Post lag es wohl daran, dass Unterstriche verwendet wurden.
- - By Sven2 (More than 500 posts.) Date 17.06.2016 06:24 Upvotes 14
Update:

Objekte drehen und skalieren eingebaut.

Es gibt fuer markierte Objekte einen kleinen Knubbel, den man horizontal ziehen kann zum Drehen und vertikal zum Skalieren. Haelt man Shift gedreuckt, dreht man in Vielfachen von 45 Grad bzw. Skaliert in Vielfachen von 20% Normalgroesse.
Parent - - By Sven2 (More than 500 posts.) Date 17.06.2016 16:46 Upvotes 1
Nur ein Upvote :( - dann baue ich das Feature wieder aus!
Parent - By Fulgen (More than 500 posts.) Date 17.06.2016 16:51
2 Upvotes.
Up Topic Deutsch / Miniblogs / Console Mode (aka Editor) Remake
1 2 3 4 5 Previous Next  

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill