/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2014, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure, Markus Armbruster
*
* Empire is free software: you can redistribute it and/or modify
*
* Known contributors to this file:
* Ron Koenderink, 2007
- * Markus Armbruster, 2009-2011
+ * Markus Armbruster, 2009-2013
*/
#include <config.h>
}
}
+/*
+ * Teleport UNIT to X,Y.
+ * If UNIT's mission op-area is centered on it, keep it centered.
+ */
+void
+unit_teleport(struct empobj *unit, coord x, coord y)
+{
+ if (unit->opx == unit->x && unit->opy == unit->y) {
+ unit->opx = x;
+ unit->opy = y;
+ }
+ unit->x = x;
+ unit->y = y;
+}
+
/*
* Update cargo of CARRIER for movement or destruction.
* If the carrier is destroyed, destroy its cargo (planes, land units,
for (cargo_type = EF_PLANE; cargo_type <= EF_NUKE; cargo_type++) {
snxtitem_cargo(&ni, cargo_type, carrier->ef_type, carrier->uid);
while (nxtitem(&ni, &obj)) {
- if (!carrier->own) {
+ if (carrier->own)
+ unit_teleport(&obj.gen, carrier->x, carrier->y);
+ else {
mpr(obj.gen.own, "%s lost!\n", unit_nameof(&obj.gen));
obj.gen.effic = 0;
- } else {
- /* mission op-area centered on the obj travels with it */
- if (obj.gen.opx == obj.gen.x && obj.gen.opy == obj.gen.y) {
- obj.gen.opx = carrier->x;
- obj.gen.opy = carrier->y;
- }
- obj.gen.x = carrier->x;
- obj.gen.y = carrier->y;
}
put_empobj(cargo_type, obj.gen.uid, &obj);
n++;