void CFSShip::ShipStatusDocked(IstationIGC* pstation) { StationID stationID = pstation->GetObjectID(); SectorID sectorID = pstation->GetCluster()->GetObjectID(); HullID hullID; { IhullTypeIGC* pht = GetIGCShip()->GetBaseHullType(); hullID = pht ? pht->GetObjectID() : NA; } IsideIGC* psideMe = GetIGCShip()->GetSide(); for (SideLinkIGC* psl = GetMission()->GetIGCMission()->GetSides()->first(); (psl != NULL); psl = psl->next()) { IsideIGC* pside = psl->data(); if ((pside == psideMe || pside->AlliedSides(pside,psideMe)) || // #ALLY Imago 7/8/09 VISIBILITY? (GetIGCShip()->SeenBySide(pside) && pstation->SeenBySide(pside))) { SideID sideID = pside->GetObjectID(); ShipStatus* pss = &(m_rgShipStatus[sideID]); pss->SetStateTime(g.timeNow.clock()); pss->SetState(c_ssDocked); pss->SetParentID(NA); pss->SetStationID(stationID); pss->SetSectorID(sectorID); pss->SetHullID(hullID); //Adjust the ship status for all of the children as well { for (ShipLinkIGC* psl = GetIGCShip()->GetChildShips()->first(); (psl != NULL); psl = psl->next()) { IshipIGC* pship = psl->data(); ShipStatus* pss = ((CFSShip*)(pship->GetPrivateData()))->GetShipStatus(sideID); assert ((pship->GetTurretID() == NA) ? (pss->GetState() == c_ssObserver) : (pss->GetState() == c_ssTurret)); assert (pss->GetParentID() == GetIGCShip()->GetObjectID()); assert (pss->GetHullID() == NA); pss->SetStationID(stationID); pss->SetSectorID(sectorID); } } } } }
void CFSShip::ShipStatusSpotted(IsideIGC* pside) { SideID sideID = pside->GetObjectID(); SectorID sectorID; { IclusterIGC* pcluster = GetIGCShip()->GetCluster(); if (pcluster == NULL) { IstationIGC* pstation = GetIGCShip()->GetStation(); assert (pstation); pcluster = pstation->GetCluster(); } sectorID = pcluster->GetObjectID(); } ShipStatus* pss = &m_rgShipStatus[sideID]; pss->SetStateTime(g.timeNow.clock()); pss->SetState(c_ssFlying); pss->SetParentID(NA); pss->SetHullID(GetIGCShip()->GetHullType()->GetObjectID()); pss->SetSectorID(sectorID); //Flag that we have been detected as well IsideIGC* mySide = GetSide(); SideID mySideID = mySide->GetObjectID(); if (mySide != pside && !mySide->AlliedSides(mySide, pside)) //#ALLY -was: mySide != pside (Imago fixed 7/8/09) m_rgShipStatus[mySideID].SetDetected(true); //Adjust the ship status for all of the children as well { for (ShipLinkIGC* psl = GetIGCShip()->GetChildShips()->first(); (psl != NULL); psl = psl->next()) { IshipIGC* pship = psl->data(); CFSShip* pfsship = ((CFSShip*)(pship->GetPrivateData())); ShipStatus* pss = pfsship->GetShipStatus(sideID); pss->SetState((pship->GetTurretID() == NA) ? c_ssObserver : c_ssTurret); pss->SetHullID(NA); pss->SetSectorID(sectorID); pss->SetParentID(GetShipID()); if (mySide != pside && !mySide->AlliedSides(mySide, pside)) //#ALLY -was != (Imago fixed 7/8/09) pfsship->GetShipStatus(mySideID)->SetDetected(true); } } }
void CweaponIGC::SetMountID(Mount newVal) { assert(m_ship); if (newVal != m_mountID) { Deactivate(); if (m_pshipGunner) SetGunner(NULL); m_ship->MountPart(this, newVal, &m_mountID); if (newVal >= 0) { //Get the corresponding hardpoint: we know one exists because the //ship allowed the part to be mounted. const IhullTypeIGC* pht = m_ship->GetBaseHullType(); assert(pht); m_pposition = &(pht->GetWeaponPosition(newVal)); m_porientation = &(pht->GetWeaponOrientation(newVal)); //Is there a turret gunner in this position (who does not have a gun) { for (ShipLinkIGC* psl = m_ship->GetChildShips()->first(); (psl != NULL); psl = psl->next()) { IshipIGC* pship = psl->data(); if (pship->GetTurretID() == newVal) { SetGunner(pship); break; } } } } } }