public override void OnResponseReceived(dynamic data) { KCDatabase db = KCDatabase.Instance; foreach (var dock in data) { int id = (int)dock.api_id; if (!db.Docks.ContainsKey(id)) { var d = new DockData(); d.LoadFromResponse(APIName, dock); db.Docks.Add(d); } else { db.Docks[id].LoadFromResponse(APIName, dock); } } db.Fleet.LoadFromResponse(APIName, data); base.OnResponseReceived((object)data); }
//データ更新時 public void Update(int dockID) { KCDatabase db = KCDatabase.Instance; DockData dock = db.Docks[dockID]; RepairTime.BackColor = Color.Transparent; ToolTipInfo.SetToolTip(ShipName, null); ToolTipInfo.SetToolTip(RepairTime, null); if (dock == null || dock.State == -1) { //locked ShipName.Text = ""; RepairTime.Text = ""; RepairTime.Tag = null; } else if (dock.State == 0) { //empty ShipName.Text = "----"; RepairTime.Text = ""; RepairTime.Tag = null; } else { //repairing ShipName.Text = db.Ships[dock.ShipID].Name; ToolTipInfo.SetToolTip(ShipName, db.Ships[dock.ShipID].NameWithLevel); RepairTime.Text = DateTimeHelper.ToTimeRemainString(dock.CompletionTime); RepairTime.Tag = dock.CompletionTime; ToolTipInfo.SetToolTip(RepairTime, "完了日時 : " + DateTimeHelper.TimeToCSVString(dock.CompletionTime)); } }
private void RecalculatePositions(string dockName) { Hash <string, float> panelPositions = _panelPositions[dockName]; if (panelPositions == null) { panelPositions = new Hash <string, float>(); _panelPositions[dockName] = panelPositions; } panelPositions.Clear(); PanelAlignEnum align = _pluginConfig.Docks[dockName].Alignment; DockData dock = _pluginConfig.Docks[dockName]; DockPosition pos = dock.Position; float leftOffset = dock.DockPadding.Left; float rightOffSet = dock.DockPadding.Right; List <PanelRegistration> dockPanels = _registeredPanels.Values .Where(rp => rp.Dock == dockName) .OrderBy(rp => rp.Order) .ToList(); float startX = pos.XPos; if (align == PanelAlignEnum.Right) { foreach (PanelRegistration panel in dockPanels) { startX -= panel.Width + dock.PanelPadding; } startX -= leftOffset + rightOffSet; dockPanels = dockPanels.OrderByDescending(p => p.Order).ToList(); } else if (align == PanelAlignEnum.Center) { foreach (PanelRegistration panel in dockPanels) { startX -= panel.Width / 2 + dock.PanelPadding / 2; } startX -= (leftOffset + rightOffSet) / 2; } float offset = leftOffset; foreach (PanelRegistration panel in dockPanels) { panelPositions[panel.Name] = startX + offset; offset += panel.Width + dock.PanelPadding; DrawPanel(BasePlayer.activePlayerList, panel, UpdateEnum.All); } }
private void SetActiveDocument(ContentDocument pane, bool updatePaneOrder) { SetIcon(pane); if (!_panes.Contains(pane)) { AddDocument(pane); } if (_currentPane != pane) { if (ActiveDocumentChanging != null) { ActiveDocumentChanging(pane); } if (updatePaneOrder) { _panesInOrderUsed.Remove(pane); _panesInOrderUsed.Insert(0, pane); } if ((pane != _panes[0]) && (pane.TabWidth == 0)) { // if this pane's tab is not visible, move it to the start _panes.Remove(pane); _panes.Insert(0, pane); } if (_currentPane != null && _currentPane.Control != null) { _currentPane.Control.WindowDeactivated(); } _currentPane = pane; AttachTabContextMenu(pane); pane.Control.DockingContainer.Text = pane.Name; DockData dockData = GetDockData(pane); if (pane.Control.DockingContainer == null || pane.Control.DockingContainer.IsDisposed) { pane.Control.DockingContainer = new DockingContainer(pane.Control); } pane.Control.DockingContainer.Show(_dockPanel, dockData); pane.Control.DockingContainer.Focus(); pane.Control.WindowActivated(); } // Do this even if the pane hasn't changed, to ensure // that the property grid is refreshed if (ActiveDocumentChanged != null) { ActiveDocumentChanged(pane); } RefreshWindowsMenu(); }
public override void OnRequestReceived(Dictionary <string, string> data) { KCDatabase db = KCDatabase.Instance; DockData dock = db.Docks[int.Parse(data["api_ndock_id"])]; bool bucketUsed = data["api_highspeed"] == "1"; int shipID = int.Parse(data["api_ship_id"]); ShipData ship = db.Ships[shipID]; Utility.Logger.Add(2, string.Format("入渠ドック #{0}で {1} ({2}/{3}) の修復を開始しました。(燃料x{4}, 鋼材x{5}, {6})", dock.DockID, ship.NameWithLevel, ship.HPCurrent, ship.HPMax, ship.RepairFuel, ship.RepairSteel, bucketUsed ? "高速修復材x1" : ("修理完了予定: " + DateTimeHelper.TimeToCSVString(DateTime.Now + TimeSpan.FromMilliseconds(ship.RepairTime))) )); db.Material.Fuel -= ship.RepairFuel; db.Material.Steel -= ship.RepairSteel; if (bucketUsed) { ship.Repair(); db.Material.InstantRepair--; } else if (ship.RepairTime <= 60000) { ship.Repair(); } else { //この場合は直後に ndock が呼ばれるので自力で更新しなくてもよい /* * dock.State = 1; * dock.ShipID = shipID; * dock.CompletionTime = DateTime.Now.AddMilliseconds( ship.RepairTime ); */ } db.Fleet.LoadFromRequest(APIName, data); base.OnRequestReceived(data); }
public override void OnResponseReceived(dynamic data) { KCDatabase db = KCDatabase.Instance; //api_material db.Material.LoadFromResponse(APIName, data.api_material); //api_basic db.Admiral.LoadFromResponse(APIName, data.api_basic); //api_ship //ちょっと遅くなるかもだけど、齟齬(幽霊とかドッペルゲンガーとか)の発生を防ぐため全入れ替え db.Ships.Clear(); foreach (var elem in data.api_ship) { var a = new ShipData(); a.LoadFromResponse(APIName, elem); db.Ships.Add(a); } //api_ndock foreach (var elem in data.api_ndock) { int id = (int)elem.api_id; if (!db.Docks.ContainsKey(id)) { var a = new DockData(); a.LoadFromResponse(APIName, elem); db.Docks.Add(a); } else { db.Docks[id].LoadFromResponse(APIName, elem); } } //api_deck_port db.Fleet.LoadFromResponse(APIName, data.api_deck_port); db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0; db.Battle.LoadFromResponse(APIName, data); base.OnResponseReceived((object)data); }
public void Show(IDockingPanel panel, DockData dockData) { IsShowing = true; DockPanel dockPanel = ((DockingPanel)panel).DockPanel; if (dockData.Location != Rectangle.Empty && dockData.DockState == DockingState.Float) { base.Show(dockPanel, dockData.Location); } else { PerformUglyDockHack(); base.Show(dockPanel, (DockState)dockData.DockState); } }
public override void OnRequestReceived(Dictionary <string, string> data) { KCDatabase db = KCDatabase.Instance; DockData dock = db.Docks[int.Parse(data["api_ndock_id"])]; bool bucketUsed = data["api_highspeed"] == "1"; int shipID = int.Parse(data["api_ship_id"]); ShipData ship = db.Ships[shipID]; Utility.Logger.Add(2, "", $"入渠船坞 #{dock.DockID} 开始修复舰娘", $" {ship.NameWithLevel} ( {ship.HPCurrent} / {ship.HPMax} ) 。", $"消耗 : 燃料 x {ship.RepairFuel}, 钢材 x {ship.RepairSteel}" + (bucketUsed ? ", 高速修复材 x 1 。" : $" 。预计完成时间 : {DateTimeHelper.TimeToCSVString(DateTime.Now + TimeSpan.FromMilliseconds(ship.RepairTime))}") ); db.Material.Fuel -= ship.RepairFuel; db.Material.Steel -= ship.RepairSteel; if (bucketUsed) { ship.Repair(); db.Material.InstantRepair--; } else if (ship.RepairTime <= 60000) { ship.Repair(); } else { //この場合は直後に ndock が呼ばれるので自力で更新しなくてもよい /* * dock.State = 1; * dock.ShipID = shipID; * dock.CompletionTime = DateTime.Now.AddMilliseconds( ship.RepairTime ); */ } db.Fleet.LoadFromRequest(APIName, data); base.OnRequestReceived(data); }
private UiPosition GetDockUiPosition(DockPosition pos, string dockName) { float startPos = 0f; float endPos = 0f; if (_panelPositions.ContainsKey(dockName)) { DockData dock = _pluginConfig.Docks[dockName]; ICollection <float> panels = _panelPositions[dockName].Values; if (panels.Count != 0) { startPos = panels.Min(pp => pp) - dock.DockPadding.Left; endPos = panels.Max(pp => pp) + dock.DockPadding.Right; endPos += _registeredPanels.Values.Where(p => p.Dock == dockName).OrderBy(p => p.Order).Last()?.Width ?? 0; } } return(new UiPosition(startPos, pos.StartYPos, endPos - startPos, pos.Height)); }
public override void OnRequestReceived(Dictionary <string, string> data) { KCDatabase db = KCDatabase.Instance; DockData dock = db.Docks[int.Parse(data["api_ndock_id"])]; int shipID = int.Parse(data["api_ship_id"]); ShipData ship = db.Ships[shipID]; db.Material.Fuel -= ship.RepairFuel; db.Material.Steel -= ship.RepairSteel; if (data["api_highspeed"] == "1") { ship.Repair(); db.Material.InstantRepair--; } else if (ship.RepairTime <= 60000) { ship.Repair(); } else { //この場合は直後に ndock が呼ばれるので自力で更新しなくてもよい /* * dock.State = 1; * dock.ShipID = shipID; * dock.CompletionTime = DateTime.Now.AddMilliseconds( ship.RepairTime ); */ } db.Fleet.LoadFromRequest(APIName, data); base.OnRequestReceived(data); }
public Dock(DockData data) { dockName = data.dockName; dockState = data.dockState; DockID = data.dockID; Ship = data.ship; Destination = data.destination; if (data.resourcesInShip != null) { Ship.resourcesModule = new ResourcesModule(data.resourcesInShip); } var watchFactory = new WatchFactory(); travelFactory = watchFactory.CreateTravelFactory(); if (dockState == DockState.Building) { TripClock = travelFactory.CreateTripClock(data.buildTimeLeft); } }
public override void OnResponseReceived(dynamic data) { KCDatabase db = KCDatabase.Instance; //api_material db.Material.LoadFromResponse(APIName, data.api_material); //api_basic db.Admiral.LoadFromResponse(APIName, data.api_basic); //api_ship db.Ships.Clear(); foreach (var elem in data.api_ship) { var a = new ShipData(); a.LoadFromResponse(APIName, elem); db.Ships.Add(a); } //api_ndock foreach (var elem in data.api_ndock) { int id = (int)elem.api_id; if (!db.Docks.ContainsKey(id)) { var a = new DockData(); a.LoadFromResponse(APIName, elem); db.Docks.Add(a); } else { db.Docks[id].LoadFromResponse(APIName, elem); } } //api_deck_port db.Fleet.LoadFromResponse(APIName, data.api_deck_port); db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0; // 基地航空隊 配置転換系の処理 if (data.api_plane_info() && data.api_plane_info.api_base_convert_slot()) { var prev = db.RelocatedEquipments.Keys.ToArray(); var current = (int[])data.api_plane_info.api_base_convert_slot; foreach (int deleted in prev.Except(current)) { db.RelocatedEquipments.Remove(deleted); } foreach (int added in current.Except(prev)) { db.RelocatedEquipments.Add(new RelocationData(added, DateTime.Now)); } } else { db.RelocatedEquipments.Clear(); } db.Battle.LoadFromResponse(APIName, data); base.OnResponseReceived((object)data); }
public override void OnResponseReceived(dynamic data) { KCDatabase db = KCDatabase.Instance; db.Fleet.EvacuatePreviousShips(); //api_material db.Material.LoadFromResponse(APIName, data.api_material); //api_basic db.Admiral.LoadFromResponse(APIName, data.api_basic); //api_ship db.Ships.Clear(); foreach (var elem in data.api_ship) { var a = new ShipData(); a.LoadFromResponse(APIName, elem); db.Ships.Add(a); } //api_ndock foreach (var elem in data.api_ndock) { int id = (int)elem.api_id; if (!db.Docks.ContainsKey(id)) { var a = new DockData(); a.LoadFromResponse(APIName, elem); db.Docks.Add(a); } else { db.Docks[id].LoadFromResponse(APIName, elem); } } //api_deck_port db.Fleet.LoadFromResponse(APIName, data.api_deck_port); db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0; if (Utility.Configuration.Config.Control.EnableDiscordRPC) { DiscordFormat dataForWS = Instance.data; dataForWS.top = Utility.Configuration.Config.Control.DiscordRPCMessage.Replace("{{secretary}}", db.Fleet[1].MembersInstance[0].Name); dataForWS.bot = new List <string>(); if (db.Admiral.Senka != null) { dataForWS.bot.Add(string.Format("Rank {0} on {1}", db.Admiral.Senka, db.Server.Name)); } else { dataForWS.bot.Add("Rank data not loaded"); } if (Utility.Configuration.Config.Control.DiscordRPCShowFCM) { dataForWS.bot.Add(new StringBuilder("First class medals: ").Append(db.Admiral.Medals).ToString()); } dataForWS.large = string.Format("{0} (HQ Level {1})", db.Admiral.AdmiralName, db.Admiral.Level); dataForWS.small = db.Admiral.RankString; } // 基地航空隊 配置転換系の処理 if (data.api_plane_info() && data.api_plane_info.api_base_convert_slot()) { var prev = db.RelocatedEquipments.Keys.ToArray(); var current = (int[])data.api_plane_info.api_base_convert_slot; foreach (int deleted in prev.Except(current)) { db.RelocatedEquipments.Remove(deleted); } foreach (int added in current.Except(prev)) { db.RelocatedEquipments.Add(new RelocationData(added, DateTime.Now)); } } else { db.RelocatedEquipments.Clear(); } db.Battle.LoadFromResponse(APIName, data); base.OnResponseReceived((object)data); }
public override void OnResponseReceived(dynamic data) { KCDatabase db = KCDatabase.Instance; //api_material db.Material.LoadFromResponse(APIName, data.api_material); //api_basic db.Admiral.LoadFromResponse(APIName, data.api_basic); //api_ship db.Ships.Clear(); foreach (var elem in data.api_ship) { var a = new ShipData(); a.LoadFromResponse(APIName, elem); db.Ships.Add(a); } //api_ndock foreach (var elem in data.api_ndock) { int id = (int)elem.api_id; if (!db.Docks.ContainsKey(id)) { var a = new DockData(); a.LoadFromResponse(APIName, elem); db.Docks.Add(a); } else { db.Docks[id].LoadFromResponse(APIName, elem); } } //api_deck_port db.Fleet.LoadFromResponse(APIName, data.api_deck_port); db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0; // 基地航空隊 配置転換系の処理 if (data.api_event_object() && data.api_event_object.api_base_convert_slot()) { var prev = new HashSet <int>(BaseAirCorpsData.RelocatedEquipments); BaseAirCorpsData.SetRelocatedEquipments((int[])data.api_event_object.api_base_convert_slot); foreach (int deleted in prev.Except(BaseAirCorpsData.RelocatedEquipments)) { db.Equipments[deleted].RelocatedTime = DateTime.MinValue; } foreach (int added in BaseAirCorpsData.RelocatedEquipments.Except(prev)) { db.Equipments[added].RelocatedTime = DateTime.Now; } } else { foreach (int deleted in BaseAirCorpsData.RelocatedEquipments) { db.Equipments[deleted].RelocatedTime = DateTime.MinValue; } BaseAirCorpsData.RelocatedEquipments.Clear(); } db.Battle.LoadFromResponse(APIName, data); base.OnResponseReceived((object)data); }