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