public boolean execute(UnitStats unit, PhysicalGameState pgs) {
		// obviously, but no harm checking for the umpteenth time
		if (unit.id == unitID) {
			boolean result = false;
			switch (type) {
				case MOVE:
					result = pgs.moveUnit(unit, targetX, targetY);
					break;
				case ATTACK:
					result = pgs.attackUnit(unit, targetX, targetY);
					break;
				case HARVEST:
					result = pgs.harvestUnit(unit, targetX, targetY);
					break;
				case RETURN:
					result = pgs.returnUnitHarvest(unit, targetX, targetY);
					break;
				case BUILD:
					result = pgs.buildUnit(unit, targetX, targetY, build);
					if (!result) {
						//pgs.restoreResources(unit.player, !unit.definition.is_building, build);
					}
					break;
				case UPGRADE:
					result = pgs.upgradeUnits(unit.player, build);
					break;
			}
			//if (!result) { System.out.println(targetX+"x"+targetY);System.exit(-1);}
			unit.last_action_success = result;
//			if (!result) {
//				System.out.println(unit.definition.label+"("+unit.id+") failed to execute action of type: "+type);
//			}
			return result;
		}
		return false;
	}