Author: cazfi
Date: Mon Aug  8 10:50:59 2016
New Revision: 33511

URL: http://svn.gna.org/viewcvs/freeciv?rev=33511&view=rev
Log:
- Moved universal_value_init() from requirement.[ch] to new univ_value.[ch] in 
ruledit,
  and renamed it as universal_name_initial().
- Made universal_name_initial() to handle all universal kinds
- Made universal_name_initial() to return boolean telling if there was any 
value it could
  set with current ruleset
- Do not even add value types that have no possible values in the requirement 
type menu 

See patch #7561

Added:
    trunk/tools/ruledit/univ_value.c
    trunk/tools/ruledit/univ_value.h
Modified:
    trunk/common/requirements.c
    trunk/common/requirements.h
    trunk/tools/ruledit/Makefile.am
    trunk/tools/ruledit/req_edit.cpp

Modified: trunk/common/requirements.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=33511&r1=33510&r2=33511&view=diff
==============================================================================
--- trunk/common/requirements.c (original)
+++ trunk/common/requirements.c Mon Aug  8 10:50:59 2016
@@ -47,27 +47,6 @@
 typedef enum item_found (*universal_found)(const struct requirement *,
                                            const struct universal *);
 static universal_found universal_found_function[VUT_COUNT] = {NULL};
-
-/************************************************************************
-  Initialize universal value with a value suitable for the kind.
-************************************************************************/
-void universal_value_init(struct universal *src)
-{
-  /* TODO: Implement really */
-  switch (src->kind) {
-  case VUT_NONE:
-    /* Value of None should never be used */
-    break;
-  case VUT_ADVANCE:
-    src->value.advance = advance_by_number(A_NONE);
-    break;
-  case VUT_GOVERNMENT:
-    src->value.govern = game.government_during_revolution;
-    break;
-  default:
-    src->value.advance = NULL;
-  }
-}
 
 /**************************************************************************
   Parse requirement type (kind) and value strings into a universal

Modified: trunk/common/requirements.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.h?rev=33511&r1=33510&r2=33511&view=diff
==============================================================================
--- trunk/common/requirements.h (original)
+++ trunk/common/requirements.h Mon Aug  8 10:50:59 2016
@@ -139,7 +139,6 @@
                    const struct requirement_vector *vec);
 
 /* General universal functions. */
-void universal_value_init(struct universal *src);
 int universal_number(const struct universal *source);
 
 struct universal universal_by_number(const enum universals_n kind,

Modified: trunk/tools/ruledit/Makefile.am
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/Makefile.am?rev=33511&r1=33510&r2=33511&view=diff
==============================================================================
--- trunk/tools/ruledit/Makefile.am     (original)
+++ trunk/tools/ruledit/Makefile.am     Mon Aug  8 10:50:59 2016
@@ -58,6 +58,8 @@
                ruledit.h       \
                ruledit_qt.cpp  \
                ruledit_qt.h    \
+               univ_value.c    \
+               univ_value.h    \
                validity.c      \
                validity.h
 

Modified: trunk/tools/ruledit/req_edit.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/req_edit.cpp?rev=33511&r1=33510&r2=33511&view=diff
==============================================================================
--- trunk/tools/ruledit/req_edit.cpp    (original)
+++ trunk/tools/ruledit/req_edit.cpp    Mon Aug  8 10:50:59 2016
@@ -29,6 +29,7 @@
 
 // ruledit
 #include "ruledit.h"
+#include "univ_value.h"
 
 #include "req_edit.h"
 
@@ -65,7 +66,12 @@
   connect(menu, SIGNAL(triggered(QAction *)), this, SLOT(req_type_menu(QAction 
*)));
   edit_type_button->setMenu(menu);
   universals_iterate(univ_id) {
-    menu->addAction(universals_n_name(univ_id));
+    struct universal dummy;
+
+    dummy.kind = univ_id;
+    if (universal_value_initial(&dummy)) {
+      menu->addAction(universals_n_name(univ_id));
+    }
   } universals_iterate_end;
   active_layout->addWidget(edit_type_button, 1, 0);
 
@@ -174,7 +180,7 @@
 
   if (selected != nullptr) {
     selected->source.kind = univ;
-    universal_value_init(&selected->source);
+    universal_value_initial(&selected->source);
   }
 
   refresh();

Added: trunk/tools/ruledit/univ_value.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/univ_value.c?rev=33511&view=auto
==============================================================================
--- trunk/tools/ruledit/univ_value.c    (added)
+++ trunk/tools/ruledit/univ_value.c    Mon Aug  8 10:50:59 2016
@@ -0,0 +1,203 @@
+/***********************************************************************
+ Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+***********************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <fc_config.h>
+#endif
+
+/* common */
+#include "achievements.h"
+#include "game.h"
+#include "requirements.h"
+#include "specialist.h"
+#include "tech.h"
+#include "traderoutes.h"
+
+#include "univ_value.h"
+
+/************************************************************************
+  Initialize universal value with a value suitable for the kind.
+
+  Returns TRUE iff there's any values universal kind can have with
+  current ruleset.
+************************************************************************/
+bool universal_value_initial(struct universal *src)
+{
+  /* TODO: Implement really */
+  switch (src->kind) {
+  case VUT_NONE:
+    /* Value of None should never be used */
+    return TRUE;
+  case VUT_ADVANCE:
+    if (game.control.num_tech_types <= 0) {
+      return FALSE;
+    }
+    src->value.advance = advance_by_number(A_NONE);
+    return TRUE;
+  case VUT_GOVERNMENT:
+    src->value.govern = game.government_during_revolution;
+    return TRUE;
+  case VUT_IMPROVEMENT:
+    if (game.control.num_impr_types <= 0) {
+      return FALSE;
+    }
+    src->value.building = improvement_by_number(0);
+    return TRUE;
+  case VUT_TERRAIN:
+    src->value.terrain = terrain_by_number(0);
+    return TRUE;
+  case VUT_NATION:
+    if (game.control.nation_count <= 0) {
+      return FALSE;
+    }
+    src->value.nation = nation_by_number(0);
+    return TRUE;
+  case VUT_UTYPE:
+    if (game.control.num_unit_types <= 0) {
+      return FALSE;
+    }
+    src->value.utype = utype_by_number(0);
+    return TRUE;
+  case VUT_UTFLAG:
+    src->value.unitflag = (enum unit_type_flag_id)0;
+    return TRUE;
+  case VUT_UCLASS:
+    if (game.control.num_unit_classes <= 0) {
+      return FALSE;
+    }
+    src->value.uclass = uclass_by_number(0);
+    return TRUE;
+  case VUT_UCFLAG:
+    src->value.unitclassflag = (enum unit_class_flag_id)0;
+    return TRUE;
+  case VUT_OTYPE:
+    src->value.outputtype = (enum output_type_id)0;
+    return TRUE;
+  case VUT_SPECIALIST:
+    if (game.control.num_specialist_types <= 0) {
+      return FALSE;
+    }
+    src->value.specialist = specialist_by_number(0);
+    return TRUE;
+  case VUT_MINSIZE:
+    src->value.minsize = 0;
+    return TRUE;
+  case VUT_AI_LEVEL:
+    src->value.ai_level = AI_LEVEL_CHEATING;
+    return TRUE;
+  case VUT_TERRAINCLASS:
+    src->value.terrainclass = TC_LAND;
+    return TRUE;
+  case VUT_MINYEAR:
+    src->value.minyear = 0;
+    return TRUE;
+  case VUT_TERRAINALTER:
+    src->value.terrainalter = TA_CAN_IRRIGATE;
+    return TRUE;
+  case VUT_CITYTILE:
+    src->value.citytile = CITYT_CENTER;
+    return TRUE;
+  case VUT_GOOD:
+    if (game.control.num_goods_types <= 0) {
+      return FALSE;
+    }
+    src->value.good = goods_by_number(0);
+    return TRUE;
+  case VUT_TERRFLAG:
+    src->value.terrainflag = TER_NO_BARBS;
+    return TRUE;
+  case VUT_NATIONALITY:
+    if (game.control.nation_count <= 0) {
+      return FALSE;
+    }
+    src->value.nationality = nation_by_number(0);
+    return TRUE;
+  case VUT_BASEFLAG:
+    src->value.baseflag = BF_NOT_AGGRESSIVE;
+    return TRUE;
+  case VUT_ROADFLAG:
+    src->value.roadflag = RF_REQUIRES_BRIDGE;
+    return TRUE;
+  case VUT_EXTRA:
+    if (game.control.num_extra_types <= 0) {
+      return FALSE;
+    }
+    src->value.extra = extra_by_number(0);
+    return TRUE;
+  case VUT_TECHFLAG:
+    src->value.techflag = TF_BONUS_TECH;
+    return TRUE;
+  case VUT_ACHIEVEMENT:
+    if (game.control.num_achievement_types <= 0) {
+      return FALSE;
+    }
+    src->value.achievement = achievement_by_number(0);
+    return TRUE;
+  case VUT_DIPLREL:
+    src->value.diplrel = DS_WAR;
+    return TRUE;
+  case VUT_MAXTILEUNITS:
+    src->value.max_tile_units = 0;
+    return TRUE;
+  case VUT_STYLE:
+    if (game.control.num_styles <= 0) {
+      return FALSE;
+    }
+    src->value.style = style_by_number(0);
+    return TRUE;
+  case VUT_MINCULTURE:
+    src->value.minculture = 0;
+    return TRUE;
+  case VUT_UNITSTATE:
+    src->value.unit_state = USP_TRANSPORTED;
+    return TRUE;
+  case VUT_MINMOVES:
+    src->value.minmoves = 0;
+    return TRUE;
+  case VUT_MINVETERAN:
+    src->value.minveteran = 0;
+    return TRUE;
+  case VUT_MINHP:
+    src->value.min_hit_points = 0;
+    return TRUE;
+  case VUT_AGE:
+    src->value.age = 0;
+    return TRUE;
+  case VUT_NATIONGROUP:
+    if (nation_group_count() <= 0) {
+      return FALSE;
+    }
+    src->value.nationgroup = nation_group_by_number(0);
+    return TRUE;
+  case VUT_TOPO:
+    src->value.topo_property = TF_ISO;
+    return TRUE;
+  case VUT_IMPR_GENUS:
+    src->value.impr_genus = IG_IMPROVEMENT;
+    return TRUE;
+  case VUT_ACTION:
+    src->value.action = action_by_number(0);
+    return TRUE;
+  case VUT_MINTECHS:
+    src->value.min_techs = 0;
+    return TRUE;
+  case VUT_EXTRAFLAG:
+    src->value.extraflag = EF_NATIVE_TILE;
+    return TRUE;
+  case VUT_COUNT:
+    fc_assert(src->kind != VUT_COUNT);
+    return FALSE;
+  }
+
+  return FALSE;
+}

Added: trunk/tools/ruledit/univ_value.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/univ_value.h?rev=33511&view=auto
==============================================================================
--- trunk/tools/ruledit/univ_value.h    (added)
+++ trunk/tools/ruledit/univ_value.h    Mon Aug  8 10:50:59 2016
@@ -0,0 +1,26 @@
+/***********************************************************************
+ Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+***********************************************************************/
+#ifndef FC__UNIV_VALUE_H
+#define FC__UNIV_VALUE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+bool universal_value_initial(struct universal *src);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* FC__UNIV_VALUE_H */


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to