Author: sveinung
Date: Thu Nov 10 01:22:46 2016
New Revision: 34463

URL: http://svn.gna.org/viewcvs/freeciv?rev=34463&view=rev
Log:
A nation contradicts its group's absence.

See patch #7962

Modified:
    trunk/common/requirements.c

Modified: trunk/common/requirements.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=34463&r1=34462&r2=34463&view=diff
==============================================================================
--- trunk/common/requirements.c (original)
+++ trunk/common/requirements.c Thu Nov 10 01:22:46 2016
@@ -1017,6 +1017,32 @@
 }
 
 /**************************************************************************
+  Returns TRUE if the specified nation requirement contradicts the
+  specified nation group requirement.
+**************************************************************************/
+static bool nation_contra_group(const struct requirement *nation_req,
+                                const struct requirement *group_req)
+{
+  /* The input is sane. */
+  fc_assert_ret_val(nation_req->source.kind == VUT_NATION, FALSE);
+  fc_assert_ret_val(group_req->source.kind == VUT_NATIONGROUP, FALSE);
+
+  if (nation_req->range == REQ_RANGE_PLAYER
+      && group_req->range == REQ_RANGE_PLAYER) {
+    /* Applies to the same target building. */
+
+    if (nation_req->present && !group_req->present) {
+      /* The target nation can't be in the group. */
+      return nation_is_in_group(nation_req->source.value.nation,
+                                group_req->source.value.nationgroup);
+    }
+  }
+
+  /* No special knowledge. */
+  return FALSE;
+}
+
+/**************************************************************************
   Returns TRUE if req1 and req2 contradicts each other.
 
   TODO: If information about what entity each requirement type will be
@@ -1087,6 +1113,22 @@
         return req1->source.value.minmoves <= req2->source.value.minmoves;
       }
     }
+    break;
+  case VUT_NATION:
+    if (req2->source.kind == VUT_NATIONGROUP) {
+      return nation_contra_group(req1, req2);
+    }
+
+    /* No special knowledge. */
+    return FALSE;
+    break;
+  case VUT_NATIONGROUP:
+    if (req2->source.kind == VUT_NATION) {
+      return nation_contra_group(req2, req1);
+    }
+
+    /* No special knowledge. */
+    return FALSE;
     break;
   default:
     /* No special knowledge exists. The requirements aren't the exact


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

Reply via email to