Duality

Übersicht Sonstiges Smalltalk

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

DAK

BeitragDo, Feb 16, 2012 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, das ist mal was cooles. Find ich sehr gut. Die einzigen beiden Sachen, die ich noch zu bemängeln habe sind:

-) Die Kamera bewegt sich im Sandboxmode nicht so wie im echten Spiel. Vielleicht hast dus schon so drin und ich bin nur blind, aber es wär gut, wenn mans einstellen kann, dass die Sandbox-Mode-Editor-Kamera der echten Spielkamera folgt. Sollte an/abschaltbar sein, so dass man auch die Editorfunktionen sinnvoll verwenden kann.

-) Nachdem ich das Asteroids-Spiel für ne Weile gespielt hab (haufenweise gecheatete Kanonen im Sandbox-Mode) (runde 38k Punkte) hat es sich mit einer Unhandled Exception verabschiedet, der ganze Editor und das Spiel. Ich bin hier auf Win Vista unterwegs.

Ansonsten gute Arbeit.

Ich bin im Moment zu faul, um mich einzuarbeiten, und ich programmier gerne etwas platformunabhängiger, ansonsten hätte ich mir Duality ernsthaft angeschaut, da es doch sehr cool zu sein scheint. Vorallem die eingebaute Physik-Engine ist was Tolles.
Gewinner der 6. und der 68. BlitzCodeCompo

Fetze

BeitragDo, Feb 16, 2012 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
DAK hat Folgendes geschrieben:

-) Die Kamera bewegt sich im Sandboxmode nicht so wie im echten Spiel. Vielleicht hast dus schon so drin und ich bin nur blind, aber es wär gut, wenn mans einstellen kann, dass die Sandbox-Mode-Editor-Kamera der echten Spielkamera folgt. Sollte an/abschaltbar sein, so dass man auch die Editorfunktionen sinnvoll verwenden kann.


Im Camera-Fenster des Editors ist oben links so eine ComboBox, wo du den Bearbeitungsmodus wählen kannst. Standard ist Scene Editor, dann gibt es noch Collider Editor - und Game View. Letzterer tut genau das, was du gerne hättest Wink

DAK hat Folgendes geschrieben:

-) Nachdem ich das Asteroids-Spiel für ne Weile gespielt hab (haufenweise gecheatete Kanonen im Sandbox-Mode) (runde 38k Punkte) hat es sich mit einer Unhandled Exception verabschiedet, der ganze Editor und das Spiel. Ich bin hier auf Win Vista unterwegs.


Ah, blöd. Kannst du mir mal per PN deine logfile_editor.txt schicken? Oder alternativ den Callstack im Error-Fenster der Unhandled Exception, falls du den Fehler reproduzieren kannst.

DAK

BeitragFr, Feb 17, 2012 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, ok, hab ich nicht gesehen, das mit der Kamera.

Das Logfile hab ich dir geschickt.

Ich frag mich grad, obs vielleicht sinnvoll wär, wenn du vielleicht vorgefertigte sample Codes beizulegen, die man dann einfach direkt einbinden könnte. So, z.B., dass Leute, die nicht coden können, den Editor auch verwenden können. Von wegen, stell dir vor, du willst einen Spaceshooter machen, dann klickst du dir dein Schiff zusammen, wie gewohnt, wählst dann in Duality aus von wegen "GameLogic: Space Ship", hast dann noch ein paar Regler/Felder wo du Sachen wie Beschleunigung, Gewicht, Maximalgeschwindigkeit und so weiter auswählst, dann wählst du die Tasten aus mit denen mans steuern soll und nach einem Klick auf OK hast du dein fertiges, steuerbares Schiff. Und das dann noch mit ein paar anderen Sachen, wie z.B. Autos oder so. Vielleicht wär das ne Idee wert. Wobei Autos und Raumschiffe unterscheiden sich nur darin, wie stark sie driften, und das läße sich auf über einen Regler einstellen.
Gewinner der 6. und der 68. BlitzCodeCompo

Fetze

BeitragFr, Feb 17, 2012 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
DAK hat Folgendes geschrieben:

Ich frag mich grad, obs vielleicht sinnvoll wär, wenn du vielleicht vorgefertigte sample Codes beizulegen, die man dann einfach direkt einbinden könnte. So, z.B., dass Leute, die nicht coden können, den Editor auch verwenden können. Von wegen, stell dir vor, du willst einen Spaceshooter machen, dann klickst du dir dein Schiff zusammen, wie gewohnt, wählst dann in Duality aus von wegen "GameLogic: Space Ship", hast dann noch ein paar Regler/Felder wo du Sachen wie Beschleunigung, Gewicht, Maximalgeschwindigkeit und so weiter auswählst, dann wählst du die Tasten aus mit denen mans steuern soll und nach einem Klick auf OK hast du dein fertiges, steuerbares Schiff. Und das dann noch mit ein paar anderen Sachen, wie z.B. Autos oder so. Vielleicht wär das ne Idee wert. Wobei Autos und Raumschiffe unterscheiden sich nur darin, wie stark sie driften, und das läße sich auf über einen Regler einstellen.


Duality ist kein GameMaker. Es ist ein Framework und Toolset, um Entwickler zu unterstützen - nicht, ihnen mit vorgefertigten Regeln vorzuschreiben, wie ihr Spiel auszusehen hat Wink

Da sowohl Core als auch Editor 100% pluginbasiert sind, steht es natürlich jedem frei, selbst ein paar solcher Standardkomponenten zu erstellen und frei verfügbar zu machen. Wer entwickeln will ohne zu coden müsste dann lediglich die Plugins in den entsprechenden Ordner kopieren und könnte loslegen. Es ist also ohne Weiteres möglich, Duality in Richtung GameMaker zu bewegen, aber ich werde mich daran nicht beteiligen.

Was ich natürlich entwickeln und pflegen werde, sind solche Standardkomponenten, die nicht an vorgefertigte Spielregeln geknüpft sind, zB. Partikelsysteme, Tilemaps oder eben die frisch hinzugekommene Physik Smile

DAK

BeitragFr, Feb 17, 2012 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, ich hab hald gemeint, dass es doch recht einfach möglich wäre, das ganze 'Game-Maker-tauglich' zu machen, aber gleichzeitig den Entwicklern freizustellen den Code direkt selbst zu schreiben. Aber ich verstehe deinen Punkt ganz gut.

Mir gefällt das Projekt, könnte sich gut gebrauchen lassen.
Gewinner der 6. und der 68. BlitzCodeCompo

Fetze

Betreff: Dynamic Lighting Test

BeitragSo, Feb 26, 2012 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt mal wieder was zu testen Smile

user posted image

Dynamische Beleuchtung in Duality, Techdemo gibts hier. Per-Pixel Beleuchtung mit Ambient, Directional, Point und Spot Lights. Einfach mal DualityLauncher.exe starten, ums in Bewegung zu sehen, oder eben den Editor für alle die damit lieber selbst rumspielen wollen. Wink

Interessantes Detail: Um das alles umzusetzen hab ich Duality selbst nicht angefasst - steht zu 100% in Plugin Code. Ist also keine Hexerei seitens des Entwicklers sondern etwas, das auch jeder andere mit Duality hätte basteln können!
Vermutlich werde ich Kram wie Beleuchtungstechniken und Co nicht in den Duality Core aufnehmen; ich gehe davon aus, dass nur ein winziger Bruchteil von Spielen tatsächlich darauf zurückgreifen wird. Denen kann die Techdemo hier aber natürlich als Beispiel und Vorlage dienen, für alle anderen bleibt dafür der Core etwas aufgeräumter.

Wäre cool wenn ein paar von euch mal testen könntet, ob es denn läuft. Ich bin nicht unbedingt ein Grafikprogrammierungs-Guru und mir nicht im Klaren darüber, ob mein Shader- und Grafikcode hier plattformübergreifend verlässlich arbeitet. Very Happy

DAK

BeitragMo, Feb 27, 2012 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, funktioniert hier auf Win Vista, Core2Duo (2x2.13 GHz), Geforce 9600M GT ohne Probleme und absolut flüssig.
Gewinner der 6. und der 68. BlitzCodeCompo

ozzi789

BeitragMo, Feb 27, 2012 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
DualityLauncher crasht bei mir.

System:
Win7 x64 Professional - SP1
4GB Ram
ATI 5770 (neuste Catalyst 11 Treiber)

logfile.txt bleibt leer..
Mehr davon kann ich dir nicht zeigen, durch den crash kann ich in der Konsole nicht scrolen Sad

http://www10.pic-upload.de/27....soq83n.jpg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Fetze

BeitragMo, Feb 27, 2012 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ozzi789 hat Folgendes geschrieben:
DualityLauncher crasht bei mir.

System:
Win7 x64 Professional - SP1
4GB Ram
ATI 5770 (neuste Catalyst 11 Treiber)

logfile.txt bleibt leer..
Mehr davon kann ich dir nicht zeigen, durch den crash kann ich in der Konsole nicht scrolen Sad

http://www10.pic-upload.de/27....soq83n.jpg


Soweit ich das überblicken kann hat der Fehler bei dir nichts mit Grafik zu tun sondern mit der Windows 7 User Access Control (UAC) in Verbindung mit den Sicherheitsrichtlinien von DotNet. Folgendes würde mir vielleicht weiterhelfen:

1. Rechtsklick auf DualityLauncher.exe und "Ausführen als Administrator" - gehts dann?

2. Bastle dir eine Datei namens "DualityLauncher.exe.config" die direkt neben "DualityLauncher.exe" liegt, also im selben Ordner. Ihr Inhalt ist:
Code: [AUSKLAPPEN]

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

Geht es jetzt?

3. Welche DotNet-Version hast du bei dir installiert? Falls du keine installiert hast, nutzt du die in Windows mitgelieferte Version. In jedem Fall sollte sie unter "Computer" bei "Software installieren / deinstallieren" gelistet sein, da sollte sowas stehen wie "Microsoft .Net Framework 4". Welche Version steht da?

4. Falls es nicht eine 4er-Version ist, könntest du ausprobieren, ob es läuft, wenn du DotNet Version 4 installierst. Die Sache ist, die Sicherheitsrichtlinien haben sich zu Version 4 geändert, was bedeutet dass dasselbe Programm unter der einen Version problemlos läuft aber unter einer anderen Version als Sicherheitsrisiko eingestuft werden könnte.

ozzi789

BeitragMo, Feb 27, 2012 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ändert nichts

2. Klappt jetzt perfekt Cool

Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

count-doku

BeitragDi, Feb 28, 2012 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus und läuft flüssig!

System: Win7 Ultimate 64bit
mit 4x3.2GHz und GTX460

Musste allerdings DotNetFx4.0 laden, vorher startete es nicht...

Fetze

BeitragDi, Feb 28, 2012 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
count-doku hat Folgendes geschrieben:
Sieht gut aus und läuft flüssig!

System: Win7 Ultimate 64bit
mit 4x3.2GHz und GTX460

Musste allerdings DotNetFx4.0 laden, vorher startete es nicht...


Wenn du vom Editor sprichst: Alternativ kann man auch DualityEditor.exe.config löschen und sein Glück versuchen. Effektiv beraubt man den Editor damit seiner DotNet-Versionspräferenz. Empfehle ich nicht, aber wer nur mal schnell reinschauen will, dafür könnte es mit etwas Glück ausreichen. Wink

Insgesamt ist Duality aber schon auf DotNet 4.0 ausgelegt.

Fetze

Betreff: Feature Explosion

BeitragDo, März 22, 2012 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt mal wieder ne Releaseversion mit ein paar neuen Features. Genaugenommen sogar einer ganzen Menge davon Very Happy Zu den Highlights zählen:

Arrow Komplett neu geschriebenes PropertyGrid zum Bearbeiten von Objekteigenschaften. Sieht besser aus, ist deutlich schneller, kann komplett mit der Tastatur gesteuert werden und hat vernünftigen Ctrl+C / Ctrl+V Support.
Arrow Preview-Bilder für allerlei Ressourcentypen (Pixmap, AudioData, Font) für verbesserten Workflow
Arrow Intelligentes Dragdrop, oder: "Ich zieh das hier mal nach da drüben, der Editor weiß dann schon wies gemeint ist". Einige Dinge lassen sich dadurch deutlich schneller bewerkstelligen.
Arrow Komplettes Redesign der Editor GUI

Freue mich natürlich wie immer über jeden Tester, Feedback, Fragen und Anregungen sind immer gerngesehen Smile

Downloadlinks:
--> Asteroids <--
--> Dynamic Lighting <--

(Wen's interessiert, einige der neuen Features hab ich in meinem letzten Blogeintrag ein wenig genauer beschrieben)

Fetze

Betreff: Intelligentes DragDrop

BeitragFr, März 23, 2012 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab gerade ein wenig Zeit über, da kann ich ebensogut noch ein paar Worte zum intelligenten DragDrop verlieren - ich denke nach meinem letzten Post hat wohl kaum jemand wirklich eine Ahnung davon, was es eigentlich tut. Very Happy

Also, worum gehts dabei eigentlich? Das Grundproblem ist eigentlich recht banal: Der Dualitor Workflow basierte von Anfang an zu einem gewissen Teil auf DragDrop, beispielsweise um Verknüpfungen zwischen Ressourcen (Materialien, Texturen, Sounds, etc.) und Komponenten von GameObjects (SpriteRenderer, SoundEmitter, etc.) herzustellen. Ich packe mir im Project View einfach die entsprechende Ressource mit dem Cursor und ziehe sie im Object Inspector auf den jeweiligen Slot der Komponente. Soweit kein Problem.

user posted image

Ein anderes Anwendungsgebiet von DragDrop ist das Erstellen und instanziieren von Prefabs: Wenn ich als Nutzer ein Prefab aus einem GameObject machen will, greife ich mir das GameObject im Scene View und ziehe es in den Projekt View. GameObjects haben bei den Projektressourcen nichts zu suchen, das weiß der Project View und erstellt deswegen eine Prefab-Ressource, wo das gezogene GameObject dann reingepackt wird.

user posted image

Will ich aus diesem Prefab jetzt ein GameObject instanziieren, packe ich mir das Prefab im Project View und ziehe es runter in den Scene View oder wahlweise auch den großen Hauptbereich mit der Levelansicht (Camera View). Dort wiederum haben Ressourcen nichts zu suchen, also wird das Prefab kurzerhand ausgepackt und eine Instanz des GameObjects erstellt.

user posted image

So weit so gut. Auch ohne intelligentes DragDrop war das schonmal ein relativ intuitives Verhalten. Leider funktionierten nicht alle Dinge im Editor so einfach. Nehmen wir an, man wollte (ohne intelligentes DragDrop) ein Sprite-Objekt erstellen, das eine Grafik verwendet, die irgendwo auf der Festplatte herumliegt. Folgendes müsste man dafür tun:

1. DragDrop der Bilddatei in den Project View. Die Grafik wird importiert und eine neue Pixmap-Ressource wird angelegt.
2. Jetzt brauchen wir eine Textur, welche die Grafik verwendet. Rechtsklick auf die Pixmap-Ressource und "Create Texture" im Kontextmenü wählen.
3. Objekte werden aber nicht mit Texturen, sondern mit Materialien gerendert. Also Rechtsklick auf die Texture und "Create Material" im Menü wählen.
4. Jetzt brauchen wir noch das Objekt. Rechtsklick auf eine leere Stelle im Scene view und "Create / GameObject" wählen.
5. Das Objekt benötigt nun Komponenten um ein Sprite darstellen zu können, zunächst einmal eine Position. Rechtsklick auf das neue Objekt und "Create / Components / Transform" wählen.
6. Jetzt noch die Renderer Komponente: "Create / Components / SpriteRenderer".
7. Zu guter letzt müssen wir dem Renderer noch das Material mitgeben. Also die Material-Ressource packen und in den entsprechenden Slot im PropertyGrid ziehen, wenn das Objekt ausgewählt ist.

Wenn sich an dieser Stelle jemand denkt "Wtf, so viel Aufwand für ein einfaches Sprite?!", den kann ich beruhigen: In aller Regel passierte es nicht sehr oft dass man wirklich den kompletten Strang an Aktionen ausführen musste. Oft gab es ja bereits ein passendes Material oder das Objekt existierte schon, etc.
Trotzdem gab es da natürlich Verbesserungsbedarf und hier kommt intelligentes DragDrop ins Spiel. Spulen wir mal zurück auf Anfang und schauen uns an wie die gesamte Aktion jetzt mit intelligentem DragDrop aussieht:

1. Grafik importieren. Im Prinzip noch genauso wie vorher, da hat sich nix geändert. Siehe Punkt 1 oben.
2. Jetzt noch die neue Pixmap Ressource packen und in Scene- oder Cam View absetzen.
3. Tadaa!

Diese simple Aktion veranlasst den Editor dazu, automatisch Textur und Material zu erstellen, konfigurieren und abzuspeichern, ein neues GameObject zu erstellen sowie Transform- und SpriteRenderer Komponente hinzuzufügen. Vollautomatisch und superschnell Very Happy

Aber kommen wir langsam mal zum intelligenten Teil: Was ist da intern eigentlich gerade passiert? Diese Aktion hardcoded festzulegen wäre doch ein übler Schnitzer im flexiblen Plugin-Design von Engine und Editor. Dem Editor selbst sollte es völlig egal sein, was es für Komponenten und Ressourcen gibt und was man damit tun kann, all dieses "Wissen" kommt erst über entsprechende Plugins hinzu. Doch selbst wenn man diese Aktion hardcoded in ein Plugin packt, wirklich schön oder flexibel ist das nicht.

Also auf zur Lösung des Problems:
Eine DragDrop-Aktion enthält grundsätzlich erstmal Daten eines bestimmten Typs. Das mögliche Ziel einer DragDrop-Aktion (also beispielsweise Scene- oder Cam View) interessiert dabei gar nicht, was für Daten das genau sind, sondern nur ob man diese in eine Form bringen kann, die das jeweilige Steuerelement verwalten kann. Die Cam View arbeitet z.B. mit GameObjects, da man diese dort drinnen herum schieben kann.
Grundsätzlich könnte man der Cam View nun also beibringen wie es andere Datentypen (z.B. Pixmaps) in GameObjects konvertiert, aber was ist dann mit der Scene View? Und allen anderen Steuerelementen? Damit man dasselbe Verhalten nicht allen Steuerelementen einzeln beibringen muss, ist es ratsam, dieses zu zentralisieren. Ein erster Ansatz wäre also, dass Cam View, Scene View und Co beim Feststellen einer DragDrop-Aktion die Rohdaten extrahieren, diese an die "Zentrale" weiterleiten und darum bitten, sie in GameObjects zu konvertieren.
Dieses Konzept abstrahierend kam ich auf folgendes: In der Zentrale wird eine Liste von DataConverter-Objekte verwaltet. Jedes dieser Objekte ist in der Lage, einen bestimmten Datentyp in einen anderen Datentyp zu konvertieren. Editor-Plugins können eigene DataConverter definieren und ebenfalls in der Zentrale registrieren.

user posted image

Ich kann nun der "Zentrale" beliebige Objektdaten rüberschicken und Objekte eines bestimmten Typs zurückverlangen. Was die Zentrale nun tut ist herauszufinden auf welche Weise sich die registrierten DataConverters am effizientesten kombinieren lassen um die Anfrage zu erfüllen. Man kann sich das im Prinzip wie eine Pathfinding-Operation vorstellen.

Was also bei der oben vorgestellten DragDrop-Aktion intern passiert ist folgendes:
1. DragDrop erreicht die Cam View. Selbige verlangt GameObjects als Daten und startet "über die Zentrale" eine Konvertierung mit dem Zieltyp "GameObject"
2. Dort wird das Datenpaket geöffnet und festgestellt: Hm, Mist. Keine GameObjects drin. Fragen wir mal rum, ob sich ein Konverter mit Zieltyp "GameObject" findet
3. GameObjectFromPrefab und GameObjectFromComponents bieten sich an. Die Anfrage wird nacheinander an beide weitergeleitet.
4. GameObjectFromPrefab lässt sie nach einigem Pathfinding zurückgehen da der Konverter feststellt dass ihm die zum Arbeiten nötigen Daten fehlen. Es werden keine Prefabs gefunden und es lassen sich auch keine aus den verfügbaren Daten ableiten.
5. Bleibt noch GameObjectFromComponents. Ich überspringe jetzt aber mal die Pathfinding-Details. Die vollständige Konvertierungskette ist:

user posted image
(Nicht alle existierenden DataConverter angezeigt)

Es werden also im Rahmen der Aktion automatisch eine Textur aus der Pixmap erstellt, dann ein Material aus der Textur, dann eine SpriteRenderer-Komponente die das Material nutzt und anschließend ein GameObject welches erst alle "required Components" des SpriteRenderers hinzufügt (Transform) und dann den Renderer selbst. Und da sind wir.

Natürlich kann man jetzt sagen "Oh man, so ein Aufwand für so ne Kleinigkeit", aber dieses System hier hat tatsächlich ein paar Vorteile, die anders nur schwer erreichbar wären. Es reagiert zum Beispiel sehr flexibel wenn Nutzer eigene Komponententypen erstellen - einfach einen eigenen Konverter schreiben (Wenige Codezeilen in der Regel) und in der Zentrale registrieren. Und sofort ist der gesamte Editor in der Lage, DragDrop-, Clipboard- und Konvertierungsaktionen mit den Nutzerkomponenten durchzuführen.
Ein anderer Vorteil entsteht durch die Arbeitsaufteilung der DataConverter: Eine Konvertierung wird nicht als atomare Aktion begriffen, sondern als Teamwork. Dementsprechend können auch viele DataConverter an einem gemeinsamen Datensatz arbeiten und sich gegenseitig ergänzen. Es ist beispielsweise ohne weiteres Möglich, im Project View ein paar Sounds und eine Textur zu wählen und den ganzen Packen komplett in die Cam View zu ziehen. Das Resultat ist ein GameObject, das neben der SpriteRenderer-Komponente (aus der Textur) auch eine SoundEmitter-Komponente enthält, welche die beiden Sounds als Sound Sources hinzugefügt bekam. Das ist nur dadurch möglich, dass DataConverter "in Teamarbeit" vorgehen.

Natürlich gibt es auch DataConverter, die das explizit verhindern. Packt man beispielsweise ein Prefab gemeinsam mit einem Sound, wird das Prefab instanziiert und der Sound ignoriert. Prefabs haben vorrang, da hier angenommen wird dass diese grundsätzlich erstmal in ihrer unbearbeiteten Reinform instanziiert werden sollen. Das ist nirgendwo hardgecodet, sondern steht im DataConverter GameObjectFromPrefab - welcher in der Zentrale bei Bedarf ohne Weiteres überschrieben werden kann.

Okay, jetzt hab ich eine ganze Menge Theorie von mir gegeben. Hier zum Abschluss noch ein paar kommentierte Codefragmente:

Das hier ist mal so ein DataConverter von Innen, und zwar TextureFromPixmap.
Code: [AUSKLAPPEN]

public class TextureFromPixmap : DataConverter
{
   public override bool CanConvertFrom(ConvertOperation convert)
   {
      return
         convert.AllowedOperations.HasFlag(ConvertOperation.Operation.Convert) &&
         convert.CanPerform<Pixmap>();
   }
   public override bool Convert(ConvertOperation convert)
   {
      bool finishConvertOp = false;

      List<ContentRef<Pixmap>> dropdata = new List<ContentRef<Pixmap>>();
      var matSelectionQuery = convert.Perform<Pixmap>();
      if (matSelectionQuery != null) dropdata.AddRange(matSelectionQuery.Ref());

      // Generate objects
      foreach (ContentRef<Pixmap> pixRef in dropdata)
      {
         if (convert.IsObjectHandled(pixRef.Res)) continue;
         if (!pixRef.IsAvailable) continue;
         Pixmap pix = pixRef.Res;

         // Find Material matching Texture
         ContentRef<Texture> texRef = ContentRef<Texture>.Null;
         if (pixRef.IsDefaultContent)
         {
            var defaultContent = ContentProvider.GetAllDefaultContent();
            texRef = defaultContent.Where(r => r.Is<Texture>() && (r.Res as Texture).BasePixmap == pix).FirstOrDefault().As<Texture>();
         }
         else
         {
            string texPath = pix.FullName + Texture.FileExt;
            texRef = ContentProvider.RequestContent<Texture>(texPath);
            if (!texRef.IsAvailable && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
            {
               // Auto-Generate Texture
               texRef = Texture.CreateFromPixmap(pix);
            }
         }

         if (!texRef.IsAvailable) continue;
         convert.AddResult(texRef.Res);
         finishConvertOp = true;
         convert.MarkObjectHandled(pixRef.Res);
      }

      return finishConvertOp;
   }
}


Und so wird er "in der Zentrale" registriert:
Code: [AUSKLAPPEN]
CorePluginHelper.RegisterDataConverter<Texture>(new DataConverters.TextureFromPixmap());

(Die Zentrale hat noch einige andere Aufgaben - man kann dort z.B. auch Editor-Metadaten für Core-Klassen hinterlegen, z.B. zu nutzende Icons, etc.)

Hier eine zum Verständnis gekürzte und editierte Version dessen was die Cam View tut, um an ihre Daten zu kommen:
Code: [AUSKLAPPEN]

private void LocalGLControl_DragDrop(object sender, DragEventArgs e)
{
   DataObject data = e.Data as DataObject;
   ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.All);
   if (convert.CanPerform<GameObject>())
   {
      var dragObjQuery = convert.Perform<GameObject>();
      List<GameObject> dragObj = dragObjQuery.ToList();

      // .. snip ..
   }
}

Mithilfe der ConvertOperation-Klasse sind es im Prinzip nur ein paar Zeilen, um jeden beliebigen Objekttyp anzufordern. Sie kapselt auch die ganzen Zugriffe auf die "Zentrale".

So. Hoffe, das war so halbwegs informativ Smile

ozzi789

BeitragFr, März 23, 2012 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Beide Echsen .. äh Exen funktionieren ohne Probleme Smile

Ich habe nicht alles gelesen, aber hört sich interessant an & der Editor macht einen sehr professionellen eindruck!
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Fetze

BeitragSo, Apr 29, 2012 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin gerade leider ziemlich beschäftigt mit Studienkram und langsam stapelt sich eine Menge Zeug auf meiner ToDo-List. Zeit für eine kleine Spielerei war aber trotzdem, deswegen kann ich euch jetzt viel Spaß mit Tetris wünschen Smile Ist übrigens nicht ganz der Klassiker, ganz so langweilig war mir dann doch nicht. Einfach mal ausprobieren Wink

Feedback und Highscore-Vergleiche sind willkommen Smile



(Danke für die Musikuntermalung an SunandWeather)

Fetze

BeitragDi, Jul 31, 2012 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mich in letzter Zeit nochmal ausgiebig mit der Integration der Farseer-Physikengine befasst. Neu sind unter anderem 14 Joint-Typen und eine Physik-Sandbox in der man das ganze mal in Aktion bewundern kann. Smile

user posted imageuser posted imageuser posted imageuser posted imageuser posted imageuser posted image

Das ganze kann hier heruntergeladen werden Smile

Edit: Für Interessierte gibts jetzt auch eine Infoseite zu Duality, wo das Wesentliche nochmal kurz zusammengefasst ist. Falls sich jemand überlegt Duality mal auszuprobieren ist das ein guter Startpunkt Wink

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group