예제 #1
0
 private static bool Override_DestroySite(GeoSite __instance)
 {
     try {
         if (DefenseMission == null)
         {
             return(true);
         }
         var attacker = DefenseMission.GetEnemyFaction();
         Verbo("{0} loss to {1}.", __instance.Name, attacker.GetPPName());
         if (!CauseZoneDamage(attacker))
         {
             return(true);
         }
         GeoHavenZone zone = DefenseMission.AttackedZone;
         zone.AddDamage(zone.Health.IntValue);
         zone.AddProduction(0);
         var haven = zone.Haven;
         Info("Fall of {0} converted to {1} destruction.", __instance.Name, zone.Def.ViewElementDef.DisplayName1.LocalizeEnglish());
         if (haven != null)
         {
             if ((zone.Def.ProvidesRecruitment || zone.Def.ProvidesEliteRecruitment) && haven.AvailableRecruit != null)
             {
                 haven.RemoveRecruit();
             }
         }
         haven.ZonesStats.UpdateZonesStats();
         __instance.RefreshVisuals();
         return(false);
     } catch (Exception ex) { return(Error(ex)); }
 }
예제 #2
0
 public void MouseDown(object sender, GeoOperatorMouseEventArgs e)
 {
     if (e.Button == MouseButtons.Left)
     {
         List<GeoSite> rnList;
         List<GeoCell> cellList;
         double x = m_Helper.ScreenToPlanetOfX(e.X);
         double y = m_Helper.ScreenToPlanetOfY(e.Y);
         double longitude = 0.0;
         double latitude = 0.0;
         GeoBLPoint point = m_Helper.ScreenToLat(e.X, e.Y);
         if (point != null)
         {
             longitude = point.L;
             latitude = point.B;
         }
         GeoRelayNodeEventArgs addRelayNodeArgs = new GeoRelayNodeEventArgs();   //Edited by liangwenli 20110304
         GeoSite item = new GeoSite(x, y, longitude, latitude);
         addRelayNodeArgs.RelayNodeList.Add(item);
         this.m_NetEvent.GeoAddRelayMsg(addRelayNodeArgs, out rnList, out cellList);
         //this.m_NetEvent.GeoAddSiteMsg(addRelayNodeArgs, out rnList, out cellList);
         if ((rnList != null) && (rnList.Count > 0))
         {
             this.m_NetEntityData.AddRelay(rnList, cellList);
             this.m_NetEntityData.RaiseDataChangedEvent(sender, e);
         }
         e.Handled = true;
     }
 }
예제 #3
0
        private static void AfterEnterSlot_UpdateName(UIModuleManufacturing __instance, IManufacturableUIElement item)
        {
            if (!(item is GeoManufactureItem mItem))
            {
                return;
            }
            if (!(mItem.Manufacturable is GeoUnitWrapper geoUnit))
            {
                return;
            }
            __instance.Tooltip.InfoPanel.ItemNameTextComp.text = geoUnit.GetName();
            GeoSite site = null;

            if (geoUnit is GeoPlaneWrapper plane)
            {
                site = plane.Vehicle.CurrentSite;
            }
            else if (geoUnit is GeoTankWrapper tank)
            {
                site = TankSites?[tank.GroundVehicle];
            }
            if (site != null)
            {
                var region = site.GetComponent <GeoPhoenixBase>()?.LocationDescription.Localize();
                if (!string.IsNullOrWhiteSpace(region))
                {
                    region = ", " + region;
                }
                __instance.Tooltip.InfoPanel.ItemDescriptionTextComp.text += "\n" + site.Name + region;
            }
        }
예제 #4
0
파일: Site.cs 프로젝트: xiaoyj/Space
 public static GeoSite GetGeoNESite(IASite site)
 {
     GeoSite site2 = new GeoSite(site.X, site.Y, site.Longitude, site.Latitude);
     site2.Active = site.Active;
     site2.ID = site.ID;
     site2.Name = site.Name;
     site2.Label = site.Label;
     site2.Visible = site.Visible;
     return site2;
 }
예제 #5
0
        private static bool CanScrap(GeoVehicle plane, bool checkVehicleBay)
        {
            GeoSite site = plane.CurrentSite;

            if (plane.Travelling || site == null || site.Type != GeoSiteType.PhoenixBase)
            {
                return(false);
            }
            if (!(site.GetComponent <GeoPhoenixBase>() is GeoPhoenixBase pxBase))
            {
                return(false);
            }
            return(!checkVehicleBay || CanScrapVehicles(pxBase));
        }
예제 #6
0
        private static void AfterSetMenuItems_CalcTime(GeoSite site, List <SiteContextualMenuItem> ____menuItems)
        {
            foreach (var menu in ____menuItems)
            {
                try {
                    var vehicle = menu.Ability?.GeoActor as GeoVehicle;

                    if (menu.Ability is MoveVehicleAbility move && move.GeoActor is GeoVehicle flier)
                    {
                        menu.ItemText.text += HoursToText(FlightHours(site, flier));
                    }

                    else if (menu.Ability is ExploreSiteAbility explore)
                    {
                        var hours = GetVehicleTimeLeft(vehicle, (float)site.ExplorationTime.TimeSpan.TotalHours);
                        menu.ItemText.text += HoursToText(hours);
                    } // ScanAbility, LaunchMissionAbility, HavenTradeAbility, HavenDetailsAbility
                } catch (Exception ex) { Error(ex); }
예제 #7
0
        private void OnLoadAustralianSitesCompleted(object sender, CsvDataCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                DebugManager.LogError(e.Error); return;
            }

            var geoSites = new List <GeoSite>();

            try
            {
                foreach (var line in e.Result)
                {
                    var vals = line.Split(',');
                    if (vals.Length >= 3)
                    {
                        var name      = vals[0];
                        var latitude  = double.Parse(vals[1]);
                        var longitude = double.Parse(vals[2]);
                        var place     = new GeoSite {
                            Name = name, Longitude = longitude, Latitude = latitude
                        };
                        geoSites.Add(place);
                    }
                }
                //var dataSourceView = new GeoSiteDataViewSource {Source = geoSites, DataSource = geoSites};
                //this.DataSources.Update(AustralianSitesKey, dataSourceView);
                //this.AustralianSites = dataSourceView;

                this.DataSources.Update(AustralianSitesKey, new GeoSiteDataViewSource {
                    Source = geoSites, DataSource = geoSites
                });
                this.AustralianSites = this.DataSources[AustralianSitesKey] as GeoSiteDataViewSource;

                LoadingTimer.StopTask("LoadAustralianSites");
            }
            catch (Exception ex)
            {
                DebugManager.LogError(ex);
            }
        }
예제 #8
0
 private static void AfterSiteMission_AmendLog(GeoSite site, GeoMission mission, List <GeoscapeLogEntry> ____entries)
 {
     try {
         if (!(mission is GeoHavenDefenseMission defense) || DefenseMission == null)
         {
             return;
         }
         var attacker = DefenseMission.GetEnemyFaction();
         if (!CauseZoneDamage(attacker))
         {
             return;
         }
         LocalizedTextBind zoneName = defense.AttackedZone?.Def?.ViewElementDef?.DisplayName1;
         if (zoneName == null || ____entries == null || ____entries.Count < 1)
         {
             return;
         }
         GeoscapeLogEntry entry = ____entries[____entries.Count - 1];
         Verbo("Converting {0} invasion message to zone invasion.", attacker.GetPPName());
         entry.Parameters[0] = new LocalizedTextBind(site.SiteName.Localize() + " " + TitleCase(zoneName.Localize()), true);
     } catch (Exception ex) { Error(ex); }
 }
예제 #9
0
        // Do the scrap after user confirmation
        private static void OnScrapConfirmation(UIModuleManufacturing me, MessageBoxCallbackResult answer, IManufacturable item, GeoscapeViewContext context)
        {
            try {
                if (answer.DialogResult != MessageBoxResult.Yes)
                {
                    return;
                }
                GeoFaction         faction  = context.ViewerFaction;
                GeoLevelController geoLevel = context.Level;

                if (item is GeoUnitWrapper)
                {
                    if (item is GeoPlaneWrapper plane)
                    {
                        Info("Scraping airplane {0}", plane.GetName());
                        GeoVehicle vehicle = plane.Vehicle;
                        GeoSite    site    = vehicle.CurrentSite;
                        foreach (GeoCharacter chr in vehicle.Characters.ToList())
                        {
                            Info("Moving {0} to {1}", chr.DisplayName, site.Name);
                            vehicle.RemoveCharacter(chr);
                            site.AddCharacter(chr);
                        }
                        faction.ScrapItem(plane);
                        vehicle.Travelling = true; // Unset vehicle.CurrentSite and triggers site.VehicleLeft
                        vehicle.Destroy();
                    }
                    else if (item is GeoTankWrapper tank)
                    {
                        Info("Scraping tank {0}", tank.GetName());
                        faction.ScrapItem(tank);
                        faction.RemoveCharacter(tank.GroundVehicle);
                        geoLevel.DestroyTacUnit(tank.GroundVehicle);
                    }
                }
                Info("Scrap done, refreshing list");
                typeof(UIModuleManufacturing).GetMethod("DoFilter", NonPublic | Instance).Invoke(me, new object[] { null, null });
            } catch (Exception ex) { Error(ex); }
        }
예제 #10
0
 private static void AfterDestroySite_RaiseAlertness(GeoSite __instance)
 {
     try {
         var haven = DefenseMission?.Haven;
         var owner = haven?.Site?.Owner;
         if (haven == null || IsAlienOrPP(owner))
         {
             return;
         }
         if (Config.Attack_Raise_Faction_Alertness && owner != null)
         {
             Info("{0} has loss. Raising alertness of {1}", haven.Site.Name, owner.GetPPName());
             foreach (var e in owner.Havens)
             {
                 typeof(GeoHaven).GetMethod("IncreaseAlertness", NonPublic | Instance).Invoke(e, null);
             }
         }
         else if (haven.Site?.State == GeoSiteState.Functioning)
         {
             typeof(GeoHaven).GetMethod("IncreaseAlertness", NonPublic | Instance).Invoke(haven, null);
             Info("{0} has loss. It is now on {1}", haven.Site.Name, haven.AlertLevel);
         }
     } catch (Exception ex) { Error(ex); }
 }
예제 #11
0
 public Site GetSite(GeoSite site)
 {
     return ServiceHelper.Lookup<IGeoNEDeal>(this.m_AppContext).GetSiteById(site.ID);
 }
예제 #12
0
 private static void AfterSetHaven_ShowResourceStock(UIModuleSelectionInfoBox __instance, GeoSite ____site)
 {
     try {
         var res  = ____site.GetComponent <GeoHaven>()?.GetResourceTrading();
         var text = __instance.LeaderMottoText;
         if (res?.Count > 0 && text != null)
         {
             var conf = Mod.Config.Haven_Icons;
             text.text = string.Concat(res.Select(e =>
                                                  string.Format(e.ResourceStock >= e.HavenOfferQuantity ? conf.In_Stock_Line : conf.Out_Of_Stock_Line,
                                                                e.HavenReceiveQuantity, ResName(e.HavenWants), e.HavenOfferQuantity, ResName(e.HavenOffers), e.ResourceStock)
                                                  )).Trim();
             text.fontStyle = FontStyle.Normal;
         }
         else
         {
             text.fontStyle = FontStyle.Italic;
         }
     } catch (Exception ex) { Error(ex); }
 }
예제 #13
0
 private static void AfterSetHaven_ShowRecruitClass(UIModuleSelectionInfoBox __instance, GeoSite ____site, bool showRecruits)
 {
     try {
         if (!showRecruits)
         {
             return;
         }
         var recruit = ____site.GetComponent <GeoHaven>()?.AvailableRecruit;
         if (recruit == null)
         {
             return;
         }
         if (OriginalRecruitText == null)
         {
             OriginalRecruitText = __instance.RecruitAvailableText.text;
         }
         __instance.RecruitAvailableText.text = OriginalRecruitText + " (" + GetClassName(recruit) + ')';
     } catch (Exception ex) { Error(ex); }
 }
예제 #14
0
 private static void AfterHavenInfo_HideStickman(GeoSiteVisualsController __instance, GeoSite site)
 {
     try {
         var icon = __instance.RecruitAvailableIcon.gameObject;
         if (!icon.activeSelf)
         {
             return;
         }
         icon.SetActive(false);
         //Api( "zy.ui.dump", __instance.gameObject );
     } catch (Exception ex) { Error(ex); }
 }
예제 #15
0
 private static bool Override_Attack(GeoFaction __instance, GeoVehicle vehicle, GeoSite site, GeoLevelController ____level)
 {
     try {
         Verbo("{0} wants to attack {1}.", vehicle.Name, site.Name);
         if (ShouldStopFight(____level, vehicle?.Owner))
         {
             Info("{0} attack prevented at {2}.", __instance.Name.Localize(), vehicle.Name, site.Name);
             return(false);
         }
         lastAttacker = vehicle.Owner;
         return(true);
     } catch (Exception ex) { return(Error(ex)); }
 }
예제 #16
0
파일: RelayNode.cs 프로젝트: xiaoyj/Space
 public static GeoSite GetGeoNESite(RelayNode rn)
 {
     GeoSite site2 = new GeoSite(rn.X, rn.Y, rn.Longitude, rn.Latitude);
     site2.Active = rn.Active;
     site2.ID = rn.ID;
     site2.Name = rn.Name;
     site2.Label = rn.Label;
     site2.Visible = rn.Visible;
     site2.IsRelay = true;
     site2.ParentCell = Huawei.UNet.NE.Interface.LTECell.GetGeoNECell(rn.Parent.Parent);
     return site2;
 }