/******************************************************************************* * * Space Trader for Windows 2.00 * * Copyright (C) 2005 Jay French, All Rights Reserved * * Additional coding by David Pierron * Original coding by Pieter Spronck, Sam Anderson, Samuel Goldstein, Matt Lee * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * If you'd like a copy of the GNU General Public License, go to * http://www.gnu.org/copyleft/gpl.html. * * You can contact the author at spacetrader@frenchfryz.com * ******************************************************************************/ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.IO; using System.Windows.Forms; namespace Fryz.Apps.SpaceTrader { public class Form_Shipyard : System.Windows.Forms.Form { #region Control Declarations private System.ComponentModel.IContainer components; private System.Windows.Forms.Label lblWelcome; private System.Windows.Forms.TextBox txtName; private System.Windows.Forms.Label lblName; private System.Windows.Forms.PictureBox picShip; private System.Windows.Forms.Label lblDesignFee; private System.Windows.Forms.Button btnConstruct; private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.PictureBox picLogo; private System.Windows.Forms.GroupBox boxCosts; private System.Windows.Forms.GroupBox boxAllocation; private System.Windows.Forms.NumericUpDown numHullStrength; private System.Windows.Forms.Label lblHullStrenghLabel; private System.Windows.Forms.NumericUpDown numCargoBays; private System.Windows.Forms.NumericUpDown numCrewQuarters; private System.Windows.Forms.NumericUpDown numFuelTanks; private System.Windows.Forms.NumericUpDown numShieldSlots; private System.Windows.Forms.NumericUpDown numGadgetSlots; private System.Windows.Forms.NumericUpDown numWeaponSlots; private System.Windows.Forms.Label lblCargoBays; private System.Windows.Forms.Label lblFuelTanks; private System.Windows.Forms.Label lblCrewQuarters; private System.Windows.Forms.Label lblShieldSlots; private System.Windows.Forms.Label lblGadgetSlots; private System.Windows.Forms.Label lblWeaponsSlots; private System.Windows.Forms.Label lblShipCost; private System.Windows.Forms.Label lblTotalCost; private System.Windows.Forms.Label lblTotalCostLabel; private System.Windows.Forms.Label lblShipCostLabel; private System.Windows.Forms.Label lblDesignFeeLabel; private System.Windows.Forms.GroupBox boxWelcome; private System.Windows.Forms.GroupBox boxInfo; private System.Windows.Forms.Label lblSize; private System.Windows.Forms.ComboBox selSize; private System.Windows.Forms.Label lblTemplate; private System.Windows.Forms.ComboBox selTemplate; private System.Windows.Forms.Button btnSetCustomImage; private System.Windows.Forms.Label lblImageLabel; private System.Windows.Forms.Button btnNextImage; private System.Windows.Forms.Button btnPrevImage; private System.Windows.Forms.Label lblImage; private System.Windows.Forms.Label lblUnitsUsedLabel; private System.Windows.Forms.PictureBox picInfoLine; private System.Windows.Forms.Label lblPctLabel; private System.Windows.Forms.Label lblPct; private System.Windows.Forms.Label lblPenaltyLabel; private System.Windows.Forms.Label lblPenalty; private System.Windows.Forms.PictureBox picCostsLine; private System.Windows.Forms.Label lblSizeSpecialtyLabel; private System.Windows.Forms.Label lblSkillLabel; private System.Windows.Forms.Label lblSizeSpecialty; private System.Windows.Forms.Label lblSkill; private System.Windows.Forms.Label lblSkillDescription; private System.Windows.Forms.Label lblWarning; private System.Windows.Forms.ImageList ilShipyardLogos; private System.Windows.Forms.OpenFileDialog dlgOpen; private System.Windows.Forms.Button btnLoad; private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Label lblTradeInLabel; private System.Windows.Forms.Label lblTradeIn; private System.Windows.Forms.Label lblUnitsUsed; private System.Windows.Forms.Label lblDisabledPct; private System.Windows.Forms.SaveFileDialog dlgSave; #endregion #region Member variables private Game game = Game.CurrentGame; private Shipyard shipyard = Game.CurrentGame.Commander.CurrentSystem.Shipyard; private bool loading = false; private ArrayList sizes = null; private Image[] customImages = new Image[Consts.ImagesPerShip]; private int imgIndex = 0; private System.Windows.Forms.Label lblDisabledName; private ShipType[] imgTypes = new ShipType[] { ShipType.Flea, ShipType.Gnat, ShipType.Firefly, ShipType.Mosquito, ShipType.Bumblebee, ShipType.Beetle, ShipType.Hornet, ShipType.Grasshopper, ShipType.Termite, ShipType.Wasp, ShipType.Custom }; #endregion #region Methods public Form_Shipyard() { InitializeComponent(); this.Text = Functions.StringVars(Strings.ShipyardTitle, shipyard.Name); picLogo.Image = ilShipyardLogos.Images[(int)shipyard.Id]; lblWelcome.Text = Functions.StringVars(Strings.ShipyardWelcome, shipyard.Name, shipyard.Engineer); lblSizeSpecialty.Text = Strings.Sizes[(int)shipyard.SpecialtySize]; lblSkill.Text = Strings.ShipyardSkills[(int)shipyard.Skill]; lblSkillDescription.Text = Strings.ShipyardSkillDescriptions[(int)shipyard.Skill]; lblWarning.Text = Functions.StringVars(Strings.ShipyardWarning, Shipyard.PENALTY_FIRST_PCT.ToString(), Shipyard.PENALTY_SECOND_PCT.ToString()); dlgOpen.InitialDirectory = Consts.CustomImagesDirectory; dlgSave.InitialDirectory = Consts.CustomTemplatesDirectory; lblDisabledName.Image = game.ParentWindow.DirectionImages.Images[Consts.DirectionDown]; lblDisabledPct.Image = game.ParentWindow.DirectionImages.Images[Consts.DirectionDown]; LoadSizes(); LoadTemplateList(); LoadSelectedTemplate(); } protected override void Dispose(bool disposing) { if (disposing && components != null) components.Dispose(); base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form_Shipyard)); this.boxWelcome = new System.Windows.Forms.GroupBox(); this.lblSkillDescription = new System.Windows.Forms.Label(); this.lblSkill = new System.Windows.Forms.Label(); this.lblSizeSpecialty = new System.Windows.Forms.Label(); this.lblSkillLabel = new System.Windows.Forms.Label(); this.lblSizeSpecialtyLabel = new System.Windows.Forms.Label(); this.lblWelcome = new System.Windows.Forms.Label(); this.lblWarning = new System.Windows.Forms.Label(); this.picLogo = new System.Windows.Forms.PictureBox(); this.boxInfo = new System.Windows.Forms.GroupBox(); this.btnSave = new System.Windows.Forms.Button(); this.btnLoad = new System.Windows.Forms.Button(); this.picInfoLine = new System.Windows.Forms.PictureBox(); this.btnPrevImage = new System.Windows.Forms.Button(); this.btnNextImage = new System.Windows.Forms.Button(); this.lblImage = new System.Windows.Forms.Label(); this.lblImageLabel = new System.Windows.Forms.Label(); this.selTemplate = new System.Windows.Forms.ComboBox(); this.lblTemplate = new System.Windows.Forms.Label(); this.selSize = new System.Windows.Forms.ComboBox(); this.lblSize = new System.Windows.Forms.Label(); this.btnSetCustomImage = new System.Windows.Forms.Button(); this.picShip = new System.Windows.Forms.PictureBox(); this.txtName = new System.Windows.Forms.TextBox(); this.lblName = new System.Windows.Forms.Label(); this.lblUnitsUsed = new System.Windows.Forms.Label(); this.lblUnitsUsedLabel = new System.Windows.Forms.Label(); this.boxCosts = new System.Windows.Forms.GroupBox(); this.lblTradeIn = new System.Windows.Forms.Label(); this.lblTradeInLabel = new System.Windows.Forms.Label(); this.picCostsLine = new System.Windows.Forms.PictureBox(); this.lblPenalty = new System.Windows.Forms.Label(); this.lblPenaltyLabel = new System.Windows.Forms.Label(); this.lblShipCost = new System.Windows.Forms.Label(); this.lblTotalCost = new System.Windows.Forms.Label(); this.lblTotalCostLabel = new System.Windows.Forms.Label(); this.lblShipCostLabel = new System.Windows.Forms.Label(); this.lblDesignFee = new System.Windows.Forms.Label(); this.lblDesignFeeLabel = new System.Windows.Forms.Label(); this.btnConstruct = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.boxAllocation = new System.Windows.Forms.GroupBox(); this.lblPct = new System.Windows.Forms.Label(); this.lblPctLabel = new System.Windows.Forms.Label(); this.numHullStrength = new System.Windows.Forms.NumericUpDown(); this.lblHullStrenghLabel = new System.Windows.Forms.Label(); this.numCargoBays = new System.Windows.Forms.NumericUpDown(); this.numCrewQuarters = new System.Windows.Forms.NumericUpDown(); this.numFuelTanks = new System.Windows.Forms.NumericUpDown(); this.numShieldSlots = new System.Windows.Forms.NumericUpDown(); this.numGadgetSlots = new System.Windows.Forms.NumericUpDown(); this.numWeaponSlots = new System.Windows.Forms.NumericUpDown(); this.lblCargoBays = new System.Windows.Forms.Label(); this.lblFuelTanks = new System.Windows.Forms.Label(); this.lblCrewQuarters = new System.Windows.Forms.Label(); this.lblShieldSlots = new System.Windows.Forms.Label(); this.lblGadgetSlots = new System.Windows.Forms.Label(); this.lblWeaponsSlots = new System.Windows.Forms.Label(); this.ilShipyardLogos = new System.Windows.Forms.ImageList(this.components); this.dlgOpen = new System.Windows.Forms.OpenFileDialog(); this.lblDisabledPct = new System.Windows.Forms.Label(); this.dlgSave = new System.Windows.Forms.SaveFileDialog(); this.lblDisabledName = new System.Windows.Forms.Label(); this.boxWelcome.SuspendLayout(); this.boxInfo.SuspendLayout(); this.boxCosts.SuspendLayout(); this.boxAllocation.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numHullStrength)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numCargoBays)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numCrewQuarters)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numFuelTanks)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numShieldSlots)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numGadgetSlots)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numWeaponSlots)).BeginInit(); this.SuspendLayout(); // // boxWelcome // this.boxWelcome.Controls.AddRange(new System.Windows.Forms.Control[] { this.lblSkillDescription, this.lblSkill, this.lblSizeSpecialty, this.lblSkillLabel, this.lblSizeSpecialtyLabel, this.lblWarning, this.picLogo, this.lblWelcome}); this.boxWelcome.Location = new System.Drawing.Point(8, 0); this.boxWelcome.Name = "boxWelcome"; this.boxWelcome.Size = new System.Drawing.Size(270, 204); this.boxWelcome.TabIndex = 1; this.boxWelcome.TabStop = false; // // lblSkillDescription // this.lblSkillDescription.Location = new System.Drawing.Point(8, 98); this.lblSkillDescription.Name = "lblSkillDescription"; this.lblSkillDescription.Size = new System.Drawing.Size(258, 26); this.lblSkillDescription.TabIndex = 27; this.lblSkillDescription.Text = "All ships constructed at this shipyard use 2 fewer units per crew quarter."; // // lblSkill // this.lblSkill.Location = new System.Drawing.Point(180, 79); this.lblSkill.Name = "lblSkill"; this.lblSkill.Size = new System.Drawing.Size(87, 13); this.lblSkill.TabIndex = 26; this.lblSkill.Text = "Crew Quartering"; // // lblSizeSpecialty // this.lblSizeSpecialty.Location = new System.Drawing.Point(180, 65); this.lblSizeSpecialty.Name = "lblSizeSpecialty"; this.lblSizeSpecialty.Size = new System.Drawing.Size(64, 13); this.lblSizeSpecialty.TabIndex = 25; this.lblSizeSpecialty.Text = "Gargantuan"; // // lblSkillLabel // this.lblSkillLabel.AutoSize = true; this.lblSkillLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.lblSkillLabel.Location = new System.Drawing.Point(92, 79); this.lblSkillLabel.Name = "lblSkillLabel"; this.lblSkillLabel.Size = new System.Drawing.Size(72, 13); this.lblSkillLabel.TabIndex = 24; this.lblSkillLabel.Text = "Special Skill:"; // // lblSizeSpecialtyLabel // this.lblSizeSpecialtyLabel.AutoSize = true; this.lblSizeSpecialtyLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.lblSizeSpecialtyLabel.Location = new System.Drawing.Point(92, 65); this.lblSizeSpecialtyLabel.Name = "lblSizeSpecialtyLabel"; this.lblSizeSpecialtyLabel.Size = new System.Drawing.Size(82, 13); this.lblSizeSpecialtyLabel.TabIndex = 23; this.lblSizeSpecialtyLabel.Text = "Size Specialty:"; // // lblWelcome // this.lblWelcome.Location = new System.Drawing.Point(92, 12); this.lblWelcome.Name = "lblWelcome"; this.lblWelcome.Size = new System.Drawing.Size(176, 52); this.lblWelcome.TabIndex = 3; this.lblWelcome.Text = "Welcome to Sorosuub Engineering Shipyards! Our best engineer, Obi-Wan, is at your" + " service."; // // lblWarning // this.lblWarning.Location = new System.Drawing.Point(8, 134); this.lblWarning.Name = "lblWarning"; this.lblWarning.Size = new System.Drawing.Size(258, 65); this.lblWarning.TabIndex = 5; this.lblWarning.Text = "Bear in mind that getting too close to the maximum number of units will result in" + " a \"Crowding Penalty\" due to the engineering difficulty of squeezing everything " + "in. There is a modest penalty at 80%, and a more severe one at 90%."; // // picLogo // this.picLogo.BackColor = System.Drawing.Color.Black; this.picLogo.Location = new System.Drawing.Point(8, 12); this.picLogo.Name = "picLogo"; this.picLogo.Size = new System.Drawing.Size(80, 80); this.picLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.picLogo.TabIndex = 22; this.picLogo.TabStop = false; // // boxInfo // this.boxInfo.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnSave, this.btnLoad, this.picInfoLine, this.btnPrevImage, this.btnNextImage, this.lblImage, this.lblImageLabel, this.selTemplate, this.lblTemplate, this.selSize, this.lblSize, this.btnSetCustomImage, this.picShip, this.txtName, this.lblName}); this.boxInfo.Location = new System.Drawing.Point(8, 208); this.boxInfo.Name = "boxInfo"; this.boxInfo.Size = new System.Drawing.Size(270, 160); this.boxInfo.TabIndex = 2; this.boxInfo.TabStop = false; this.boxInfo.Text = "Info"; // // btnSave // this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnSave.Location = new System.Drawing.Point(216, 40); this.btnSave.Name = "btnSave"; this.btnSave.Size = new System.Drawing.Size(44, 20); this.btnSave.TabIndex = 4; this.btnSave.Text = "Save"; this.btnSave.Click += new System.EventHandler(this.btnSave_Click); this.btnSave.MouseEnter += new System.EventHandler(this.btnSave_MouseEnter); this.btnSave.MouseLeave += new System.EventHandler(this.btnSave_MouseLeave); // // btnLoad // this.btnLoad.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnLoad.Location = new System.Drawing.Point(216, 16); this.btnLoad.Name = "btnLoad"; this.btnLoad.Size = new System.Drawing.Size(44, 20); this.btnLoad.TabIndex = 2; this.btnLoad.Text = "Load"; this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click); // // picInfoLine // this.picInfoLine.BackColor = System.Drawing.Color.DimGray; this.picInfoLine.Location = new System.Drawing.Point(8, 89); this.picInfoLine.Name = "picInfoLine"; this.picInfoLine.Size = new System.Drawing.Size(254, 1); this.picInfoLine.TabIndex = 132; this.picInfoLine.TabStop = false; // // btnPrevImage // this.btnPrevImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnPrevImage.Location = new System.Drawing.Point(154, 95); this.btnPrevImage.Name = "btnPrevImage"; this.btnPrevImage.Size = new System.Drawing.Size(18, 18); this.btnPrevImage.TabIndex = 6; this.btnPrevImage.Text = "<"; this.btnPrevImage.Click += new System.EventHandler(this.btnPrevImage_Click); // // btnNextImage // this.btnNextImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnNextImage.Location = new System.Drawing.Point(242, 95); this.btnNextImage.Name = "btnNextImage"; this.btnNextImage.Size = new System.Drawing.Size(18, 18); this.btnNextImage.TabIndex = 7; this.btnNextImage.Text = ">"; this.btnNextImage.Click += new System.EventHandler(this.btnNextImage_Click); // // lblImage // this.lblImage.Location = new System.Drawing.Point(174, 98); this.lblImage.Name = "lblImage"; this.lblImage.Size = new System.Drawing.Size(70, 13); this.lblImage.TabIndex = 61; this.lblImage.Text = "Custom Ship"; this.lblImage.TextAlign = System.Drawing.ContentAlignment.TopCenter; // // lblImageLabel // this.lblImageLabel.AutoSize = true; this.lblImageLabel.Location = new System.Drawing.Point(8, 95); this.lblImageLabel.Name = "lblImageLabel"; this.lblImageLabel.Size = new System.Drawing.Size(39, 13); this.lblImageLabel.TabIndex = 22; this.lblImageLabel.Text = "Image:"; // // selTemplate // this.selTemplate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.selTemplate.Location = new System.Drawing.Point(80, 16); this.selTemplate.Name = "selTemplate"; this.selTemplate.Size = new System.Drawing.Size(132, 21); this.selTemplate.TabIndex = 1; // // lblTemplate // this.lblTemplate.AutoSize = true; this.lblTemplate.Location = new System.Drawing.Point(8, 19); this.lblTemplate.Name = "lblTemplate"; this.lblTemplate.Size = new System.Drawing.Size(55, 13); this.lblTemplate.TabIndex = 20; this.lblTemplate.Text = "Template:"; // // selSize // this.selSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.selSize.Location = new System.Drawing.Point(80, 63); this.selSize.Name = "selSize"; this.selSize.Size = new System.Drawing.Size(180, 21); this.selSize.TabIndex = 5; this.selSize.SelectedIndexChanged += new System.EventHandler(this.selSize_SelectedIndexChanged); // // lblSize // this.lblSize.AutoSize = true; this.lblSize.Location = new System.Drawing.Point(8, 66); this.lblSize.Name = "lblSize"; this.lblSize.Size = new System.Drawing.Size(29, 13); this.lblSize.TabIndex = 18; this.lblSize.Text = "Size:"; // // btnSetCustomImage // this.btnSetCustomImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnSetCustomImage.Location = new System.Drawing.Point(154, 121); this.btnSetCustomImage.Name = "btnSetCustomImage"; this.btnSetCustomImage.Size = new System.Drawing.Size(106, 22); this.btnSetCustomImage.TabIndex = 8; this.btnSetCustomImage.Text = "Set Custom..."; this.btnSetCustomImage.Click += new System.EventHandler(this.btnSetCustomImage_Click); // // picShip // this.picShip.BackColor = System.Drawing.Color.White; this.picShip.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.picShip.Location = new System.Drawing.Point(80, 95); this.picShip.Name = "picShip"; this.picShip.Size = new System.Drawing.Size(66, 54); this.picShip.TabIndex = 14; this.picShip.TabStop = false; // // txtName // this.txtName.Location = new System.Drawing.Point(80, 40); this.txtName.Name = "txtName"; this.txtName.Size = new System.Drawing.Size(132, 20); this.txtName.TabIndex = 3; this.txtName.Text = ""; this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged); // // lblName // this.lblName.AutoSize = true; this.lblName.Location = new System.Drawing.Point(8, 44); this.lblName.Name = "lblName"; this.lblName.Size = new System.Drawing.Size(63, 13); this.lblName.TabIndex = 5; this.lblName.Text = "Ship Name:"; // // lblUnitsUsed // this.lblUnitsUsed.Location = new System.Drawing.Point(110, 186); this.lblUnitsUsed.Name = "lblUnitsUsed"; this.lblUnitsUsed.Size = new System.Drawing.Size(23, 13); this.lblUnitsUsed.TabIndex = 17; this.lblUnitsUsed.Text = "888"; this.lblUnitsUsed.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblUnitsUsedLabel // this.lblUnitsUsedLabel.AutoSize = true; this.lblUnitsUsedLabel.Location = new System.Drawing.Point(8, 186); this.lblUnitsUsedLabel.Name = "lblUnitsUsedLabel"; this.lblUnitsUsedLabel.Size = new System.Drawing.Size(63, 13); this.lblUnitsUsedLabel.TabIndex = 16; this.lblUnitsUsedLabel.Text = "Units Used:"; // // boxCosts // this.boxCosts.Controls.AddRange(new System.Windows.Forms.Control[] { this.lblTradeIn, this.lblTradeInLabel, this.picCostsLine, this.lblPenalty, this.lblPenaltyLabel, this.lblShipCost, this.lblTotalCost, this.lblTotalCostLabel, this.lblShipCostLabel, this.lblDesignFee, this.lblDesignFeeLabel}); this.boxCosts.Location = new System.Drawing.Point(286, 230); this.boxCosts.Name = "boxCosts"; this.boxCosts.Size = new System.Drawing.Size(184, 106); this.boxCosts.TabIndex = 4; this.boxCosts.TabStop = false; this.boxCosts.Text = "Costs"; // // lblTradeIn // this.lblTradeIn.Location = new System.Drawing.Point(106, 64); this.lblTradeIn.Name = "lblTradeIn"; this.lblTradeIn.Size = new System.Drawing.Size(75, 16); this.lblTradeIn.TabIndex = 135; this.lblTradeIn.Text = "-8,888,888 cr."; this.lblTradeIn.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblTradeInLabel // this.lblTradeInLabel.AutoSize = true; this.lblTradeInLabel.Location = new System.Drawing.Point(8, 64); this.lblTradeInLabel.Name = "lblTradeInLabel"; this.lblTradeInLabel.Size = new System.Drawing.Size(77, 13); this.lblTradeInLabel.TabIndex = 134; this.lblTradeInLabel.Text = "Less Trade-In:"; // // picCostsLine // this.picCostsLine.BackColor = System.Drawing.Color.DimGray; this.picCostsLine.Location = new System.Drawing.Point(8, 80); this.picCostsLine.Name = "picCostsLine"; this.picCostsLine.Size = new System.Drawing.Size(168, 1); this.picCostsLine.TabIndex = 133; this.picCostsLine.TabStop = false; // // lblPenalty // this.lblPenalty.Location = new System.Drawing.Point(106, 32); this.lblPenalty.Name = "lblPenalty"; this.lblPenalty.Size = new System.Drawing.Size(74, 16); this.lblPenalty.TabIndex = 21; this.lblPenalty.Text = "8,888,888 cr."; this.lblPenalty.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblPenaltyLabel // this.lblPenaltyLabel.AutoSize = true; this.lblPenaltyLabel.Location = new System.Drawing.Point(8, 32); this.lblPenaltyLabel.Name = "lblPenaltyLabel"; this.lblPenaltyLabel.Size = new System.Drawing.Size(96, 13); this.lblPenaltyLabel.TabIndex = 20; this.lblPenaltyLabel.Text = "Crowding Penalty:"; // // lblShipCost // this.lblShipCost.Location = new System.Drawing.Point(106, 16); this.lblShipCost.Name = "lblShipCost"; this.lblShipCost.Size = new System.Drawing.Size(74, 16); this.lblShipCost.TabIndex = 19; this.lblShipCost.Text = "8,888,888 cr."; this.lblShipCost.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblTotalCost // this.lblTotalCost.Location = new System.Drawing.Point(106, 84); this.lblTotalCost.Name = "lblTotalCost"; this.lblTotalCost.Size = new System.Drawing.Size(74, 16); this.lblTotalCost.TabIndex = 18; this.lblTotalCost.Text = "8,888,888 cr."; this.lblTotalCost.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblTotalCostLabel // this.lblTotalCostLabel.AutoSize = true; this.lblTotalCostLabel.Location = new System.Drawing.Point(8, 84); this.lblTotalCostLabel.Name = "lblTotalCostLabel"; this.lblTotalCostLabel.Size = new System.Drawing.Size(59, 13); this.lblTotalCostLabel.TabIndex = 17; this.lblTotalCostLabel.Text = "Total Cost:"; // // lblShipCostLabel // this.lblShipCostLabel.AutoSize = true; this.lblShipCostLabel.Location = new System.Drawing.Point(8, 16); this.lblShipCostLabel.Name = "lblShipCostLabel"; this.lblShipCostLabel.Size = new System.Drawing.Size(56, 13); this.lblShipCostLabel.TabIndex = 16; this.lblShipCostLabel.Text = "Ship Cost:"; // // lblDesignFee // this.lblDesignFee.Location = new System.Drawing.Point(106, 48); this.lblDesignFee.Name = "lblDesignFee"; this.lblDesignFee.Size = new System.Drawing.Size(74, 16); this.lblDesignFee.TabIndex = 15; this.lblDesignFee.Text = "888,888 cr."; this.lblDesignFee.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblDesignFeeLabel // this.lblDesignFeeLabel.AutoSize = true; this.lblDesignFeeLabel.Location = new System.Drawing.Point(8, 48); this.lblDesignFeeLabel.Name = "lblDesignFeeLabel"; this.lblDesignFeeLabel.Size = new System.Drawing.Size(65, 13); this.lblDesignFeeLabel.TabIndex = 14; this.lblDesignFeeLabel.Text = "Design Fee:"; // // btnConstruct // this.btnConstruct.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnConstruct.ForeColor = System.Drawing.SystemColors.ControlText; this.btnConstruct.Location = new System.Drawing.Point(382, 344); this.btnConstruct.Name = "btnConstruct"; this.btnConstruct.Size = new System.Drawing.Size(88, 22); this.btnConstruct.TabIndex = 6; this.btnConstruct.Text = "Construct Ship"; this.btnConstruct.Click += new System.EventHandler(this.btnConstruct_Click); this.btnConstruct.MouseEnter += new System.EventHandler(this.btnConstruct_MouseEnter); this.btnConstruct.MouseLeave += new System.EventHandler(this.btnConstruct_MouseLeave); // // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnCancel.Location = new System.Drawing.Point(286, 344); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(88, 22); this.btnCancel.TabIndex = 5; this.btnCancel.Text = "Cancel Design"; // // boxAllocation // this.boxAllocation.Controls.AddRange(new System.Windows.Forms.Control[] { this.lblPct, this.lblPctLabel, this.numHullStrength, this.lblHullStrenghLabel, this.numCargoBays, this.numCrewQuarters, this.numFuelTanks, this.numShieldSlots, this.numGadgetSlots, this.numWeaponSlots, this.lblCargoBays, this.lblFuelTanks, this.lblCrewQuarters, this.lblShieldSlots, this.lblGadgetSlots, this.lblWeaponsSlots, this.lblUnitsUsedLabel, this.lblUnitsUsed}); this.boxAllocation.Location = new System.Drawing.Point(286, 0); this.boxAllocation.Name = "boxAllocation"; this.boxAllocation.Size = new System.Drawing.Size(184, 226); this.boxAllocation.TabIndex = 3; this.boxAllocation.TabStop = false; this.boxAllocation.Text = "Space Allocation"; // // lblPct // this.lblPct.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.lblPct.ForeColor = System.Drawing.Color.Red; this.lblPct.Location = new System.Drawing.Point(110, 204); this.lblPct.Name = "lblPct"; this.lblPct.Size = new System.Drawing.Size(34, 13); this.lblPct.TabIndex = 19; this.lblPct.Text = "888%"; this.lblPct.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblPctLabel // this.lblPctLabel.AutoSize = true; this.lblPctLabel.Location = new System.Drawing.Point(8, 204); this.lblPctLabel.Name = "lblPctLabel"; this.lblPctLabel.Size = new System.Drawing.Size(54, 13); this.lblPctLabel.TabIndex = 18; this.lblPctLabel.Text = "% of Max:"; // // numHullStrength // this.numHullStrength.BackColor = System.Drawing.Color.White; this.numHullStrength.Location = new System.Drawing.Point(110, 64); this.numHullStrength.Maximum = new System.Decimal(new int[] { 9999, 0, 0, 0}); this.numHullStrength.Name = "numHullStrength"; this.numHullStrength.ReadOnly = true; this.numHullStrength.Size = new System.Drawing.Size(64, 20); this.numHullStrength.TabIndex = 1; this.numHullStrength.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numHullStrength.Enter += new System.EventHandler(this.num_ValueEnter); this.numHullStrength.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // lblHullStrenghLabel // this.lblHullStrenghLabel.AutoSize = true; this.lblHullStrenghLabel.Location = new System.Drawing.Point(8, 66); this.lblHullStrenghLabel.Name = "lblHullStrenghLabel"; this.lblHullStrenghLabel.Size = new System.Drawing.Size(70, 13); this.lblHullStrenghLabel.TabIndex = 13; this.lblHullStrenghLabel.Text = "Hull Strengh:"; // // numCargoBays // this.numCargoBays.BackColor = System.Drawing.Color.White; this.numCargoBays.Location = new System.Drawing.Point(110, 16); this.numCargoBays.Maximum = new System.Decimal(new int[] { 999, 0, 0, 0}); this.numCargoBays.Name = "numCargoBays"; this.numCargoBays.ReadOnly = true; this.numCargoBays.Size = new System.Drawing.Size(64, 20); this.numCargoBays.TabIndex = 3; this.numCargoBays.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numCargoBays.Enter += new System.EventHandler(this.num_ValueEnter); this.numCargoBays.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // numCrewQuarters // this.numCrewQuarters.BackColor = System.Drawing.Color.White; this.numCrewQuarters.Location = new System.Drawing.Point(110, 160); this.numCrewQuarters.Minimum = new System.Decimal(new int[] { 1, 0, 0, 0}); this.numCrewQuarters.Name = "numCrewQuarters"; this.numCrewQuarters.ReadOnly = true; this.numCrewQuarters.Size = new System.Drawing.Size(64, 20); this.numCrewQuarters.TabIndex = 4; this.numCrewQuarters.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numCrewQuarters.Value = new System.Decimal(new int[] { 1, 0, 0, 0}); this.numCrewQuarters.Enter += new System.EventHandler(this.num_ValueEnter); this.numCrewQuarters.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // numFuelTanks // this.numFuelTanks.BackColor = System.Drawing.Color.White; this.numFuelTanks.Location = new System.Drawing.Point(110, 40); this.numFuelTanks.Name = "numFuelTanks"; this.numFuelTanks.ReadOnly = true; this.numFuelTanks.Size = new System.Drawing.Size(64, 20); this.numFuelTanks.TabIndex = 2; this.numFuelTanks.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numFuelTanks.Enter += new System.EventHandler(this.num_ValueEnter); this.numFuelTanks.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // numShieldSlots // this.numShieldSlots.BackColor = System.Drawing.Color.White; this.numShieldSlots.Location = new System.Drawing.Point(110, 112); this.numShieldSlots.Name = "numShieldSlots"; this.numShieldSlots.ReadOnly = true; this.numShieldSlots.Size = new System.Drawing.Size(64, 20); this.numShieldSlots.TabIndex = 6; this.numShieldSlots.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numShieldSlots.Enter += new System.EventHandler(this.num_ValueEnter); this.numShieldSlots.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // numGadgetSlots // this.numGadgetSlots.BackColor = System.Drawing.Color.White; this.numGadgetSlots.Location = new System.Drawing.Point(110, 136); this.numGadgetSlots.Name = "numGadgetSlots"; this.numGadgetSlots.ReadOnly = true; this.numGadgetSlots.Size = new System.Drawing.Size(64, 20); this.numGadgetSlots.TabIndex = 7; this.numGadgetSlots.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numGadgetSlots.Enter += new System.EventHandler(this.num_ValueEnter); this.numGadgetSlots.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // numWeaponSlots // this.numWeaponSlots.BackColor = System.Drawing.Color.White; this.numWeaponSlots.Location = new System.Drawing.Point(110, 88); this.numWeaponSlots.Name = "numWeaponSlots"; this.numWeaponSlots.ReadOnly = true; this.numWeaponSlots.Size = new System.Drawing.Size(64, 20); this.numWeaponSlots.TabIndex = 5; this.numWeaponSlots.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numWeaponSlots.Enter += new System.EventHandler(this.num_ValueEnter); this.numWeaponSlots.ValueChanged += new System.EventHandler(this.num_ValueChanged); // // lblCargoBays // this.lblCargoBays.AutoSize = true; this.lblCargoBays.Location = new System.Drawing.Point(8, 18); this.lblCargoBays.Name = "lblCargoBays"; this.lblCargoBays.Size = new System.Drawing.Size(66, 13); this.lblCargoBays.TabIndex = 5; this.lblCargoBays.Text = "Cargo Bays:"; // // lblFuelTanks // this.lblFuelTanks.AutoSize = true; this.lblFuelTanks.Location = new System.Drawing.Point(8, 42); this.lblFuelTanks.Name = "lblFuelTanks"; this.lblFuelTanks.Size = new System.Drawing.Size(41, 13); this.lblFuelTanks.TabIndex = 4; this.lblFuelTanks.Text = "Range:"; // // lblCrewQuarters // this.lblCrewQuarters.AutoSize = true; this.lblCrewQuarters.Location = new System.Drawing.Point(8, 162); this.lblCrewQuarters.Name = "lblCrewQuarters"; this.lblCrewQuarters.Size = new System.Drawing.Size(81, 13); this.lblCrewQuarters.TabIndex = 3; this.lblCrewQuarters.Text = "Crew Quarters:"; // // lblShieldSlots // this.lblShieldSlots.AutoSize = true; this.lblShieldSlots.Location = new System.Drawing.Point(8, 114); this.lblShieldSlots.Name = "lblShieldSlots"; this.lblShieldSlots.Size = new System.Drawing.Size(67, 13); this.lblShieldSlots.TabIndex = 2; this.lblShieldSlots.Text = "Shield Slots:"; // // lblGadgetSlots // this.lblGadgetSlots.AutoSize = true; this.lblGadgetSlots.Location = new System.Drawing.Point(8, 138); this.lblGadgetSlots.Name = "lblGadgetSlots"; this.lblGadgetSlots.Size = new System.Drawing.Size(73, 13); this.lblGadgetSlots.TabIndex = 1; this.lblGadgetSlots.Text = "Gadget Slots:"; // // lblWeaponsSlots // this.lblWeaponsSlots.AutoSize = true; this.lblWeaponsSlots.Location = new System.Drawing.Point(8, 90); this.lblWeaponsSlots.Name = "lblWeaponsSlots"; this.lblWeaponsSlots.Size = new System.Drawing.Size(78, 13); this.lblWeaponsSlots.TabIndex = 0; this.lblWeaponsSlots.Text = "Weapon Slots:"; // // ilShipyardLogos // this.ilShipyardLogos.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; this.ilShipyardLogos.ImageSize = new System.Drawing.Size(80, 80); this.ilShipyardLogos.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilShipyardLogos.ImageStream"))); this.ilShipyardLogos.TransparentColor = System.Drawing.Color.Black; // // dlgOpen // this.dlgOpen.Filter = "Windows Bitmaps (*.bmp)|*bmp"; this.dlgOpen.Title = "Open Ship Image"; // // lblDisabledPct // this.lblDisabledPct.BackColor = System.Drawing.SystemColors.Info; this.lblDisabledPct.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.lblDisabledPct.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.lblDisabledPct.Location = new System.Drawing.Point(154, 182); this.lblDisabledPct.Name = "lblDisabledPct"; this.lblDisabledPct.Size = new System.Drawing.Size(276, 20); this.lblDisabledPct.TabIndex = 8; this.lblDisabledPct.Text = "Your % of Max must be less than or equal to 100%."; this.lblDisabledPct.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.lblDisabledPct.Visible = false; // // dlgSave // this.dlgSave.DefaultExt = "sst"; this.dlgSave.FileName = "CustomShip.sst"; this.dlgSave.Filter = "SpaceTrader Ship Template Files (*.sst)|*.sst"; this.dlgSave.Title = "Save Ship Template"; // // lblDisabledName // this.lblDisabledName.BackColor = System.Drawing.SystemColors.Info; this.lblDisabledName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.lblDisabledName.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblDisabledName.Location = new System.Drawing.Point(96, 222); this.lblDisabledName.Name = "lblDisabledName"; this.lblDisabledName.Size = new System.Drawing.Size(170, 20); this.lblDisabledName.TabIndex = 7; this.lblDisabledName.Text = "You must enter a Ship Name."; this.lblDisabledName.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.lblDisabledName.Visible = false; // // Form_Shipyard // this.AcceptButton = this.btnConstruct; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CancelButton = this.btnCancel; this.ClientSize = new System.Drawing.Size(478, 375); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.lblDisabledPct, this.boxWelcome, this.lblDisabledName, this.boxAllocation, this.boxCosts, this.boxInfo, this.btnCancel, this.btnConstruct}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "Form_Shipyard"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Ship Design at XXXX Shipyards"; this.boxWelcome.ResumeLayout(false); this.boxInfo.ResumeLayout(false); this.boxCosts.ResumeLayout(false); this.boxAllocation.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.numHullStrength)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numCargoBays)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numCrewQuarters)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numFuelTanks)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numShieldSlots)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numGadgetSlots)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numWeaponSlots)).EndInit(); this.ResumeLayout(false); } #endregion private bool ConstructButtonEnabled() { return (shipyard.PercentOfMaxUnits <= 100 && txtName.Text.Length > 0); } private Bitmap GetImageFile(string fileName) { Bitmap image = null; try { image = new Bitmap(fileName); } catch (Exception ex) { FormAlert.Alert(AlertType.FileErrorOpen, this, fileName, ex.Message); } return image; } private void LoadSelectedTemplate() { if (typeof(ShipTemplate).IsInstanceOfType(selTemplate.SelectedItem)) { loading = true; ShipTemplate template = (ShipTemplate)selTemplate.SelectedItem; if (template.Name == Strings.ShipNameCurrentShip) txtName.Text = game.Commander.Ship.Name; else if (template.Name.EndsWith(Strings.ShipNameTemplateSuffixDefault) || template.Name.EndsWith(Strings.ShipNameTemplateSuffixMinimum)) txtName.Text = ""; else txtName.Text = template.Name; selSize.SelectedIndex = Math.Max(0, sizes.IndexOf(template.Size)); imgIndex = template.ImageIndex == (int)ShipType.Custom ? imgTypes.Length - 1 : template.ImageIndex; if (template.Images != null) customImages = template.Images; else customImages = game.ParentWindow.CustomShipImages; numCargoBays.Value = template.CargoBays; numFuelTanks.Value = Math.Min(Math.Max(numFuelTanks.Minimum, template.FuelTanks), numFuelTanks.Maximum); numHullStrength.Value = Math.Min(Math.Max(numHullStrength.Minimum, template.HullStrength), numHullStrength.Maximum); numWeaponSlots.Value = template.WeaponSlots; numShieldSlots.Value = template.ShieldSlots; numGadgetSlots.Value = template.GadgetSlots; numCrewQuarters.Value = Math.Max(numCrewQuarters.Minimum, template.CrewQuarters); UpdateShip(); UpdateCalculatedFigures(); if (selTemplate.Items[0].ToString() == Strings.ShipNameModified) selTemplate.Items.RemoveAt(0); loading = false; } } private void LoadSizes() { sizes = new ArrayList(6); foreach (Size size in shipyard.AvailableSizes) { sizes.Add(size); selSize.Items.Add(Functions.StringVars(Strings.ShipyardSizeItem, Strings.Sizes[(int)size], Functions.Multiples(Shipyard.MAX_UNITS[(int)size], Strings.ShipyardUnit))); } } private void LoadTemplateList() { ShipTemplate currentShip = new ShipTemplate(game.Commander.Ship, Strings.ShipNameCurrentShip); selTemplate.Items.Add(currentShip); selTemplate.Items.Add(Consts.ShipTemplateSeparator); // Add the minimal sizes templates. foreach (Size size in sizes) selTemplate.Items.Add(new ShipTemplate(size, Strings.Sizes[(int)size] + Strings.ShipNameTemplateSuffixMinimum)); selTemplate.Items.Add(Consts.ShipTemplateSeparator); // Add the buyable ship spec templates. foreach (ShipSpec spec in Consts.ShipSpecs) { if (sizes.Contains(spec.Size) && (int)spec.Type <= Consts.MaxShip) selTemplate.Items.Add(new ShipTemplate(spec, spec.Name + Strings.ShipNameTemplateSuffixDefault)); } selTemplate.Items.Add(Consts.ShipTemplateSeparator); // Add the user-created templates. ArrayList userTemplates = new ArrayList(); foreach (string fileName in Directory.GetFiles(Consts.CustomTemplatesDirectory, "*.sst")) { ShipTemplate template = new ShipTemplate((Hashtable)Functions.LoadFile(fileName, true, this)); if (sizes.Contains(template.Size)) userTemplates.Add(template); } userTemplates.Sort(); selTemplate.Items.AddRange((ShipTemplate[])userTemplates.ToArray(typeof(ShipTemplate))); selTemplate.SelectedIndex = 0; } private bool SaveButtonEnabled() { return (txtName.Text.Length > 0); } private void SetTemplateModified() { if (!loading) { if (selTemplate.Items[0].ToString() != Strings.ShipNameModified) selTemplate.Items.Insert(0, Strings.ShipNameModified); selTemplate.SelectedIndex = 0; } } private void UpdateAllocation() { bool fuelMinimum = numFuelTanks.Value == numFuelTanks.Minimum; bool hullMinimum = numHullStrength.Value == numHullStrength.Minimum; numFuelTanks.Minimum = shipyard.BaseFuel; numFuelTanks.Increment = shipyard.PerUnitFuel; numFuelTanks.Maximum = Consts.MaxFuelTanks; if (fuelMinimum) numFuelTanks.Value = numFuelTanks.Minimum; numHullStrength.Minimum = shipyard.BaseHull; numHullStrength.Increment = shipyard.PerUnitHull; if (hullMinimum) numHullStrength.Value = numHullStrength.Minimum; numWeaponSlots.Maximum = Consts.MaxSlots; numShieldSlots.Maximum = Consts.MaxSlots; numGadgetSlots.Maximum = Consts.MaxSlots; numCrewQuarters.Maximum = Consts.MaxSlots; } private void UpdateCalculatedFigures() { // Fix the fuel value to be a multiple of the per unit value less the base. int extraFuel = (int)numFuelTanks.Value - shipyard.BaseFuel; if (extraFuel % shipyard.PerUnitFuel > 0 && numFuelTanks.Value < numFuelTanks.Maximum) numFuelTanks.Value = Math.Max(numFuelTanks.Minimum, Math.Min(numFuelTanks.Maximum, (extraFuel + shipyard.PerUnitFuel) / shipyard.PerUnitFuel * shipyard.PerUnitFuel + shipyard.BaseFuel)); // Fix the hull value to be a multiple of the unit value value less the base. int extraHull = (int)numHullStrength.Value - shipyard.BaseHull; if (extraHull % shipyard.PerUnitHull > 0) numHullStrength.Value = Math.Max(numHullStrength.Minimum, (extraHull + shipyard.PerUnitHull) / shipyard.PerUnitHull * shipyard.PerUnitHull + shipyard.BaseHull); shipyard.ShipSpec.CargoBays = (int)numCargoBays.Value; shipyard.ShipSpec.FuelTanks = (int)numFuelTanks.Value; shipyard.ShipSpec.HullStrength = (int)numHullStrength.Value; shipyard.ShipSpec.WeaponSlots = (int)numWeaponSlots.Value; shipyard.ShipSpec.ShieldSlots = (int)numShieldSlots.Value; shipyard.ShipSpec.GadgetSlots = (int)numGadgetSlots.Value; shipyard.ShipSpec.CrewQuarters = (int)numCrewQuarters.Value; shipyard.CalculateDependantVariables(); lblUnitsUsed.Text = shipyard.UnitsUsed.ToString(); lblPct.Text = Functions.FormatPercent(shipyard.PercentOfMaxUnits); if (shipyard.PercentOfMaxUnits >= Shipyard.PENALTY_FIRST_PCT) lblPct.Font = lblSkillLabel.Font; else lblPct.Font = lblPctLabel.Font; if (shipyard.UnitsUsed > shipyard.MaxUnits) lblPct.ForeColor = Color.Red; else if (shipyard.PercentOfMaxUnits >= Shipyard.PENALTY_SECOND_PCT) lblPct.ForeColor = Color.Orange; else if (shipyard.PercentOfMaxUnits >= Shipyard.PENALTY_FIRST_PCT) lblPct.ForeColor = Color.Yellow; else lblPct.ForeColor = lblPctLabel.ForeColor; lblShipCost.Text = Functions.FormatMoney(shipyard.AdjustedPrice); lblDesignFee.Text = Functions.FormatMoney(shipyard.AdjustedDesignFee); lblPenalty.Text = Functions.FormatMoney(shipyard.AdjustedPenaltyCost); lblTradeIn.Text = Functions.FormatMoney(-shipyard.TradeIn); lblTotalCost.Text = Functions.FormatMoney(shipyard.TotalCost); UpdateButtonEnabledState(); } private void UpdateButtonEnabledState() { btnConstruct.ForeColor = ConstructButtonEnabled() ? Color.Black : Color.Gray; btnSave.ForeColor = SaveButtonEnabled() ? Color.Black : Color.Gray; } private void UpdateShip() { shipyard.ShipSpec.ImageIndex = (int)imgTypes[imgIndex]; picShip.Image = (imgIndex > Consts.MaxShip ? customImages[0] : Consts.ShipSpecs[(int)imgTypes[imgIndex]].Image); lblImage.Text = (imgIndex > Consts.MaxShip ? Strings.ShipNameCustomShip : Consts.ShipSpecs[(int)imgTypes[imgIndex]].Name); } #endregion #region Event Handlers private void btnConstruct_Click(object sender, System.EventArgs e) { if (ConstructButtonEnabled()) { if (game.Commander.TradeShip(shipyard.ShipSpec, shipyard.TotalCost, txtName.Text, this)) { Strings.ShipNames[(int)ShipType.Custom] = txtName.Text; if (game.QuestStatusScarab == SpecialEvent.StatusScarabDone) game.QuestStatusScarab = SpecialEvent.StatusScarabNotStarted; // Replace the current custom images with the new ones. if (game.Commander.Ship.ImageIndex == (int)ShipType.Custom) { game.ParentWindow.CustomShipImages = customImages; game.Commander.Ship.UpdateCustomImageOffsetConstants(); } FormAlert.Alert(AlertType.ShipDesignThanks, this, shipyard.Name); Close(); } } } private void btnConstruct_MouseEnter(object sender, System.EventArgs e) { lblDisabledName.Visible = txtName.Text.Length == 0; lblDisabledPct.Visible = shipyard.PercentOfMaxUnits > 100; } private void btnConstruct_MouseLeave(object sender, System.EventArgs e) { lblDisabledName.Visible = false; lblDisabledPct.Visible = false; } private void btnLoad_Click(object sender, System.EventArgs e) { LoadSelectedTemplate(); } private void btnNextImage_Click(object sender, System.EventArgs e) { SetTemplateModified(); imgIndex = (imgIndex + 1) % imgTypes.Length; UpdateShip(); } private void btnPrevImage_Click(object sender, System.EventArgs e) { SetTemplateModified(); imgIndex = (imgIndex + imgTypes.Length - 1) % imgTypes.Length; UpdateShip(); } private void btnSave_Click(object sender, System.EventArgs e) { if (SaveButtonEnabled()) { if (dlgSave.ShowDialog(this) == DialogResult.OK) { ShipTemplate template = new ShipTemplate(shipyard.ShipSpec, txtName.Text); if (imgIndex > Consts.MaxShip) { template.ImageIndex = (int)ShipType.Custom; template.Images = customImages; } else template.ImageIndex = imgIndex; Functions.SaveFile(dlgSave.FileName, template.Serialize(), this); LoadTemplateList(); } } } private void btnSave_MouseEnter(object sender, System.EventArgs e) { lblDisabledName.Visible = txtName.Text.Length == 0; } private void btnSave_MouseLeave(object sender, System.EventArgs e) { lblDisabledName.Visible = false; } private void btnSetCustomImage_Click(object sender, System.EventArgs e) { if (dlgOpen.ShowDialog(this) == DialogResult.OK) { string baseFileName = Path.ChangeExtension(dlgOpen.FileName, null); string ext = Path.GetExtension(dlgOpen.FileName); Bitmap image = GetImageFile(baseFileName + ext); Bitmap imageDamaged = GetImageFile(baseFileName + "d" + ext); Bitmap imageShields = GetImageFile(baseFileName + "s" + ext); Bitmap imageShieldsDamaged = GetImageFile(baseFileName + "sd" + ext); if (image != null && imageDamaged != null && imageShields != null && imageShieldsDamaged != null) { customImages[Consts.ShipImgOffsetNormal] = image; customImages[Consts.ShipImgOffsetDamage] = imageDamaged; customImages[Consts.ShipImgOffsetShield] = imageShields; customImages[Consts.ShipImgOffsetSheildDamage] = imageShieldsDamaged; } imgIndex = imgTypes.Length - 1; UpdateShip(); } } private void num_ValueChanged(object sender, System.EventArgs e) { SetTemplateModified(); UpdateCalculatedFigures(); } private void num_ValueEnter(object sender, System.EventArgs e) { ((NumericUpDown)sender).Select(0, ((NumericUpDown)sender).Value.ToString().Length); } private void selSize_SelectedIndexChanged(object sender, System.EventArgs e) { SetTemplateModified(); shipyard.ShipSpec.Size = (Size)sizes[selSize.SelectedIndex]; UpdateAllocation(); UpdateCalculatedFigures(); } private void txtName_TextChanged(object sender, System.EventArgs e) { SetTemplateModified(); UpdateButtonEnabledState(); } #endregion } }