Lichtkreis simulieren?

  • #10, by tutnichtwehFriday, 04. August 2017, 19:49 7 years ago
    Vielen Dank erstmal, für deine ausführliche Antwort!

    Ich hab den Code an mein Projekt angepasst aber leider funktioniert es nicht wie gewüscht.
    Da die Größe der Grafik doppelt so groß sein müssen, wie die Kulisse, geh ich davon aus, dass die Werte hinter dem Minus

    Pos_Kegel.x = x_pos - 500 -- Position des Lichtkegels, angepasst auf Szene
    
    Pos_Kegel.y = y_pos - 600


    auf die Größe der Kulisse gesetzt werden müssen um auf den Charakter zentriert zu sein, oder?

    Zur Zeit verschiebt sich die Grafik weder, wenn ich diese Werte änder, noch wenn sich der Charakter bewegt.

    Die Aktion wird bei mir durch die Startaktion das erste Mal ausgeführt. Der "FGD_light_spot" ist ein simples Objekt, welches als Bild meine Overlay-Grafik verwendet.

    Was hab ich da falsch gemacht?

    ---------

    Deswegen kann der Editor durchaus bequemer sein, weil einem diese Arbeit vorher von den Entwicklern abgenommen wurde...
    Der Editor ist super, für das was er leistet! Das erspart wirklich eine Menge Arbeit. Vor allem auf das Ressourcenmanagement hätte ich keine Lust.
    Wenn man allerdings bei Befehlen wie:

    getObject("ActiveAnimations[animation name]"):setValue(VAnimationLastFrame, 1)
    

    anstelle einzelner Zahlen am Ende (um den Frame anzugeben), auch eine Variable verwenden kann, finde ich das sehr viel leichter als stattdessen eine verschachtelte If-Else Struktur zusammen zu klickern.


    ---------
    Sieht aber sch.... aus
    An das Problem mit den Wänden hab ich bisher noch gar nicht gedacht - aber das sieht dann natürlich wirklich  nicht so toll aus...
    Sind Projekte nicht aufwärtskompatibel, oder warum wechselst du nicht zu Vis5, sollten Shader dort möglich sein?

    Hübsche Elfe hast du da! wink

    Newbie

    11 Posts


  • #11, by MachtnixFriday, 04. August 2017, 22:28 7 years ago
    Hi,

    bislang arbeite ich noch in 4.2.5, weil ich in meinem geliebten XP 32bit bin. Die Version 5 läuft nur unter 64 bit und auf dem PC bin ich meistens mit Linux unterwegs. Außerdem warte ich die finale Version ab; ich mag außerdem das GUI nicht sonderlich, weil mir die Schriften zu dünn sind und ich jedesmal in der CSS eine andere Schrift reinbasteln muss. Früher oder später werde ich sicher wechseln, da aber die ganze Shader-Geschichte ziemlich kompliziert, unausgereift und mit viel Lua verbunden zu sein scheint, nützt mir das jetzt nicht so viel. Ich verzichte auf Lua, wo immer es geht... wink

    Mein Script-Beispiel war jetzt aus einigen meiner Spiele rausgesaugt, vielleicht habe ich da Dinge reingebastelt, die woanders nicht klappen. Ich muss mich zu mehr Disziplin bei Lua zwingen, aber zur Zeit sieht jedes Script wie eine riesige Ansammlung von Versuchen aus; das heißt, da gibt es hunderte von Kommentarzeilen, die ich ausprobiere und immer jeweils aktiv oder inaktiv kommentiere. Ich tue mich irrsinnig schwer mit der Objekt-Schreibweise und was ich wie wo zu definieren und abzufragen habe. Das führt häufig zu Wiederholungen (ich definiere lieber drei Variablen zuviel als eine elegantes modulares Konstrukt aus zwei Zeilen zu basteln - das können nur Programmierer...). Und das führt dazu, dass meine Scripte in der Regel nicht überall funktionieren, sondern NUR in meinem Spiel...

    Die Werte ergaben sich aus meiner Kulisse und müssen nicht richtig sein. Man kommt auch ganz ohne diese Subtraktionen aus, wenn man das Bild gleich richtig anlegt und zuschneidet. Es geht ja nur darum, dass das Bild links keinen Blitzer hat, wenn die Figur ganz am rechten Rand steht. Und weil ich zu faul war, jedesmal ein neues PNG-Bild in PS zu erstellen, habe ich es einfach an die richtige Stelle verschoben...

    Wahrscheinlich hast du beim Kulissenstart keine Abfrageschleife eingebaut; das Script muss ja regelmäßig neu aufgerufen werden, sonst aktualisiert sich die Position ja nicht. Sicher können Lua-Profis das besser, aber für mich gilt: egal wie, Hauptsache es funktioniert irgendwie...

    Die Elfe habe ich aus diesem Spiel stibitzt:
    Elfe im Labyrinth

    Thread Captain

    1097 Posts

  • #12, by tutnichtwehSaturday, 05. August 2017, 00:53 7 years ago
    Das kann ich verstehen. Ich warte auch lieber ab bis die Vollversion rauskommt. Das neue GUI gefällt mir auch nicht so sehr. Aber wahrscheinlich ist das auch einfach nur eine Gewohnheitssache.

    Es ist nicht so, dass ich nicht verstehe, was in deinem zusammengebastelten Script passiert. Und eigentlich erscheint mir alles logisch - darum versteh ich auch nicht warum es nicht funktioniert. Im Script wird auf jedenfall nichts abgefragt, was nur in einem anderen Script definiert wird.

    Ist mir aufgefallen dass du alles sehr übersichtlich gestaltest, an einigen Stellen hätte man das Script sicher abkürzen können. z.B.:

    obj_torch:setValue(VObjectOffset, {x=pos_torch.x-500,y=pos_torch.y-500})

    ...Wenn sowas mit LUA möglich ist.
    Find es aber auch besser alles "einzeln" zu lassen. Lässt sich im Nachhinein besser lesen und ist so auch leichter zu ändern.

    Das die Werte bei mir anders sind, war mir schon klar. Ich hatte sie ja auch angepasst. Bei einer doppelten Grafik müsste, wie schon gesagt, die Kulissengröße abgezogen werden um den Lichtkreis zu platzieren. Das war zumindest meine Vermutung.

    Eigentlich hab ich ja in den Aktionsbereich ja eine Schleife eingebaut (siehe Bild). Müsste sich das Script damit nicht immer wiederholen?

    Abgesehen davon verändert sich die Position der Overlay-Grafik ja nicht, wenn ich die Werte im Script verändere, obwohl das Script ja mindestens einmal ausgeführt werden sollte.

    Vielen Dank nochmal für deine Hilfe und Antworten. Irgendwie krieg ich das schon hin. wink

    Newbie

    11 Posts

  • #13, by MachtnixSaturday, 05. August 2017, 01:19 7 years ago
    Was ich beim Scripten immer mache (aber später rauslösche), ist: print-Befehle setzen. Diese Print-Ergebnisse werden dann im log angezeigt. Also z.B. print("Hallo, Welt") oder print (x). Im Player lässt sich das schnell mit der Kommandozeilenfunktion über Drücken von "tab" anklicken.

    Als Beispiel, um die Mausposition auszulesen:
    x = (getCursorPos().x + game.ScrollPosition.x)
    y = (getCursorPos().y + game.ScrollPosition.y)
     
    print("Mausposition", x, y)
    
    

    Dann kann man zumindest nachprüfen, ob die Werte ordentlich eingesetzt werden. Zum Testen von Variablen usw. ist das unerlässlich! Bei jeder Veränderung muss das log allerdings erneut geöffnet werden, was das Arbeiten mit der Kommandozeile etwas mühsam macht...

    AFRLme hatte ein Tool zur Überprüfung in einem anderen Post vorgeschlagen, das die Log-Datei kontinuierlich ausliest. Finde ich aber nicht wieder...

    edit: Hieß glaube ich "SnakeTail".

    Thread Captain

    1097 Posts

  • #14, by tutnichtwehWednesday, 23. August 2017, 22:52 7 years ago
    Ich habe das Problem mit dem Lichtkreis zwar immernoch nicht gelöst, aber dein letzter Tipp hat mir an anderer Stelle sehr weitergeholfen. Die Kommandozeile ist wirklich sehr praktisch!

    Vielen Dank nochmal!

    Newbie

    11 Posts

  • #15, by caligarimarteSaturday, 26. August 2017, 13:57 7 years ago
    Vielleicht hilft das hier, ein ähnlicher Effekt den ich vor ein paar Tagen für mein Spiel gemacht habe:
    shaderRemoveEffect("CaveLight_01")
    
    
    shader_effects["CaveLight_01"] = {shader=basic_fsh..[[
    
     const vec2 ar = vec2(1.6, 0.9); //ASPECT RATIO
    
     uniform float ErlPosX;
    
     uniform float ErlPosY;
    
     uniform float ErlSize;
    
     void main()
    
     {
    
      vec2 pos = vec2( ErlPosX , (1-ErlPosY) + (ErlSize*0.67) );
    
      float Flicker = sin(1.0+iGlobalTime*21.5397)*0.0051235 + cos(7.0+iGlobalTime*33.31579)*0.0123;
    
      float Size = (2.0 * ErlSize) + Flicker;
    
      
    
      float w = (pos.x - texcoord.x) *ar.x;
    
       float h = (pos.y - texcoord.y) *ar.y;
    
       float Circle = pow( 1.0 - clamp( (sqrt(pow(w,2)+pow(h,2))/(Size)), 0.0,1.0) , 3);
    
      float CircleB = pow( 1.0 - clamp( (sqrt(pow(w,2)+pow(h,2))/(Size)), 0.0,1.0) , 5);
    
      
    
      vec3 color = vec3(1.0, 0.67, 0.33);
    
      vec3 Schatten = color * (1.0-CircleB);
    
      vec3 Schein = color * Circle;
    
      
    
      vec3 render = texture2D(iChannel0, texcoord.xy).rgb;
    
      render.rgb = render.rgb - Schatten.rgb; //SUBTRACT
    
      vec3 result = vec3( vec3(1.0) - ((vec3(1.0) - (Schein.rgb)) * (vec3(1.0) - render.rgb)) ); //SCREEN
    
      
    
      gl_FragColor = vec4(result.rgb , 1.0);
    
     }
    
    ]]}
    
    
    shaderAddEffect("CaveLight_01");
    
    bind("CaveLight_01", "ErlPosX", field("Erlene.Position.x"));
    
    bind("CaveLight_01", "ErlPosY", field("Erlene.Position.y"));
    
    bind("CaveLight_01", "ErlSize", field("Erlene.Size"));
    
    
    function updateErlPos()
    
     shader_effects["CaveLight_01"].num.ErlPosX = Erlene.Position.x /1920;
    
     shader_effects["CaveLight_01"].num.ErlPosY = Erlene.Position.y /1080;
    
     shader_effects["CaveLight_01"].num.ErlSize = Erlene.Size *0.01;
    
    end
    
    
    registerEventHandler("mainLoop", "updateErlPos")
    
    

    [EDIT: Zeilen 37 und 38 dividieren durch 1920 & 1080 -- das ist offenkundig die Auflösung meines Projektes. Diese beiden Werte müsstest du deinem Projekt anpassen.]
    Wobei "Erlene" (der Name meiner Spielfigur) zuvor in einem anderen Definitions-Script für gobale Variablen definiert worden ist als:
    Erlene = getObject("Characters[Erlene]") 
    Das sollte dann so aussehen:

    (Der äußere Kreis für Dunkelheit benutzt Blendmode "Subtraktion", der helle Lichtschein selbst benutzt "Screen", aber das kann man natürlich auch umschreiben.)

    Oh, und anbei:
    Das neue GUI gefällt mir auch nicht so sehr. Aber wahrscheinlich ist das auch einfach nur eine Gewohnheitssache.
    Keine Sorge, geht nicht nur dir so, und ehrlich gesagt, die neue Benutzeroberfläche ist für einen regulären Laptop-Nutzer wie mich immer noch objektiv schlechter weil weniger kompakt als das alte Design. wink

    Forum Fan

    145 Posts

  • #16, by SimonSMonday, 28. August 2017, 21:57 7 years ago
    Ich wäre an konstruktiver Kritik an der GUI sehr interessiert, was genau sind die Probleme ? Ich arbeite ja nur noch mit V5 und das ist 100% besser für mich, allein vom Tempo. Bei den Schriftarten kann ich noch was tun, dass das einfacher einstellbar wird.

    Thread Captain

    1580 Posts

  • #17, by caligarimarteTuesday, 29. August 2017, 12:18 7 years ago
    Ich wäre an konstruktiver Kritik an der GUI sehr interessiert, was genau sind die Probleme ? Ich arbeite ja nur noch mit V5 und das ist 100% besser für mich, allein vom Tempo. Bei den Schriftarten kann ich noch was tun, dass das einfacher einstellbar wird.
    Okay, ich hoffe das wirkt jetzt nicht zu spammig, wenn ich hier in dem Forenbeitrag meinen Senf abgebe. Vorweg: Ich benutze einen 1366*768-Laptop mit Windows 7.
    ~
    I'm Vollbildmodus (des Editor, nicht des Players) kann ich durch Bewegung des Mauszeigers an den Bildschirmrand NICHT die Taskleiste öffnen (falls ich mal schnell zu einem anderen Programm wechseln will), stattdessen muss ich dazu die Windows-Taste drücken, was den Flow einwenig stören kann. (Ich habe meine Taskleiste a'm linken Bildschirmrand, nicht unten, und so eingestellt, dass sie erst bei Berührung mit dem Bildschirmrand ausgefahren wird, weil sie unten a'm Bildschirm i'm Weg sein kann, wenn ich ein Adventure mit Inventar a'm unteren Bildschirmrand i'm Fenstermodus spiele (z.B. wenn ich mein eigenes Spiel teste). Vermutlich bin ich mit dieser Einstellung in einer Minderheit.)
    ~
    Eingabefelder für Zahlen nehmen auotmatisch keine anderen Zeichen an, was gut ist, aber schlecht ist daran, dass auch die Tabulator-Taste genau so gehandhabt wird (gleichwohl die Zahlen-Felder für das Partikel-System irrsinniger Weise tatsächlich Tabulator-Abstände zulassen), anstatt mich das Eingabefeld verlassen und zu'r nächsten Schaltfläche springen zu lassen.
    ~
    Kommt es mir nur so vor, oder steht bei der Farbauswahl für das Scripting-Textverarbeitungsfenster die initial standardmäßig aktivierte Farbgebung gar nicht zu'r Auswahl?? (Für den Fall, dass ich doch dazu zurückkehren wollte, nachdem ich dem für meine Augen eh angenehmeren "Anarchist" evtl. doch überdrüssig würde.)
    ~
    Während ein Textteil in einer Textverarbeitungs-Ansichten markiert ist (so scheint mir, vielleicht gibt es auch andere Umstände), hat das Programm Probleme damit, einen einfachen Linksklick auf andere Schaltflächen zu erkennen und reibungslos umzusetzen.
    ~
    Wenn ich in den LIGHT-Modus wechsle (gah, meine Augen!), dann ist der jener Zahnrad-Button zu'm Einstellen von Schriftarten gar nicht sichtbar, sofern man nicht darüber hovert.
    ~
    Wenn ich i'm DARK-Modus auf den Button unten rechts klicke, aber dabei nicht auf den "DARK"-Schriftzug sondern auf die Button-Grafik rechts daneben klicke, dann erscheint nur ein ominöses, leeres Fenster.
    ~
    Bei den Partikel-Effekten habe ich mal die Emissions-Größe einwenig hochgesetzt, dabei "scrollte" das "Größe"-Feld hoch, i'm Nachhinein scheinen die Regler nun in das Feld darüber zu ragen, gar unantastbar.
    ~
    Das Skalieren des Fensterrandes i'm Fenstermodus funktioniert nicht immer. Wenn ich z.B. an den rechten Fensterrand gehe, dann mag ich zwar einen Skalierungs-Mauszeiger sehen (i.e. der Doppel-Pfeil), aber das Skalieren funktioniert manchmal nicht.
    ~
    Der obere Rand des Programms lässt sich i'm Fenstermodus zwar ziehen, jedoch nicht an der doch recht großen/langen Stelle in der Mitte, wo der Dateiname steht. Für mich ist dies stets der Bereich -- so fern abseits jeglicher aus versehen anklickbarer Schaltflächen --, an dem ich es instinktiv zuerst versuche. Zu Beginn glaubte ich gar, das Programm ließe sich i'm Fenster-Modus noch nicht skalieren.
    ~
    Das Skalieren vereinzelter GUI-Elemente funktioniert zwar generell, und ich bin Angesichts meines nur mittelgroßen Laptop-Bildschirms auch sehr froh über die Möglichkeit, manche Bereiche so eng ziehen zu können, dass sie bis auf einen noch sichtbaren Rand quasi komplett verschwinden... aber obwohl der Rand dann noch sichtbar bleibt, kann ich ihn -- egal ob i'm Fenster- oder i'm Vollbild-Modus -- nicht mehr ziehen, und das Interface ist fortan unzugänglich, was mich zu einem Neustart des Programmes zwingt.
    ~
    Ist der Mauszeiger jenseits der horizontalen Hälfte eines vertikalen Scroll-Balkens, so wandelt er sich bereits zu einem Skalier-Mauszeiger für den Interface-Rand gleich daneben. Folglich besteht bei'm Auf-den-Scrollbalken-Klicken eine 50-50-Chance, sich zu verklicken und aus Versehen den Interface-Rand zu skalieren anstatt zu scrollen, sehr unpraktisch.
    [EDIT: Das gilt in erster Linie für die Bereiche an der linken Seite des Bildschirms, nicht den mittleren.]
    ~
    Diese Scrollbalken sind für mich verwirrend weil verkehrt eingefärbt. Ich weiß, dass das manche andere Programme so machen, aber es es erschein mir völlig unsinnig, dass der "aktive" Teil des Scroll-Balkens dunkel un unscheinbar sein soll, während der Rest-Balken als hell hervorgehoben wird. I'm LIGHT-Modus geht das durch aus, weil der Restbalken ja kaum sichtbar ist und der dunkle Scroll-Balken somit sehr viel eher hervorsticht, aber i'm DARK-Modus funktioniert das überhaupt nicht -- i'm DARK-Modus wäre es besser, jene Verteilung von Hell und Dunkel umzukehren -- allerdings funktioniert diese Verteilung neben helleren UI-Bereichen des DARK-Modi so halbwegs (mit Betonung auf "so halbwegs"), nebst dünkleren Bereichen wie den Textverarbeitungsfenstern hingegen nicht.
    ~
    Aber es lässt sich skalieren, und das ist sehr erfreulich, danke, auch wenn mir nicht der aus Blender gewohnte Luxus geboten wird, dass ich etwa in den einzelnen Teilen der Benutzeroberfläche hinaus- und hineinzoomen könnte, um ihre Größe meinen der Größe meines Laptop-Bildschirms entsprechenden Bedürfnissen besser anpassen zu können (und selbiges gilt auch für die inzwischen doch recht brauchbaren und somit ebenfalls meinen Dank anregenden Textverarbeitungs-Fenster) -- aber das wäre wohl ein haarsträubend anmutendes Feature-Request, kein wahrhaftiges Problem mit dem Status Quo.
    ~
    Dennoch lamentiere ich, dass ich mir von V5 erhofft hatte, die Benutzeroberfläche würde vielleicht kompakter werden als zuvor. Ich bin das von den meisten anderen Programmen (z.B. Blender oder Krita) gewohnt und finde das schön effizient. Schon in V4 konnte es mit manchen Interfaces etwas schwierig werden, weil sie zu groß für meinen Bildschirm waren, aber zu'm Glück wurden jene Interfaces nun scrollbar gemacht, nachdem V5 die Interface-Elemente zu großen Teilen ja noch weiter auseinander getrieben hat. Da kann ich mich wohl kaum beschweren.
    ~
    [EDIT: Der Tooltip für "Harmonize Walk Animations" ist noch ein Platzhalter.]

    Forum Fan

    145 Posts