updated ufoai plugin from mattn

git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@196 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
Forest Hale 2008-02-24 13:10:49 +00:00
parent dd22859189
commit 79d5023db9
10 changed files with 101 additions and 114 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

After

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

After

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,014 B

View file

@ -32,7 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include <gtk/gtk.h>
#define PLUGIN_VERSION "0.2"
#define PLUGIN_VERSION "0.4"
#include "ifilter.h"
#include "ibrush.h"
@ -74,7 +74,7 @@ namespace UFOAI
const char* getCommandList()
{
/*GlobalRadiant().getGameName()*/
return "About;-;Worldspawn reset (day);Worldspawn reset (night);Worldspawn (day);Worldspawn (night);Perform check;-;Level 1;Level 2;Level 3;Level 4;Level 5;Level 6;Level 7;Level 8;-;StepOn;ActorClip";
return "About;-;Worldspawn reset;Worldspawn;Perform check;-;Level 1;Level 2;Level 3;Level 4;Level 5;Level 6;Level 7;Level 8;-;StepOn;ActorClip;WeaponClip;Nodraw";
}
const char* getCommandTitleList()
{
@ -86,7 +86,7 @@ namespace UFOAI
if(string_equal(command, "About"))
{
GlobalRadiant().m_pfnMessageBox(GTK_WIDGET(g_mainwnd),
"UFO:AI Plugin (http://www.ufoai.net)\nBuild: " __DATE__ "\nRadiant version: " RADIANT_VERSION "\nPlugin version: " PLUGIN_VERSION "\nAuthor: Martin Gerhardy (tlh2000/mattn)\n", "About",
"UFO:AI Plugin (http://ufoai.sf.net)\nBuild: " __DATE__ "\nRadiant version: " RADIANT_VERSION "\nPlugin version: " PLUGIN_VERSION "\nAuthor: Martin Gerhardy (tlh2000/mattn)\n", "About",
eMB_OK, eMB_ICONDEFAULT);
}
else if(string_equal(command, "Level 1"))
@ -101,21 +101,13 @@ namespace UFOAI
{
filter_level(CONTENTS_LEVEL3);
}
else if(string_equal(command, "Worldspawn (day)"))
else if(string_equal(command, "Worldspawn"))
{
assign_default_values_to_worldspawn(false, true, &message);
assign_default_values_to_worldspawn(false, &message);
}
else if(string_equal(command, "Worldspawn (night)"))
else if(string_equal(command, "Worldspawn reset"))
{
assign_default_values_to_worldspawn(false, false, &message);
}
else if(string_equal(command, "Worldspawn reset (day)"))
{
assign_default_values_to_worldspawn(true, true, &message);
}
else if(string_equal(command, "Worldspawn reset (night)"))
{
assign_default_values_to_worldspawn(true, false, &message);
assign_default_values_to_worldspawn(true, &message);
}
else if(string_equal(command, "Perform check"))
{
@ -149,6 +141,14 @@ namespace UFOAI
{
filter_actorclip();
}
else if(string_equal(command, "WeaponClip"))
{
filter_weaponclip();
}
else if(string_equal(command, "NoDraw"))
{
filter_nodraw();
}
if (message != NULL)
{

View file

@ -31,6 +31,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
bool actorclip_active = false;
bool stepon_active = false;
bool nodraw_active = false;
bool weaponclip_active = false;
int level_active = 0;
// TODO: This should be added to ibrush.h
@ -273,6 +275,28 @@ void filter_stepon (void)
}
}
void filter_nodraw (void)
{
if (nodraw_active) {
nodraw_active = false;
} else {
nodraw_active = true;
}
brushlist_t brushes;
GlobalSceneGraph().traverse(BrushGetLevel(brushes, SURF_NODRAW, false, false, nodraw_active));
#ifdef _DEBUG
if (brushes.empty())
{
globalOutputStream() << "UFO:AI: No brushes.\n";
}
else
{
globalOutputStream() << "UFO:AI: Hiding " << Unsigned(brushes.size()) << " nodraw brushes.\n";
}
#endif
}
void filter_actorclip (void)
{
if (actorclip_active) {
@ -294,3 +318,25 @@ void filter_actorclip (void)
}
#endif
}
void filter_weaponclip (void)
{
if (weaponclip_active) {
weaponclip_active = false;
} else {
weaponclip_active = true;
}
brushlist_t brushes;
GlobalSceneGraph().traverse(BrushGetLevel(brushes, CONTENTS_WEAPONCLIP, true, false, weaponclip_active));
#ifdef _DEBUG
if (brushes.empty())
{
globalOutputStream() << "UFO:AI: No brushes.\n";
}
else
{
globalOutputStream() << "UFO:AI: Hiding " << Unsigned(brushes.size()) << " weaponclip brushes.\n";
}
#endif
}

View file

@ -22,6 +22,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
void filter_level(int flag);
void filter_stepon(void);
void filter_actorclip(void);
void filter_weaponclip(void);
void filter_nodraw(void);
#define SURF_NODRAW 0x80
#define CONTENTS_LEVEL8 0x8000
#define CONTENTS_LEVEL7 0x4000
@ -32,7 +36,7 @@ void filter_actorclip(void);
#define CONTENTS_LEVEL2 0x0200
#define CONTENTS_LEVEL1 0x0100
#define CONTENTS_ACTORCLIP 0x10000
#define CONTENTS_WEAPONCLIP 0x2000000
#define CONTENTS_STEPON 0x40000000
#endif

View file

@ -67,7 +67,7 @@ static void close_window(GtkWidget *widget, gpointer data)
/* =============================== */
#define NUM_TOOLBARBUTTONS 10
#define NUM_TOOLBARBUTTONS 12
/**
* @brief
@ -105,6 +105,8 @@ public:
case 7: return "ufoai_level8.bmp";
case 8: return "ufoai_stepon.bmp";
case 9: return "ufoai_actorclip.bmp";
case 10: return "ufoai_weaponclip.bmp";
case 11: return "ufoai_nodraw.bmp";
}
return NULL;
}
@ -115,6 +117,8 @@ public:
/* case 3: return eButton;*/
case 8: return eToggleButton;
case 9: return eToggleButton;
case 10: return eToggleButton;
case 11: return eToggleButton;
default: return eButton;
}
}
@ -132,6 +136,8 @@ public:
case 7: return "Level 8";
case 8: return "Stepon";
case 9: return "Actorclip";
case 10: return "Weaponclip";
case 11: return "Nodraw";
}
return NULL;
}
@ -149,6 +155,8 @@ public:
case 7: return "Show only level 8";
case 8: return "Hide stepon brushes";
case 9: return "Hide actorclip brushes";
case 10: return "Hide weaponclip brushes";
case 11: return "Hide nodraw brushes";
}
return NULL;
}
@ -167,6 +175,8 @@ public:
case 7: filter_level(CONTENTS_LEVEL8); break;
case 8: filter_stepon(); break;
case 9: filter_actorclip(); break;
case 10: filter_weaponclip(); break;
case 11: filter_nodraw(); break;
}
SceneChangeNotify();
}

View file

@ -141,9 +141,9 @@ void get_team_count (const char *classname, int *count, int *team)
}
/**
* @brief Some default values to worldspawn like maxlevel, maxteams and so on
* @brief Some default values to worldspawn like maxlevel and so on
*/
void assign_default_values_to_worldspawn (bool override, bool day, char **returnMsg)
void assign_default_values_to_worldspawn (bool override, char **returnMsg)
{
static char message[1024];
Entity* worldspawn;
@ -162,101 +162,27 @@ void assign_default_values_to_worldspawn (bool override, bool day, char **return
*message = '\0';
*str = '\0';
get_team_count("info_player_start", &count, &teams);
// TODO: Get highest brush - a level has 64 units
worldspawn->setKeyValue("maxlevel", "5");
if (string_empty(worldspawn->getKeyValue("maxteams"))
|| atoi(worldspawn->getKeyValue("maxteams")) != teams)
if (override || string_empty(worldspawn->getKeyValue("maxlevel")))
{
snprintf(str, sizeof(str) - 1, "%i", teams);
worldspawn->setKeyValue("maxteams", str);
strncat(message, "Worldspawn: Set maxteams to ", sizeof(message) - 1);
strncat(message, str, sizeof(message) - 1);
strncat(message, "\n", sizeof(message) - 1);
// TODO: Get highest brush - a level has 64 units
worldspawn->setKeyValue("maxlevel", "5");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set maxlevel to: %s", worldspawn->getKeyValue("maxlevel"));
}
if (day)
if (override || string_empty(worldspawn->getKeyValue("maxteams")))
{
if (override)
get_team_count("info_player_start", &count, &teams);
if (teams)
{
worldspawn->setKeyValue("light", "160");
worldspawn->setKeyValue("_color", "1 0.8 0.8");
worldspawn->setKeyValue("angles", "30 210");
worldspawn->setKeyValue("ambient", "0.4 0.4 0.4");
snprintf(str, sizeof(str) - 1, "%i", teams);
worldspawn->setKeyValue("maxteams", str);
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set maxteams to: %s", worldspawn->getKeyValue("maxteams"));
}
else
if (count < 16)
{
if (string_empty(worldspawn->getKeyValue("light")))
{
worldspawn->setKeyValue("light", "160");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("_color")))
{
worldspawn->setKeyValue("_color", "1 0.8 0.8");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("angles")))
{
worldspawn->setKeyValue("angles", "30 210");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("ambient")))
{
worldspawn->setKeyValue("ambient", "0.4 0.4 0.4");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "You should at least place 16 info_player_start");
}
}
else
{
if (override)
{
worldspawn->setKeyValue("light", "60");
worldspawn->setKeyValue("_color", "0.8 0.8 1");
worldspawn->setKeyValue("angles", "15 60");
worldspawn->setKeyValue("ambient", "0.25 0.25 0.275");
}
else
{
if (string_empty(worldspawn->getKeyValue("light")))
{
worldspawn->setKeyValue("light", "60");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("_color")))
{
worldspawn->setKeyValue("_color", "0.8 0.8 1");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("angles")))
{
worldspawn->setKeyValue("angles", "15 60");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
if (string_empty(worldspawn->getKeyValue("ambient")))
{
worldspawn->setKeyValue("ambient", "0.25 0.25 0.275");
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Set ambient to: %s", worldspawn->getKeyValue("ambient"));
}
}
}
if (override)
{
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message),
"Set light to: %s\n"
"Set _color to: %s\n"
"Set angles to: %s\n"
"Set ambient to: %s\n",
worldspawn->getKeyValue("light"),
worldspawn->getKeyValue("_color"),
worldspawn->getKeyValue("angles"),
worldspawn->getKeyValue("ambient")
);
}
// no errors - no warnings
if (!strlen(message))
@ -307,14 +233,6 @@ void check_map_values (char **returnMsg)
get_team_count("info_player_start", &count, &teams);
if (!count)
strncat(message, "No multiplayer start positions (info_player_start)\n", sizeof(message) - 1);
else if (string_empty(worldspawn->getKeyValue("maxteams")))
{
snprintf(message, sizeof(message) - 1, "Worldspawn: No maxteams defined (#info_player_start) (set to: %i)\n", teams);
snprintf(str, sizeof(str) - 1, "%i", teams);
worldspawn->setKeyValue("maxteams", str);
}
else if (teams != atoi(worldspawn->getKeyValue("maxteams")))
snprintf(message, sizeof(message) - 1, "Worldspawn: Settings for maxteams (%s) doesn't match team count (%i)\n", worldspawn->getKeyValue("maxteams"), teams);
// singleplayer map?
count = 0;
@ -322,6 +240,12 @@ void check_map_values (char **returnMsg)
if (!count)
strncat(message, "No singleplayer start positions (info_human_start)\n", sizeof(message) - 1);
// singleplayer map?
count = 0;
get_team_count("info_2x2_start", &count, NULL);
if (!count)
strncat(message, "No singleplayer start positions for 2x2 units (info_2x2_start)\n", sizeof(message) - 1);
// search for civilians
count = 0;
get_team_count("info_civilian_start", &count, NULL);
@ -343,6 +267,9 @@ void check_map_values (char **returnMsg)
ent_flags = check_entity_flags("func_breakable", "spawnflags");
if (ent_flags)
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Found %i func_breakable with no spawnflags\n", ent_flags);
ent_flags = check_entity_flags("misc_sound", "spawnflags");
if (ent_flags)
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Found %i misc_sound with no spawnflags\n", ent_flags);
ent_flags = check_entity_flags("misc_model", "spawnflags");
if (ent_flags)
snprintf(&message[strlen(message)], sizeof(message) - 1 - strlen(message), "Found %i misc_model with no spawnflags\n", ent_flags);

View file

@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#if !defined(INCLUDED_UFOAI_LEVEL_H)
#define INCLUDED_UFOAI_LEVEL_H
void assign_default_values_to_worldspawn (bool override, bool day, char **returnMsg);
void assign_default_values_to_worldspawn (bool override, char **returnMsg);
void check_map_values (char **returnMsg);
void get_team_count (const char *classname, int *count, int *team);