From 69209c38968c6f4066a772e0a51a2928749217de Mon Sep 17 00:00:00 2001 From: "FWoltermann@gmail.com" Date: Fri, 9 Dec 2011 19:00:23 +0000 Subject: Re-indenting the code to use standard tabs. Yes, I know this is pretty pointless, but who cares? --- Stars45/Sensor.cpp | 1280 ++++++++++++++++++++++++++-------------------------- 1 file changed, 640 insertions(+), 640 deletions(-) (limited to 'Stars45/Sensor.cpp') diff --git a/Stars45/Sensor.cpp b/Stars45/Sensor.cpp index 315d214..6c3d1cc 100644 --- a/Stars45/Sensor.cpp +++ b/Stars45/Sensor.cpp @@ -1,15 +1,15 @@ /* Project Starshatter 5.0 - Destroyer Studios LLC - Copyright © 1997-2007. All Rights Reserved. + Destroyer Studios LLC + Copyright © 1997-2007. All Rights Reserved. - SUBSYSTEM: Stars.exe - FILE: Sensor.cpp - AUTHOR: John DiCamillo + SUBSYSTEM: Stars.exe + FILE: Sensor.cpp + AUTHOR: John DiCamillo - OVERVIEW - ======== - Integrated (Passive and Active) Sensor Package class implementation + OVERVIEW + ======== + Integrated (Passive and Active) Sensor Package class implementation */ #include "MemDebug.h" @@ -34,41 +34,41 @@ const double SENSOR_THRESHOLD = 0.25; // +----------------------------------------------------------------------+ Sensor::Sensor() - : System(SENSOR, 1, "Dual Sensor Pkg", 1, 10, 10, 10), - mode(STD), target(0), - nsettings(0), range_index(0) +: System(SENSOR, 1, "Dual Sensor Pkg", 1, 10, 10, 10), +mode(STD), target(0), +nsettings(0), range_index(0) { - name = Game::GetText("sys.sensor"); - abrv = Game::GetText("sys.sensor.abrv"); + name = Game::GetText("sys.sensor"); + abrv = Game::GetText("sys.sensor.abrv"); - SetMode(mode); - power_flags = POWER_WATTS; + SetMode(mode); + power_flags = POWER_WATTS; - ZeroMemory(range_settings, sizeof(range_settings)); + ZeroMemory(range_settings, sizeof(range_settings)); } // +----------------------------------------------------------------------+ Sensor::Sensor(const Sensor& s) - : System(s), mode(STD), target(0), - nsettings(s.nsettings), range_index(0) +: System(s), mode(STD), target(0), +nsettings(s.nsettings), range_index(0) { - Mount(s); + Mount(s); - SetMode(mode); - power_flags = POWER_WATTS; + SetMode(mode); + power_flags = POWER_WATTS; - CopyMemory(range_settings, s.range_settings, sizeof(range_settings)); + CopyMemory(range_settings, s.range_settings, sizeof(range_settings)); - if (nsettings) - range_index = nsettings-1; + if (nsettings) + range_index = nsettings-1; } // +--------------------------------------------------------------------+ Sensor::~Sensor() { - ClearAllContacts(); + ClearAllContacts(); } // +--------------------------------------------------------------------+ @@ -76,7 +76,7 @@ Sensor::~Sensor() void Sensor::ClearAllContacts() { - contacts.destroy(); + contacts.destroy(); } // +--------------------------------------------------------------------+ @@ -84,67 +84,67 @@ Sensor::ClearAllContacts() double Sensor::GetBeamLimit() const { - if (mode == ACM) - return 15*DEGREES; + if (mode == ACM) + return 15*DEGREES; - if (mode <= GM) - return 45*DEGREES; + if (mode <= GM) + return 45*DEGREES; - return 175*DEGREES; + return 175*DEGREES; } double Sensor::GetBeamRange() const { - return (double) range_settings[range_index]; + return (double) range_settings[range_index]; } void Sensor::IncreaseRange() { - if (range_index < nsettings-1) - range_index++; - else - range_index = nsettings-1; + if (range_index < nsettings-1) + range_index++; + else + range_index = nsettings-1; } void Sensor::DecreaseRange() { - if (range_index > 0) - range_index--; - else - range_index = 0; + if (range_index > 0) + range_index--; + else + range_index = 0; } void Sensor::AddRange(double r) { - if (nsettings < 8) - range_settings[nsettings++] = (float) r; + if (nsettings < 8) + range_settings[nsettings++] = (float) r; - range_index = nsettings-1; + range_index = nsettings-1; } void Sensor::SetMode(Mode m) { - if (mode != m) { - // dump the contact list when changing in/out of GM: - if (mode == GM || m == GM) - ClearAllContacts(); - - // dump the current target on mode changes: - if (m <= GM) { - if (ship) - ship->DropTarget(); - - Ignore(target); - target = 0; - } - } - - mode = m; + if (mode != m) { + // dump the contact list when changing in/out of GM: + if (mode == GM || m == GM) + ClearAllContacts(); + + // dump the current target on mode changes: + if (m <= GM) { + if (ship) + ship->DropTarget(); + + Ignore(target); + target = 0; + } + } + + mode = m; } // +----------------------------------------------------------------------+ @@ -152,17 +152,17 @@ Sensor::SetMode(Mode m) bool Sensor::Update(SimObject* obj) { - if (obj == target) { - target = 0; - } + if (obj == target) { + target = 0; + } - return SimObserver::Update(obj); + return SimObserver::Update(obj); } const char* Sensor::GetObserverName() const { - return "Sensor"; + return "Sensor"; } // +--------------------------------------------------------------------+ @@ -170,139 +170,139 @@ Sensor::GetObserverName() const void Sensor::ExecFrame(double seconds) { - if (Game::Paused()) - return; - - System::ExecFrame(seconds); - - if (!IsPowerOn() || energy <= 0) { - ClearAllContacts(); - return; - } - - if (ship && ship->GetAIMode() < 2) { - // just pretend to work this frame: - energy = 0.0f; - return; - } - - if (ship && ship->GetRegion()) { - const Camera* cam = &ship->Cam(); - double az1 = -45*DEGREES; - double az2 = 45*DEGREES; - - if (mode > GM) { - az1 = -175*DEGREES; - az2 = 175*DEGREES; - } - - ListIter ship_iter(ship->GetRegion()->Ships()); - while (++ship_iter) { - Ship* c_ship = ship_iter.value(); - - if (c_ship != ship) { - ProcessContact(c_ship, az1, az2); - } - else { - Contact* c = FindContact(c_ship); - - if (!c) { - c = new(__FILE__,__LINE__) Contact(c_ship, 0.0f, 0.0f); - contacts.append(c); - } - - // update track: - if (c) { - c->loc = c_ship->Location(); - c->d_pas = 2.0f; - c->d_act = 2.0f; - - c->UpdateTrack(); - } - } - } - - ListIter threat_iter(ship->GetThreatList()); - while (++threat_iter) { - ProcessContact(threat_iter.value(), az1, az2); - } - - ListIter drone_iter(ship->GetRegion()->Drones()); - while (++drone_iter) { - ProcessContact(drone_iter.value(), az1, az2); - } - - List& track_list = ship->GetRegion()->TrackList(ship->GetIFF()); - ListIter c_iter(contacts); - - while (++c_iter) { - Contact* contact = c_iter.value(); - Ship* c_ship = contact->GetShip(); - Shot* c_shot = contact->GetShot(); - double c_life = -1; - - if (c_ship) { - c_life = c_ship->Life(); - - // look for quantum jumps and orbit transitions: - if (c_ship->GetRegion() != ship->GetRegion()) - c_life = 0; - } - - else if (c_shot) { - c_life = c_shot->Life(); - } - - else { - c_life = 0; - } - - if (contact->Age() < 0 || c_life == 0) { - delete c_iter.removeItem(); - } - - else if (ship && ship->GetIFF() >= 0 && ship->GetIFF() < 5) { - // update shared track database: - Contact* t = track_list.find(contact); - - if (c_ship) { - if (!t) { - Contact* track = new(__FILE__,__LINE__) Contact(c_ship, contact->d_pas, contact->d_act); - track->loc = c_ship->Location(); - track_list.append(track); - } - - else { - t->loc = c_ship->Location(); - t->Merge(contact); - t->UpdateTrack(); - } - } - - else if (c_shot) { - if (!t) { - Contact* track = new(__FILE__,__LINE__) Contact(c_shot, contact->d_pas, contact->d_act); - track->loc = c_shot->Location(); - track_list.append(track); - } - - else { - t->loc = c_shot->Location(); - t->Merge(contact); - t->UpdateTrack(); - } - } - } - } - - - if (mode == ACM) { - if (!ship->GetTarget()) - ship->LockTarget(SimObject::SIM_SHIP, true, true); - } - } - - energy = 0.0f; + if (Game::Paused()) + return; + + System::ExecFrame(seconds); + + if (!IsPowerOn() || energy <= 0) { + ClearAllContacts(); + return; + } + + if (ship && ship->GetAIMode() < 2) { + // just pretend to work this frame: + energy = 0.0f; + return; + } + + if (ship && ship->GetRegion()) { + const Camera* cam = &ship->Cam(); + double az1 = -45*DEGREES; + double az2 = 45*DEGREES; + + if (mode > GM) { + az1 = -175*DEGREES; + az2 = 175*DEGREES; + } + + ListIter ship_iter(ship->GetRegion()->Ships()); + while (++ship_iter) { + Ship* c_ship = ship_iter.value(); + + if (c_ship != ship) { + ProcessContact(c_ship, az1, az2); + } + else { + Contact* c = FindContact(c_ship); + + if (!c) { + c = new(__FILE__,__LINE__) Contact(c_ship, 0.0f, 0.0f); + contacts.append(c); + } + + // update track: + if (c) { + c->loc = c_ship->Location(); + c->d_pas = 2.0f; + c->d_act = 2.0f; + + c->UpdateTrack(); + } + } + } + + ListIter threat_iter(ship->GetThreatList()); + while (++threat_iter) { + ProcessContact(threat_iter.value(), az1, az2); + } + + ListIter drone_iter(ship->GetRegion()->Drones()); + while (++drone_iter) { + ProcessContact(drone_iter.value(), az1, az2); + } + + List& track_list = ship->GetRegion()->TrackList(ship->GetIFF()); + ListIter c_iter(contacts); + + while (++c_iter) { + Contact* contact = c_iter.value(); + Ship* c_ship = contact->GetShip(); + Shot* c_shot = contact->GetShot(); + double c_life = -1; + + if (c_ship) { + c_life = c_ship->Life(); + + // look for quantum jumps and orbit transitions: + if (c_ship->GetRegion() != ship->GetRegion()) + c_life = 0; + } + + else if (c_shot) { + c_life = c_shot->Life(); + } + + else { + c_life = 0; + } + + if (contact->Age() < 0 || c_life == 0) { + delete c_iter.removeItem(); + } + + else if (ship && ship->GetIFF() >= 0 && ship->GetIFF() < 5) { + // update shared track database: + Contact* t = track_list.find(contact); + + if (c_ship) { + if (!t) { + Contact* track = new(__FILE__,__LINE__) Contact(c_ship, contact->d_pas, contact->d_act); + track->loc = c_ship->Location(); + track_list.append(track); + } + + else { + t->loc = c_ship->Location(); + t->Merge(contact); + t->UpdateTrack(); + } + } + + else if (c_shot) { + if (!t) { + Contact* track = new(__FILE__,__LINE__) Contact(c_shot, contact->d_pas, contact->d_act); + track->loc = c_shot->Location(); + track_list.append(track); + } + + else { + t->loc = c_shot->Location(); + t->Merge(contact); + t->UpdateTrack(); + } + } + } + } + + + if (mode == ACM) { + if (!ship->GetTarget()) + ship->LockTarget(SimObject::SIM_SHIP, true, true); + } + } + + energy = 0.0f; } // +--------------------------------------------------------------------+ @@ -310,146 +310,146 @@ Sensor::ExecFrame(double seconds) void Sensor::ProcessContact(Ship* c_ship, double az1, double az2) { - if (c_ship->IsNetObserver()) - return; - - double sensor_range = GetBeamRange(); - - // translate: - const Camera* cam = &ship->Cam(); - Point targ_pt = c_ship->Location() - ship->Location(); - - // rotate: - double tx = targ_pt * cam->vrt(); - double ty = targ_pt * cam->vup(); - double tz = targ_pt * cam->vpn(); - - // convert to spherical coords: - double rng = targ_pt.length(); - double az = asin(fabs(tx) / rng); - double el = asin(fabs(ty) / rng); - if (tx < 0) az = -az; - if (ty < 0) el = -el; - - double min_range = rng; - Drone* probe = ship->GetProbe(); - bool probescan = false; - - if (ship->GetIFF() == c_ship->GetIFF()) { - min_range = 1; - } - - else if (probe) { - Point probe_pt = c_ship->Location() - probe->Location(); - double prng = probe_pt.length(); - - if (prng < probe->Design()->lethal_radius && prng < rng) { - min_range = prng; - probescan = true; - } - } - - bool vis = tz > 1 && (c_ship->Radius()/rng > 0.001); - bool threat = (c_ship->Life() != 0 && - c_ship->GetIFF() && - c_ship->GetIFF() != ship->GetIFF() && - c_ship->GetEMCON() > 2 && - c_ship->IsTracking(ship)); - - if (!threat) { - if (mode == GM && !c_ship->IsGroundUnit()) - return; - - if (mode != GM && c_ship->IsGroundUnit()) - return; - - if (min_range > sensor_range || min_range > c_ship->Design()->detet) { - if (c_ship == target) { - ship->DropTarget(); - Ignore(target); - target = 0; - } - - return; - } - } - - // clip: - if (threat || vis || mode >= PST || tz > 1) { - - // correct az/el for back hemisphere: - if (tz < 0) { - if (az < 0) az = -PI - az; - else az = PI - az; - } - - double d_pas = 0; - double d_act = 0; - double effectivity = energy/capacity * availability; - - // did this contact get scanned this frame? - if (effectivity > SENSOR_THRESHOLD) { - if (az >= az1 && az <= az2 && (mode >= PST || fabs(el) < 45*DEGREES)) { - double passive_range_limit = 500e3; - if (c_ship->Design()->detet > passive_range_limit) - passive_range_limit = c_ship->Design()->detet; - - d_pas = c_ship->PCS() * effectivity * (1 - min_range/passive_range_limit); - - if (d_pas < 0) - d_pas = 0; - - if (probescan) { - double max_range = probe->Design()->lethal_radius; - d_act = c_ship->ACS() * (1 - min_range/max_range); - } - - else if (mode != PAS && mode != PST) { - double max_range = sensor_range; - d_act = c_ship->ACS() * effectivity * (1 - min_range/max_range); - } - - if (d_act < 0) - d_act = 0; - } - } - - // yes, update or add new contact: - if (threat || vis || d_pas > SENSOR_THRESHOLD || d_act > SENSOR_THRESHOLD) { - Element* elem = c_ship->GetElement(); - CombatUnit* unit = c_ship->GetCombatUnit(); - - if (elem && ship && elem->GetIFF() != ship->GetIFF() && elem->IntelLevel() < Intel::LOCATED) { - elem->SetIntelLevel(Intel::LOCATED); - } - - if (unit && ship && unit->GetIFF() != ship->GetIFF()) { - CombatGroup* group = unit->GetCombatGroup(); - - if (group && group->IntelLevel() < Intel::LOCATED && - group->IntelLevel() > Intel::RESERVE) { - group->SetIntelLevel(Intel::LOCATED); - } - } - - Contact* c = FindContact(c_ship); - - if (!c) { - c = new(__FILE__,__LINE__) Contact(c_ship, 0.0f, 0.0f); - contacts.append(c); - } - - // update track: - if (c) { - c->loc = c_ship->Location(); - c->d_pas = (float) d_pas; - c->d_act = (float) d_act; - c->probe = probescan; - - c->UpdateTrack(); - } - } - } + if (c_ship->IsNetObserver()) + return; + + double sensor_range = GetBeamRange(); + + // translate: + const Camera* cam = &ship->Cam(); + Point targ_pt = c_ship->Location() - ship->Location(); + + // rotate: + double tx = targ_pt * cam->vrt(); + double ty = targ_pt * cam->vup(); + double tz = targ_pt * cam->vpn(); + + // convert to spherical coords: + double rng = targ_pt.length(); + double az = asin(fabs(tx) / rng); + double el = asin(fabs(ty) / rng); + if (tx < 0) az = -az; + if (ty < 0) el = -el; + + double min_range = rng; + Drone* probe = ship->GetProbe(); + bool probescan = false; + + if (ship->GetIFF() == c_ship->GetIFF()) { + min_range = 1; + } + + else if (probe) { + Point probe_pt = c_ship->Location() - probe->Location(); + double prng = probe_pt.length(); + + if (prng < probe->Design()->lethal_radius && prng < rng) { + min_range = prng; + probescan = true; + } + } + + bool vis = tz > 1 && (c_ship->Radius()/rng > 0.001); + bool threat = (c_ship->Life() != 0 && + c_ship->GetIFF() && + c_ship->GetIFF() != ship->GetIFF() && + c_ship->GetEMCON() > 2 && + c_ship->IsTracking(ship)); + + if (!threat) { + if (mode == GM && !c_ship->IsGroundUnit()) + return; + + if (mode != GM && c_ship->IsGroundUnit()) + return; + + if (min_range > sensor_range || min_range > c_ship->Design()->detet) { + if (c_ship == target) { + ship->DropTarget(); + Ignore(target); + target = 0; + } + + return; + } + } + + // clip: + if (threat || vis || mode >= PST || tz > 1) { + + // correct az/el for back hemisphere: + if (tz < 0) { + if (az < 0) az = -PI - az; + else az = PI - az; + } + + double d_pas = 0; + double d_act = 0; + double effectivity = energy/capacity * availability; + + // did this contact get scanned this frame? + if (effectivity > SENSOR_THRESHOLD) { + if (az >= az1 && az <= az2 && (mode >= PST || fabs(el) < 45*DEGREES)) { + double passive_range_limit = 500e3; + if (c_ship->Design()->detet > passive_range_limit) + passive_range_limit = c_ship->Design()->detet; + + d_pas = c_ship->PCS() * effectivity * (1 - min_range/passive_range_limit); + + if (d_pas < 0) + d_pas = 0; + + if (probescan) { + double max_range = probe->Design()->lethal_radius; + d_act = c_ship->ACS() * (1 - min_range/max_range); + } + + else if (mode != PAS && mode != PST) { + double max_range = sensor_range; + d_act = c_ship->ACS() * effectivity * (1 - min_range/max_range); + } + + if (d_act < 0) + d_act = 0; + } + } + + // yes, update or add new contact: + if (threat || vis || d_pas > SENSOR_THRESHOLD || d_act > SENSOR_THRESHOLD) { + Element* elem = c_ship->GetElement(); + CombatUnit* unit = c_ship->GetCombatUnit(); + + if (elem && ship && elem->GetIFF() != ship->GetIFF() && elem->IntelLevel() < Intel::LOCATED) { + elem->SetIntelLevel(Intel::LOCATED); + } + + if (unit && ship && unit->GetIFF() != ship->GetIFF()) { + CombatGroup* group = unit->GetCombatGroup(); + + if (group && group->IntelLevel() < Intel::LOCATED && + group->IntelLevel() > Intel::RESERVE) { + group->SetIntelLevel(Intel::LOCATED); + } + } + + Contact* c = FindContact(c_ship); + + if (!c) { + c = new(__FILE__,__LINE__) Contact(c_ship, 0.0f, 0.0f); + contacts.append(c); + } + + // update track: + if (c) { + c->loc = c_ship->Location(); + c->d_pas = (float) d_pas; + c->d_act = (float) d_act; + c->probe = probescan; + + c->UpdateTrack(); + } + } + } } // +--------------------------------------------------------------------+ @@ -457,104 +457,104 @@ Sensor::ProcessContact(Ship* c_ship, double az1, double az2) void Sensor::ProcessContact(Shot* c_shot, double az1, double az2) { - double sensor_range = GetBeamRange(); - - if (c_shot->IsPrimary() || c_shot->IsDecoy()) - return; - - // translate: - const Camera* cam = &ship->Cam(); - Point targ_pt = c_shot->Location() - ship->Location(); - - // rotate: - double tx = targ_pt * cam->vrt(); - double ty = targ_pt * cam->vup(); - double tz = targ_pt * cam->vpn(); - - // convert to spherical coords: - double rng = targ_pt.length(); - double az = asin(fabs(tx) / rng); - double el = asin(fabs(ty) / rng); - if (tx < 0) az = -az; - if (ty < 0) el = -el; - - bool vis = tz > 1 && (c_shot->Radius()/rng > 0.001); - bool threat = (c_shot->IsTracking(ship)); - - // clip: - if (threat || vis || ((mode >= PST || tz > 1) && rng <= sensor_range)) { - - // correct az/el for back hemisphere: - if (tz < 0) { - if (az < 0) az = -PI - az; - else az = PI - az; - } - - double d_pas = 0; - double d_act = 0; - double effectivity = energy/capacity * availability; - - // did this contact get scanned this frame? - if (effectivity > SENSOR_THRESHOLD) { - if (az >= az1 && az <= az2 && (mode >= PST || fabs(el) < 45*DEGREES)) { - if (rng < sensor_range/2) - d_pas = 1.5; - else - d_pas = 0.5; - - if (mode != PAS && mode != PST) - d_act = effectivity * (1 - rng/sensor_range); - - if (d_act < 0) - d_act = 0; - } - } - - // yes, update or add new contact: - if (threat || vis || d_pas > SENSOR_THRESHOLD || d_act > SENSOR_THRESHOLD) { - Contact* c = FindContact(c_shot); - - if (!c) { - c = new(__FILE__,__LINE__) Contact(c_shot, 0.0f, 0.0f); - contacts.append(c); - } - - // update track: - if (c) { - c->loc = c_shot->Location(); - c->d_pas = (float) d_pas; - c->d_act = (float) d_act; - - c->UpdateTrack(); - } - } - } + double sensor_range = GetBeamRange(); + + if (c_shot->IsPrimary() || c_shot->IsDecoy()) + return; + + // translate: + const Camera* cam = &ship->Cam(); + Point targ_pt = c_shot->Location() - ship->Location(); + + // rotate: + double tx = targ_pt * cam->vrt(); + double ty = targ_pt * cam->vup(); + double tz = targ_pt * cam->vpn(); + + // convert to spherical coords: + double rng = targ_pt.length(); + double az = asin(fabs(tx) / rng); + double el = asin(fabs(ty) / rng); + if (tx < 0) az = -az; + if (ty < 0) el = -el; + + bool vis = tz > 1 && (c_shot->Radius()/rng > 0.001); + bool threat = (c_shot->IsTracking(ship)); + + // clip: + if (threat || vis || ((mode >= PST || tz > 1) && rng <= sensor_range)) { + + // correct az/el for back hemisphere: + if (tz < 0) { + if (az < 0) az = -PI - az; + else az = PI - az; + } + + double d_pas = 0; + double d_act = 0; + double effectivity = energy/capacity * availability; + + // did this contact get scanned this frame? + if (effectivity > SENSOR_THRESHOLD) { + if (az >= az1 && az <= az2 && (mode >= PST || fabs(el) < 45*DEGREES)) { + if (rng < sensor_range/2) + d_pas = 1.5; + else + d_pas = 0.5; + + if (mode != PAS && mode != PST) + d_act = effectivity * (1 - rng/sensor_range); + + if (d_act < 0) + d_act = 0; + } + } + + // yes, update or add new contact: + if (threat || vis || d_pas > SENSOR_THRESHOLD || d_act > SENSOR_THRESHOLD) { + Contact* c = FindContact(c_shot); + + if (!c) { + c = new(__FILE__,__LINE__) Contact(c_shot, 0.0f, 0.0f); + contacts.append(c); + } + + // update track: + if (c) { + c->loc = c_shot->Location(); + c->d_pas = (float) d_pas; + c->d_act = (float) d_act; + + c->UpdateTrack(); + } + } + } } Contact* Sensor::FindContact(Ship* s) { - ListIter iter(contacts); - while (++iter) { - Contact* c = iter.value(); - if (c->GetShip() == s) - return c; - } - - return 0; + ListIter iter(contacts); + while (++iter) { + Contact* c = iter.value(); + if (c->GetShip() == s) + return c; + } + + return 0; } Contact* Sensor::FindContact(Shot* s) { - ListIter iter(contacts); - while (++iter) { - Contact* c = iter.value(); - if (c->GetShot() == s) - return c; - } - - return 0; + ListIter iter(contacts); + while (++iter) { + Contact* c = iter.value(); + if (c->GetShot() == s) + return c; + } + + return 0; } // +--------------------------------------------------------------------+ @@ -562,23 +562,23 @@ Sensor::FindContact(Shot* s) bool Sensor::IsTracking(SimObject* tgt) { - if (tgt && mode != GM && mode != PAS && mode != PST && IsPowerOn()) { - if (tgt == target) - return true; + if (tgt && mode != GM && mode != PAS && mode != PST && IsPowerOn()) { + if (tgt == target) + return true; - Contact* c = 0; + Contact* c = 0; - if (tgt->Type() == SimObject::SIM_SHIP) { - c = FindContact((Ship*) tgt); - } - else { - c = FindContact((Shot*) tgt); - } + if (tgt->Type() == SimObject::SIM_SHIP) { + c = FindContact((Ship*) tgt); + } + else { + c = FindContact((Shot*) tgt); + } - return (c != 0 && c->ActReturn() > SENSOR_THRESHOLD && !c->IsProbed()); - } + return (c != 0 && c->ActReturn() > SENSOR_THRESHOLD && !c->IsProbed()); + } - return false; + return false; } // +--------------------------------------------------------------------+ @@ -586,118 +586,118 @@ Sensor::IsTracking(SimObject* tgt) const double sensor_lock_threshold = 0.5; struct TargetOffset { - static const char* TYPENAME() { return "TargetOffset"; } + static const char* TYPENAME() { return "TargetOffset"; } - SimObject* target; - double offset; + SimObject* target; + double offset; - TargetOffset() : target(0), offset(10) { } - TargetOffset(SimObject* t, double o) : target(t), offset(o) { } - int operator< (const TargetOffset& o) const { return offset < o.offset; } - int operator<=(const TargetOffset& o) const { return offset <= o.offset; } - int operator==(const TargetOffset& o) const { return offset == o.offset; } + TargetOffset() : target(0), offset(10) { } + TargetOffset(SimObject* t, double o) : target(t), offset(o) { } + int operator< (const TargetOffset& o) const { return offset < o.offset; } + int operator<=(const TargetOffset& o) const { return offset <= o.offset; } + int operator==(const TargetOffset& o) const { return offset == o.offset; } }; SimObject* Sensor::LockTarget(int type, bool closest, bool hostile) { - if (!ship || ship->GetEMCON() < 3) { - Ignore(target); - target = 0; - return target; - } - - SimObject* test = 0; - ListIter contact(ship->ContactList()); - - List targets; - - while (++contact) { - if (type == SimObject::SIM_SHIP) - test = contact->GetShip(); - else - test = contact->GetShot(); - - if (!test) - continue; - - // do not target own missiles: - if (contact->GetShot() && contact->GetShot()->Owner() == ship) - continue; - - double tgt_range = contact->Range(ship); - - // do not target ships outside of detet range: - if (contact->GetShip() && contact->GetShip()->Design()->detet < tgt_range) - continue; - - double d_pas = contact->PasReturn(); - double d_act = contact->ActReturn(); - bool vis = contact->Visible(ship) || contact->Threat(ship); - - if (!vis && d_pas < sensor_lock_threshold && d_act < sensor_lock_threshold) - continue; - - if (closest) { - if (hostile && (contact->GetIFF(ship) == 0 || contact->GetIFF(ship) == ship->GetIFF())) - continue; - - targets.append(new(__FILE__,__LINE__) TargetOffset(test, tgt_range)); - } - - // clip: - else if (contact->InFront(ship)) { - double az, el, rng; - - contact->GetBearing(ship, az, el, rng); - az = fabs(az / PI); - el = fabs(el / PI); - - if (az <= 0.2 && el <= 0.2) - targets.append(new(__FILE__,__LINE__) TargetOffset(test, az+el)); - } - } - - targets.sort(); - - if (target) { - int index = 100000; - int i = 0; - - if (targets.size() > 0) { - ListIter iter(targets); - while (++iter) { - if (iter->target == target) { - index = i; - break; - } - - i++; - } - - if (index < targets.size()-1) - index++; - else - index = 0; - - target = targets[index]->target; - Observe(target); - } - } - else if (targets.size() > 0) { - target = targets[0]->target; - Observe(target); - } - else { - target = 0; - } - - targets.destroy(); - - if (target && mode < STD) - mode = STD; - - return target; + if (!ship || ship->GetEMCON() < 3) { + Ignore(target); + target = 0; + return target; + } + + SimObject* test = 0; + ListIter contact(ship->ContactList()); + + List targets; + + while (++contact) { + if (type == SimObject::SIM_SHIP) + test = contact->GetShip(); + else + test = contact->GetShot(); + + if (!test) + continue; + + // do not target own missiles: + if (contact->GetShot() && contact->GetShot()->Owner() == ship) + continue; + + double tgt_range = contact->Range(ship); + + // do not target ships outside of detet range: + if (contact->GetShip() && contact->GetShip()->Design()->detet < tgt_range) + continue; + + double d_pas = contact->PasReturn(); + double d_act = contact->ActReturn(); + bool vis = contact->Visible(ship) || contact->Threat(ship); + + if (!vis && d_pas < sensor_lock_threshold && d_act < sensor_lock_threshold) + continue; + + if (closest) { + if (hostile && (contact->GetIFF(ship) == 0 || contact->GetIFF(ship) == ship->GetIFF())) + continue; + + targets.append(new(__FILE__,__LINE__) TargetOffset(test, tgt_range)); + } + + // clip: + else if (contact->InFront(ship)) { + double az, el, rng; + + contact->GetBearing(ship, az, el, rng); + az = fabs(az / PI); + el = fabs(el / PI); + + if (az <= 0.2 && el <= 0.2) + targets.append(new(__FILE__,__LINE__) TargetOffset(test, az+el)); + } + } + + targets.sort(); + + if (target) { + int index = 100000; + int i = 0; + + if (targets.size() > 0) { + ListIter iter(targets); + while (++iter) { + if (iter->target == target) { + index = i; + break; + } + + i++; + } + + if (index < targets.size()-1) + index++; + else + index = 0; + + target = targets[index]->target; + Observe(target); + } + } + else if (targets.size() > 0) { + target = targets[0]->target; + Observe(target); + } + else { + target = 0; + } + + targets.destroy(); + + if (target && mode < STD) + mode = STD; + + return target; } // +--------------------------------------------------------------------+ @@ -705,43 +705,43 @@ Sensor::LockTarget(int type, bool closest, bool hostile) SimObject* Sensor::LockTarget(SimObject* candidate) { - Ignore(target); - target = 0; + Ignore(target); + target = 0; - if (ship->GetEMCON() < 3) - return target; + if (ship->GetEMCON() < 3) + return target; - if (!candidate) - return target; + if (!candidate) + return target; - int type = candidate->Type(); - SimObject* test = 0; - ListIter contact(ship->ContactList()); + int type = candidate->Type(); + SimObject* test = 0; + ListIter contact(ship->ContactList()); - while (++contact) { - if (type == SimObject::SIM_SHIP) - test = contact->GetShip(); - else - test = contact->GetShot(); + while (++contact) { + if (type == SimObject::SIM_SHIP) + test = contact->GetShip(); + else + test = contact->GetShot(); - if (test == candidate) { - double d_pas = contact->PasReturn(); - double d_act = contact->ActReturn(); - bool vis = contact->Visible(ship) || contact->Threat(ship); + if (test == candidate) { + double d_pas = contact->PasReturn(); + double d_act = contact->ActReturn(); + bool vis = contact->Visible(ship) || contact->Threat(ship); - if (vis || d_pas > sensor_lock_threshold || d_act > sensor_lock_threshold) { - target = test; - Observe(target); - } + if (vis || d_pas > sensor_lock_threshold || d_act > sensor_lock_threshold) { + target = test; + Observe(target); + } - break; - } - } + break; + } + } - if (target && mode < STD) - mode = STD; + if (target && mode < STD) + mode = STD; - return target; + return target; } // +--------------------------------------------------------------------+ @@ -749,33 +749,33 @@ Sensor::LockTarget(SimObject* candidate) SimObject* Sensor::AcquirePassiveTargetForMissile() { - SimObject* pick = 0; - double min_off = 2; + SimObject* pick = 0; + double min_off = 2; - ListIter contact(ship->ContactList()); + ListIter contact(ship->ContactList()); - while (++contact) { - SimObject* test = contact->GetShip(); - double d = contact->PasReturn(); + while (++contact) { + SimObject* test = contact->GetShip(); + double d = contact->PasReturn(); - if (d < 1) continue; + if (d < 1) continue; - // clip: - if (contact->InFront(ship)) { - double az, el, rng; + // clip: + if (contact->InFront(ship)) { + double az, el, rng; - contact->GetBearing(ship, az, el, rng); - az = fabs(az / PI); - el = fabs(el / PI); + contact->GetBearing(ship, az, el, rng); + az = fabs(az / PI); + el = fabs(el / PI); - if (az + el < min_off) { - min_off = az + el; - pick = test; - } - } - } + if (az + el < min_off) { + min_off = az + el; + pick = test; + } + } + } - return pick; + return pick; } // +--------------------------------------------------------------------+ @@ -783,32 +783,32 @@ Sensor::AcquirePassiveTargetForMissile() SimObject* Sensor::AcquireActiveTargetForMissile() { - SimObject* pick = 0; - double min_off = 2; + SimObject* pick = 0; + double min_off = 2; - ListIter contact(ship->ContactList()); + ListIter contact(ship->ContactList()); - while (++contact) { - SimObject* test = contact->GetShip(); - double d = contact->ActReturn(); + while (++contact) { + SimObject* test = contact->GetShip(); + double d = contact->ActReturn(); - if (d < 1) continue; + if (d < 1) continue; - if (contact->InFront(ship)) { - double az, el, rng; + if (contact->InFront(ship)) { + double az, el, rng; - contact->GetBearing(ship, az, el, rng); - az = fabs(az / PI); - el = fabs(el / PI); + contact->GetBearing(ship, az, el, rng); + az = fabs(az / PI); + el = fabs(el / PI); - if (az + el < min_off) { - min_off = az + el; - pick = test; - } - } - } + if (az + el < min_off) { + min_off = az + el; + pick = test; + } + } + } - return pick; + return pick; } // +--------------------------------------------------------------------+ @@ -816,35 +816,35 @@ Sensor::AcquireActiveTargetForMissile() void Sensor::DoEMCON(int index) { - int e = GetEMCONPower(index); - - if (power_level * 100 > e || emcon != index) { - if (e == 0) { - PowerOff(); - } - else if (emcon != index) { - PowerOn(); - - if (power_level * 100 > e) { - SetPowerLevel(e); - } - - if (emcon == 3) { - if (GetMode() < PST) - SetMode(STD); - else - SetMode(CST); - } - else { - int m = GetMode(); - if (m < PST && m > PAS) - SetMode(Sensor::PAS); - else if (m == CST) - SetMode(PST); - } - } - } - - emcon = index; + int e = GetEMCONPower(index); + + if (power_level * 100 > e || emcon != index) { + if (e == 0) { + PowerOff(); + } + else if (emcon != index) { + PowerOn(); + + if (power_level * 100 > e) { + SetPowerLevel(e); + } + + if (emcon == 3) { + if (GetMode() < PST) + SetMode(STD); + else + SetMode(CST); + } + else { + int m = GetMode(); + if (m < PST && m > PAS) + SetMode(Sensor::PAS); + else if (m == CST) + SetMode(PST); + } + } + } + + emcon = index; } -- cgit v1.1