]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Enable any entity to control how it looks in the menu
authorTimePath <andrew.hardaker1995@gmail.com>
Mon, 17 Aug 2015 04:46:34 +0000 (14:46 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Mon, 17 Aug 2015 04:46:34 +0000 (14:46 +1000)
qcsrc/common/mapinfo.qh
qcsrc/common/oo.qh
qcsrc/menu/xonotic/dialog_media_guide.qc

index f2f5b5c2837a963ae3d5110e7a70b42c429c134b..b8efb9d90c1275f88b29ec148171515c509cf6fe 100644 (file)
@@ -19,6 +19,13 @@ CLASS(Gametype, Object)
     ATTRIB(Gametype, model2, string, string_null)
     /** game type description */
     ATTRIB(Gametype, gametype_description, string, string_null)
+
+    METHOD(Gametype, describe, string(entity this))
+    string Gametype_describe(entity this) { return this.gametype_description; }
+
+    METHOD(Gametype, display, void(entity this, void(string name, string icon) returns))
+    void Gametype_display(entity this, void(string, string) returns) { returns(this.message, strcat("gametype_", this.mdl)); }
+
     CONSTRUCTOR(Gametype, string hname, string sname, string g_name, bool gteamplay, string defaults, string gdescription)
     {
         CONSTRUCT(Gametype);
index b2131b1d1be3a45d7f89bea5598c2b36a290782e..b7ed3bbe2e7dff2365097cbde24c72928ba4360f 100644 (file)
@@ -117,7 +117,8 @@ STATIC_INIT(RegisterClasses) { RegisterClasses(); }
 #define spawn_1(this)
 #define _vtbl NULL
 CLASS(Object, );
-    ATTRIB(Object, description, string, string_null)
+    METHOD(Object, describe, string(entity this))
+    METHOD(Object, display, void(entity this, void(string name, string icon) returns))
 ENDCLASS(Object)
 #undef spawn_static
 #undef spawn_1
index 5b6a91d97f32c67bdf3b583ebca957aa386da37b..fcc2719faa7c03607e75218182e30d575b59baa1 100644 (file)
@@ -53,7 +53,10 @@ CLASS(DebugSource, DataSource)
             if (strstrofs(sprintf("entity %i", e), DebugSource_activeFilter, 0) < 0) continue;
             if (idx++ == i) break;
         }
-        if (returns) returns(sprintf("entity %i", e), "");
+        if (returns) {
+            if (e.display) e.display(e, returns);
+            else returns(sprintf("entity %i", e), "");
+        }
         return e;
     }
     METHOD(DebugSource, reload, int(string))
@@ -71,11 +74,10 @@ ENDCLASS(DebugSource)
 
 #include "../../common/mapinfo.qh"
 CLASS(GametypeSource, DataSource)
-    .string mdl, message;
     METHOD(GametypeSource, getEntry, entity(int, void(string, string)))
     entity GametypeSource_getEntry(int i, void(string, string) returns) {
         entity e = MAPINFO_TYPES[i];
-        if (returns) returns(e.message, strcat("gametype_", e.mdl));
+        if (returns) e.display(e, returns);
         return e;
     }
     METHOD(GametypeSource, reload, int(string))
@@ -194,10 +196,9 @@ void XonoticGuideTab_entryChangeNotify(entity, entity this)
     entity desc = this.descriptionPane;
     entity entries = this.entryList;
     entity e = entries.source.getEntry(entries.selectedItem, func_null);
-    string s = e.description;
-    string s2 = s ? s : _("No description");
-    if (cvar("developer")) { if (!s) s2 = sprintf("entity %i\n%s", e, s2); }
-    desc.setDescription(desc, s2);
+    string s = e.describe ? e.describe(e) : _("No description");
+    if (cvar("developer")) { s = sprintf("entity %i\n%s", e, s); }
+    desc.setDescription(desc, s);
 }
 
 #endif