Ejemplo n.º 1
0
void
MsnWepDlg::OnLoadout(AWEvent* event)
{
	if (!elem) return;

	ShipDesign* design   = (ShipDesign*) elem->GetDesign();
	ShipLoad*   shipload = 0;

	if (loadout_list && design) {
		int   index    = loadout_list->GetListIndex();
		Text  loadname = loadout_list->GetItemText(index);

		ListIter<ShipLoad> sl = (List<ShipLoad>&) design->loadouts;
		while (++sl) {
			if (sl->name == loadname) {
				shipload = sl.value();
			}
		}

		if (!shipload) return;

		if (lbl_weight) {
			char weight[32];
			sprintf_s(weight, "%d kg", (int) ((design->mass + shipload->mass) * 1000));
			lbl_weight->SetText(weight);
		}

		if (elem->Loadouts().size() < 1) {
			MissionLoad* l = new(__FILE__,__LINE__) MissionLoad(-1, shipload->name);
			elem->Loadouts().append(l);
		}
		else {
			ListIter<MissionLoad> l = elem->Loadouts();
			while (++l) {
				// if the player chooses a std loadout,
				// tell the sim loader to use a named
				// loadout from the ship design:
				l->SetName(shipload->name);
			}
		}

		int  nstations = design->hard_points.size();
		int* loadout   = shipload->load;

		for (int i = 0; i < 8; i++)
		loads[i] = -1;

		for (int i = 0; i < nstations; i++)
		loads[i + first_station] = PointIndexToLoad(i, loadout[i]);

		for (int i = 0; i < 8; i++) {
			for (int n = 0; n < 8; n++) {
				btn_load[i][n]->SetPicture(i == loads[n] ? led_on: led_off);
			}
		}
	}
}
Ejemplo n.º 2
0
void
MsnWepDlg::OnMount(AWEvent* event)
{
	int station = -1;
	int item    = -1;

	for (int i = 0; i < 8 && item < 0; i++) {
		for (int n = 0; n < 8 && station < 0; n++) {
			if (btn_load[i][n] == event->window) {
				station = n;
				item    = i;
			}
		}
	}

	if (item >= 0 && station >= 0) {
		if (loads[station] == item)
		item = -1;

		loads[station] = item;

		for (int n = 0; n < 8; n++) {
			btn_load[n][station]->SetPicture(n == item ? led_on : led_off);
		}

		if (elem) {
			int nstations = elem->GetDesign()->hard_points.size();

			if (elem->Loadouts().size() < 1) {
				MissionLoad* l = new(__FILE__,__LINE__) MissionLoad;
				elem->Loadouts().append(l);

				for (int n = 0; n < nstations; n++)
				l->SetStation(n, LoadToPointIndex(n));
			}
			else {
				ListIter<MissionLoad> l = elem->Loadouts();
				while (++l) {
					// if the player customizes the loadout,
					// tell the sim loader not to use a named
					// loadout from the ship design:
					l->SetName("");

					for (int n = 0; n < nstations; n++)
					l->SetStation(n, LoadToPointIndex(n));
				}
			}
		}
	}

	if (loadout_list)
	loadout_list->ClearSelection();

	if (lbl_weight && elem) {
		ShipDesign* d         = (ShipDesign*) elem->GetDesign();
		int         nstations = d->hard_points.size();
		double      mass      = d->mass;

		for (int n = 0; n < nstations; n++) {
			int item = loads[n+first_station];
			mass += d->hard_points[n]->GetCarryMass(item);
		}

		char weight[32];
		sprintf_s(weight, "%d kg", (int) (mass * 1000));
		lbl_weight->SetText(weight);
	}
}