示例#1
0
        public void Initialize(ProtoCrewMember.Gender?gender = null, string name = null)
        {
            if (name != null)
            {
                this.name = name;
                _pcm      = pcm;
            }

            if (gender != null)
            {
                this.gender = gender.Value;
            }
            else
            {
                this.gender = RandomGender();
            }

            if (_pcm != null)
            {
                SetCrew(_pcm);
            }
            else
            {
                this.name       = name ?? KerbalName(this.gender);
                experienceTrait = RandomExperienceTrait();
                kerbalType      = ProtoCrewMember.KerbalType.Crew;
            }
        }
示例#2
0
        public Kerbal(ProtoCrewMember.Gender gender, string name)
        {
            Initialize(gender, name);

            this.gender = gender;
            this.name   = name;
        }
        public override bool Load(ConfigNode configNode)
        {
            // Load base class
            bool valid = base.Load(configNode);

            if (configNode.HasValue("passengerName"))
            {
                LoggingUtil.LogWarning(this, "The passengerName and gender attributes are obsolete since Contract Configurator 1.9.0, use kerbal instead.");
                valid &= ConfigNodeUtil.ParseValue<List<string>>(configNode, "passengerName", x => passengerName = x, this, new List<string>());
                valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender>(configNode, "gender", x => gender = x, this, Kerbal.RandomGender());
                valid &= ConfigNodeUtil.ParseValue<string>(configNode, "experienceTrait", x => experienceTrait = x, this, Kerbal.RandomExperienceTrait());

                legacy = true;
            }
            else
            {
                valid &= ConfigNodeUtil.ParseValue<List<Kerbal>>(configNode, "kerbal", x => kerbals = x, this, new List<Kerbal>());
                legacy = false;
            }

            valid &= ConfigNodeUtil.ParseValue<int>(configNode, "count", x => count = x, this, 1, x => Validation.GE(x, 1));
            valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType>(configNode, "kerbalType", x => kerbalType = x, this, ProtoCrewMember.KerbalType.Tourist);

            return valid;
        }
        public Kerbal(ProtoCrewMember.Gender gender, string name)
        {
            Initialize(gender, name);

            this.gender = gender;
            this.name = name;
        }
示例#5
0
 public Head(Mesh mesh, Material material, string name, ProtoCrewMember.Gender gender)
 {
     this.name     = name;
     this.mesh     = mesh;
     this.material = material;
     this.gender   = gender;
 }
示例#6
0
 public Skin(string name)
 {
     Name     = name;
     Gender   = Util.HasSuffix(name, 'f') ? Gender.Female : Gender.Male;
     Eyeless  = Util.HasSuffix(name, 'e');
     Excluded = Util.HasSuffix(name, 'x');
 }
            public void SelectKerbal()
            {
                if (kerbalSelected)
                {
                    return;
                }
                kerbalSelected = true;

                // First, try to get a Kerbal that matches the name
                if (!string.IsNullOrEmpty(characterName))
                {
                    kerbal = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == characterName).FirstOrDefault();
                }
                // Now grab from the active vessel
                else if (kerbal == null && FlightGlobals.ActiveVessel != null)
                {
                    kerbal = FlightGlobals.ActiveVessel.GetVesselCrew().Where(pcm => !excludeName.Contains(pcm.name)).ElementAtOrDefault(crewIndex);

                    if (kerbal != null)
                    {
                        characterName = kerbal.name;
                    }
                }

                if (kerbal == null && string.IsNullOrEmpty(characterName))
                {
                    System.Random r = new System.Random();
                    gender        = r.Next(2) == 0 ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female;
                    characterName = Kerbal.KerbalName(gender);
                }
            }
示例#8
0
 public Kerbal(Kerbal k)
 {
     _pcm            = k._pcm;
     name            = k.name;
     gender          = k.gender;
     experienceTrait = k.experienceTrait;
     kerbalType      = k.kerbalType;
 }
示例#9
0
        public Kerbal(ProtoCrewMember.Gender gender, string name, string experienceTrait)
        {
            Initialize(gender, name);

            this.gender          = gender;
            this.name            = name;
            this.experienceTrait = experienceTrait;
        }
        public Kerbal(ProtoCrewMember.Gender gender, string name, string experienceTrait)
        {
            Initialize(gender, name);

            this.gender = gender;
            this.name = name;
            this.experienceTrait = experienceTrait;
        }
 public Kerbal(Kerbal k)
 {
     _pcm = k._pcm;
     name = k.name;
     gender = k.gender;
     experienceTrait = k.experienceTrait;
     kerbalType = k.kerbalType;
 }
            public override void OnLoad(ConfigNode configNode)
            {
                base.OnLoad(configNode);

                crewIndex   = ConfigNodeUtil.ParseValue <int>(configNode, "crewIndex");
                excludeName = ConfigNodeUtil.ParseValue <List <string> >(configNode, "excludeName", new List <string>());
                gender      = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(configNode, "gender", ProtoCrewMember.Gender.Male);
            }
示例#13
0
 public void SetCrew(ProtoCrewMember pcm)
 {
     this._pcm       = pcm;
     gender          = pcm.gender;
     name            = pcm.name;
     experienceTrait = pcm.experienceTrait.TypeName;
     kerbalType      = pcm.type;
 }
        void crewWindow(int windowID)
        {
            GUILayout.Label("Create a crew:    ", HighLogic.Skin.label);
            GUILayout.BeginHorizontal();
            GUILayout.Label("Name:   ", HighLogic.Skin.label);
            crewName = GUILayout.TextField(crewName, HighLogic.Skin.textField);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Gender: ", HighLogic.Skin.label);
            if (GUILayout.Button(genderButton.ToString(), HighLogic.Skin.button))
            {
                if (genderButton == ProtoCrewMember.Gender.Male)
                {
                    genderButton = ProtoCrewMember.Gender.Female;
                }
                else
                {
                    genderButton = ProtoCrewMember.Gender.Male;
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("trait:      ", HighLogic.Skin.label);
            if (GUILayout.Button(traitButton, HighLogic.Skin.button))
            {
                if (traitButton == "Pilot")
                {
                    traitButton = "Engineer";
                }
                else
                {
                    if (traitButton == "Scientist")
                    {
                        traitButton = "Pilot";
                    }
                    else
                    {
                        traitButton = "Scientist";
                    }
                }
            }
            GUILayout.EndHorizontal();
            if (GUILayout.Button("create your kerbal", HighLogic.Skin.button))
            {
                for (int i = FlightGlobals.Vessels.Count - 1; i >= 0; --i)
                {
                    Vessel station = FlightGlobals.Vessels[i];
                    if (station.vesselType == VesselType.Station)
                    {
                        setResourcesAmount(station);
                    }
                }
                generateCrew(traitButton, genderButton);
                HighLogic.CurrentGame.Parameters.SpaceCenter.CanGoToMissionControl = true;
            }
        }
 internal ProtoCustomVeteran(ConfigNode config)
 {
     name      = config.GetValue("name");
     gender    = (ProtoCrewMember.Gender)ConfigNode.ParseEnum(typeof(ProtoCrewMember.Gender), config.GetValue("gender"));
     trait     = config.GetValue("trait");
     isBadass  = bool.Parse(config.GetValue("isBadass"));
     courage   = float.Parse(config.GetValue("courage"));
     stupidity = float.Parse(config.GetValue("stupidity"));
 }
示例#16
0
 public KerbalModel(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name        = kerbal.name;
     Stupidity   = kerbal.stupidity;
     Courage     = kerbal.courage;
     Badass      = kerbal.isBadass;
     Gender      = kerbal.gender;
     Type        = kerbal.type;
     IsNew       = isNew;
 }
示例#17
0
 public ModKerbal(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name = kerbal.name;
     Stupidity = kerbal.stupidity;
     Courage = kerbal.courage;
     Badass = kerbal.isBadass;
     Title = kerbal.experienceTrait.Title;
     Gender = kerbal.gender;
     IsNew = isNew;
 }
示例#18
0
 public ModKerbal(ProtoCrewMember kerbal, bool isNew)
 {
     Kerbal = kerbal;
       Name = kerbal.name;
       Stupidity = kerbal.stupidity;
       Courage = kerbal.courage;
       Badass = kerbal.isBadass;
       Trait = kerbal.trait;
       Gender = kerbal.gender;
       IsNew = isNew;
 }
        internal static void DisplaySelectGender()
        {
            GUILayout.BeginHorizontal();
            var isMale = ProtoCrewMember.Gender.Male == Gender;

            GUILayout.Label("Gender:", GUILayout.Width(80));
            isMale = GUILayout.Toggle(isMale, ProtoCrewMember.Gender.Male.ToString(), GUILayout.Width(70));
            isMale = GUILayout.Toggle(!isMale, ProtoCrewMember.Gender.Female.ToString(), GUILayout.Width(80));
            Gender = isMale ? ProtoCrewMember.Gender.Female : ProtoCrewMember.Gender.Male;
            GUILayout.EndHorizontal();
        }
示例#20
0
 public KerbalModel(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name = kerbal.name;
     Stupidity = kerbal.stupidity;
     Courage = kerbal.courage;
     Badass = kerbal.isBadass;
     Gender = kerbal.gender;
     Type = kerbal.type;
     IsNew = isNew;
 }
示例#21
0
 public ModKerbal(ProtoCrewMember kerbal, bool isNew)
 {
     Kerbal    = kerbal;
     Name      = kerbal.name;
     Stupidity = kerbal.stupidity;
     Courage   = kerbal.courage;
     Badass    = kerbal.isBadass;
     Trait     = kerbal.trait;
     Gender    = kerbal.gender;
     IsNew     = isNew;
 }
示例#22
0
        private bool ValidKerbal(ProtoCrewMember.Gender gender, string trait)
        {
            // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault
            switch (gender)
            {
            case ProtoCrewMember.Gender.Female when !allowFemales:
            case ProtoCrewMember.Gender.Male when !allowMales:
                return(false);
            }

            return(traits[trait]);
        }
示例#23
0
 public ModKerbal(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name        = kerbal.name;
     Stupidity   = kerbal.stupidity;
     Courage     = kerbal.courage;
     Badass      = kerbal.isBadass;
     Title       = kerbal.experienceTrait.Title;
     Gender      = kerbal.gender;
     Skill       = kerbal.experienceLevel;
     Experience  = kerbal.experience;
     IsNew       = isNew;
 }
        void generateCrew(string kerbalTrait, ProtoCrewMember.Gender gender)
        {
            ProtoCrewMember crew = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew);

            while (crew.trait != kerbalTrait)
            {
                crew = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew);
            }
            crew.ChangeName(crewName);
            crew.type            = ProtoCrewMember.KerbalType.Crew;
            crew.gender          = gender;
            crew.experienceLevel = 5;
            FlightLog flight = new FlightLog();

            flight.AddEntry("Land,Eeloo");
            flight.AddEntry("Land,Dres");
            flight.AddEntry("Land,Pol");
            flight.AddEntry("Land,Gilly");
            flight.AddEntry("Land,Tylo");
            flight.AddEntry("Land,Bop");
            flight.AddEntry("Land,Vall");
            flight.AddEntry("Land,Laythe");
            crew.careerLog.AddFlight();
            for (int i = flight.Entries.Count - 1; i >= 0; --i)
            {
                FlightLog.Entry entries = flight.Entries[i];
                crew.careerLog.AddEntry(entries);
            }
            for (int i = FlightGlobals.Vessels.Count - 1; i >= 0; --i)
            {
                Vessel vessel = FlightGlobals.Vessels[i];
                if (vessel.vesselName == "Kerbin Station")
                {
                    for (int j = vessel.Parts.Count - 1; j >= 0; --j)
                    {
                        Part part = vessel.Parts[j];
                        if (part.protoModuleCrew.Count < part.CrewCapacity)
                        {
                            part.AddCrewmember(crew);
                            part.Actions.part.SpawnIVA();
                            CameraManager.Instance.SetCameraMap();
                            CameraManager.Instance.SetCameraFlight();
                            break;
                        }
                    }
                    break;
                }
            }
        }
示例#25
0
 internal static void UpdateTo(this ProtoCrewMember kerbal, string name, ProtoCrewMember.Gender gender, string trait, bool veteran, bool isBadass, float courage, float stupidity)
 {
     kerbal.NewName(name);
     kerbal.gender = gender;
     kerbal.type   = veteran ? ProtoCrewMember.KerbalType.Crew : ProtoCrewMember.KerbalType.Applicant;
     KerbalRoster.SetExperienceTrait(kerbal, trait);
     kerbal.veteran   = veteran;
     kerbal.isBadass  = isBadass;
     kerbal.courage   = courage;
     kerbal.stupidity = stupidity;
     if (HighLogic.CurrentGame != null && HighLogic.CurrentGame.Mode != Game.Modes.CAREER)
     {
         kerbal.experienceLevel = 5;
         kerbal.experience      = 99999;
     }
 }
示例#26
0
        public string DefaultLastName(ProtoCrewMember.Gender gender)
        {
            if (!Settings.generateLastNames)
            {
                return("Kerman");
            }

            string lastName = "";

            if (femaleSurnamesExist && gender == ProtoCrewMember.Gender.Female)
            {
                if (flnames1.Length > 0)
                {
                    lastName += flnames1[0];
                }
                if (flnames2.Length > 0)
                {
                    lastName += flnames2[0];
                }
                if (flnames3.Length > 0)
                {
                    lastName += flnames3[0];
                }
            }
            else
            {
                if (lnames1.Length > 0)
                {
                    lastName += lnames1[0];
                }
                if (lnames2.Length > 0)
                {
                    lastName += lnames2[0];
                }
                if (lnames3.Length > 0)
                {
                    lastName += lnames3[0];
                }
            }

            if (string.IsNullOrEmpty(lastName))
            {
                return("Kerman");
            }

            return(lastName);
        }
示例#27
0
        private string MatchSuitToId(ProtoCrewMember.Gender gender, string suit)
        {
            string genderString = gender == ProtoCrewMember.Gender.Female ? "Female" : "Male";

            for (int i = 0; i < SuitVariants.Count; i++)
            {
                SuitCombo sc = SuitVariants.ElementAt(i);
                if (sc.gender != genderString)
                {
                    continue;
                }
                if (sc.name == suit)
                {
                    return(sc.name);
                }
            }
            return(null);
        }
示例#28
0
        public static string KerbalName(ProtoCrewMember.Gender gender)
        {
            string defaultKerbalName = "";

            do
            {
                defaultKerbalName = CrewGenerator.GetRandomName(gender, random);
            }while (nameCache.ContainsKey(defaultKerbalName));

            string kerbalName = "";

            do
            {
                kerbalName = DraftTwitchViewers.KerbalName(defaultKerbalName);
            }while (nameCache.ContainsKey(kerbalName));

            nameCache.Add(kerbalName, 0);
            return(kerbalName);
        }
示例#29
0
        public static Kerbal Load(ConfigNode node)
        {
            string          name = ConfigNodeUtil.ParseValue <string>(node, "name");
            ProtoCrewMember crew = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == name).FirstOrDefault();

            if (crew != null)
            {
                return(new Kerbal(crew));
            }
            else
            {
                ProtoCrewMember.Gender gender         = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", RandomGender());
                string experienceTrait                = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", RandomExperienceTrait());
                ProtoCrewMember.KerbalType kerbalType = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Crew);

                Kerbal k = new Kerbal(gender, name, experienceTrait);
                k.kerbalType = kerbalType;
                return(k);
            }
        }
示例#30
0
        protected override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);
            count            = Convert.ToInt32(node.GetValue("count"));
            removePassengers = ConfigNodeUtil.ParseValue <bool?>(node, "removePassengers", null) ?? true;

            // Legacy support from Contract Configurator 1.8.3
            if (node.HasValue("potentialPassenger"))
            {
                List <string>              passengerNames = ConfigNodeUtil.ParseValue <List <string> >(node, "potentialPassenger", new List <string>());
                ProtoCrewMember.Gender     gender         = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", Kerbal.RandomGender());
                ProtoCrewMember.KerbalType kerbalType     = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Tourist);
                string experienceTrait = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", Kerbal.RandomExperienceTrait());

                kerbals = passengerNames.Select(name => new Kerbal(gender, name, experienceTrait)).ToList();

                foreach (Kerbal kerbal in kerbals)
                {
                    kerbal.kerbalType = kerbalType;
                }
            }
            else
            {
                foreach (ConfigNode kerbalNode in node.GetNodes("KERBAL"))
                {
                    kerbals.Add(Kerbal.Load(kerbalNode));
                }
            }

            foreach (ConfigNode child in node.GetNodes("PASSENGER_DATA"))
            {
                ProtoCrewMember crew   = ConfigNodeUtil.ParseValue <ProtoCrewMember>(child, "passenger");
                bool            loaded = ConfigNodeUtil.ParseValue <bool>(child, "loaded");

                if (crew != null)
                {
                    passengers[crew] = loaded;
                }
            }
        }
示例#31
0
        public bool SetTexture(string originalName, Texture2D texture)
        {
            switch (originalName)
            {
            case "kerbalHead":
                Gender = Gender.Male;
                Head   = Head ?? texture;
                return(true);

            case "kerbalGirl_06_BaseColor":
                Gender = Gender.Female;
                Head   = Head ?? texture;
                return(true);

            case "kerbal_armHands":
                Arms = Arms ?? texture;
                return(true);

            case "eyeballLeft":
                EyeballLeft = EyeballLeft ?? texture;
                return(true);

            case "eyeballRight":
                EyeballRight = EyeballRight ?? texture;
                return(true);

            case "pupilLeft":
                PupilLeft = PupilLeft ?? texture;
                return(true);

            case "pupilRight":
                PupilRight = PupilRight ?? texture;
                return(true);

            default:
                return(false);
            }
        }
示例#32
0
        private static void DisplayRosterListViewer()
        {
            try
            {
                string buttonToolTip = string.Empty;
                GUIStyle hdrlabelStyle = new GUIStyle(GUI.skin.label);
                hdrlabelStyle.fontStyle = FontStyle.Bold;
                GUILayout.BeginVertical();
                GUILayout.BeginHorizontal();
                GUILayout.Label("", hdrlabelStyle, GUILayout.Width(5));
                buttonToolTip = "Click to sort.  Click again to sort the opposite direction.";
                if (GUILayout.Button(new GUIContent("Name", buttonToolTip), hdrlabelStyle, GUILayout.Width(150)))
                    SortRosterList("Name");
                Rect rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                if (GUILayout.Button(new GUIContent("|Gender", buttonToolTip), hdrlabelStyle, GUILayout.Width(50)))
                    SortRosterList("Gender");
                rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                if (GUILayout.Button(new GUIContent("|Profession", buttonToolTip), hdrlabelStyle, GUILayout.Width(75)))
                    SortRosterList("Profession");
                rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                if (GUILayout.Button(new GUIContent("|Skill", buttonToolTip), hdrlabelStyle, GUILayout.Width(35)))
                    SortRosterList("Skill");
                rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                if (GUILayout.Button(new GUIContent("|Experience", buttonToolTip), hdrlabelStyle, GUILayout.Width(75)))
                    SortRosterList("Experience");
                rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                if (GUILayout.Button(new GUIContent("|Status", buttonToolTip), hdrlabelStyle, GUILayout.Width(200)))
                    SortRosterList("Status");
                rect = GUILayoutUtility.GetLastRect();
                if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y);

                GUILayout.EndHorizontal();

                ScrollViewerPosition = GUILayout.BeginScrollView(ScrollViewerPosition, RMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680));
                foreach (ProtoCrewMember kerbal in RMAddon.AllCrew)
                {
                    if (CanDisplayKerbal(kerbal))
                    {
                        GUIStyle labelStyle = null;
                        if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Dead || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Missing)
                            labelStyle = RMStyle.LabelStyleRed;
                        else if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned)
                            labelStyle = RMStyle.LabelStyleYellow;
                        else
                            labelStyle = RMStyle.LabelStyle;

                        // What vessel is this Kerbal Assigned to?
                        string rosterDetails = "";
                        if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned)
                        {
                            foreach (Vessel thisVessel in FlightGlobals.Vessels)
                            {
                                List<ProtoCrewMember> crew = thisVessel.GetVesselCrew();
                                foreach (ProtoCrewMember crewMember in crew)
                                {
                                    if (crewMember == kerbal)
                                    {
                                        rosterDetails = "Assigned - " + thisVessel.GetName().Replace("(unloaded)", "");
                                        break;
                                    }
                                }
                            }
                        }
                        else if (InstalledMods.IsDFInstalled && kerbal.type == ProtoCrewMember.KerbalType.Unowned)
                        {
                            // This kerbal could be frozen.  Lets find out...
                            rosterDetails = GetFrozenDetials(kerbal);
                            labelStyle = RMStyle.LabelStyleCyan;
                        }
                        else
                        {
                            // Since the kerbal has no vessel assignment, lets show what their status...
                            rosterDetails = kerbal.rosterStatus.ToString();
                        }
                        string buttonText = string.Empty;
                        GUILayout.BeginHorizontal();
                        buttonText = kerbal.name;
                        buttonToolTip = "Opens the Edit section for this kerbal.";
                        GUIStyle btnStyle = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? RMStyle.ButtonStyleLeft : RMStyle.ButtonToggledStyleLeft;
                        if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), btnStyle, GUILayout.Width(160)))
                        {
                            if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal)
                            {
                                SelectedKerbal = new ModKerbal(kerbal, false);
                                SetProfessionFlag();
                                gender = SelectedKerbal.Gender;
                            }
                            else
                            {
                                SelectedKerbal = null;
                                gender = ProtoCrewMember.Gender.Male;
                            }
                        }
                        rect = GUILayoutUtility.GetLastRect();
                        if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                            ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y);
                        GUILayout.Label(kerbal.gender.ToString(), labelStyle, GUILayout.Width(50));
                        GUILayout.Label(kerbal.experienceTrait.Title, labelStyle, GUILayout.Width(75));
                        GUILayout.Label(kerbal.experienceLevel.ToString(), labelStyle, GUILayout.Width(35));
                        GUILayout.Label(kerbal.experience.ToString(), labelStyle, GUILayout.Width(75));
                        GUILayout.Label(rosterDetails, labelStyle, GUILayout.Width(240));

                        //if (!RMSettings.RealismMode || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available)
                        //    GUI.enabled = true;
                        //else
                        //    GUI.enabled = false;

                        //buttonText = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? "Edit" : "Cancel";
                        //if (GUI.enabled)
                        //    buttonToolTip = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? "Edit this Kerbal's characteristics" : "Cancel any changes to this Kerbal";
                        //else
                        //    buttonToolTip = "Kerbal is not available at this time.\r\nEditing is disabled";

                        //if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(60)))
                        //{
                        //    if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal)
                        //    {
                        //        SelectedKerbal = new ModKerbal(kerbal, false);
                        //        SetProfessionFlag();
                        //    }
                        //    else
                        //    {
                        //        SelectedKerbal = null;
                        //    }
                        //}

                        //rect = GUILayoutUtility.GetLastRect();
                        //if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                        //    ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y);

                    //    if (HighLogic.LoadedScene != GameScenes.SPACECENTER && ((RMSettings.RealismMode && RMAddon.IsPreLaunch) || !RMSettings.RealismMode) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available && FlightGlobals.ActiveVessel != null && !RMAddon.VesselIsFull(FlightGlobals.ActiveVessel))
                    //    {
                    //        GUI.enabled = true;
                    //        buttonText = "Add";
                    //        buttonToolTip = "Adds a kerbal to the Active Vessel,\r\nin the first available seat.";
                    //    }
                    //    else if ((kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Dead && kerbal.type != ProtoCrewMember.KerbalType.Unowned) || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Missing)
                    //    {
                    //        GUI.enabled = true;
                    //        buttonText = "Respawn";
                    //        buttonToolTip = "Brings a Kerbal back to life.\r\nWill then become available.";
                    //    }
                    //    else if (HighLogic.LoadedScene != GameScenes.SPACECENTER && ((RMSettings.RealismMode && RMAddon.IsPreLaunch) || !RMSettings.RealismMode) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned && FlightGlobals.ActiveVessel.GetVesselCrew().Contains(kerbal))
                    //    {
                    //        GUI.enabled = true;
                    //        buttonText = "Remove";
                    //        buttonToolTip = "Removes a Kerbal from the active vessel.\r\nWill then become available.";
                    //    }
                    //    else if (HighLogic.LoadedScene != GameScenes.SPACECENTER && (RMSettings.RealismMode && !RMAddon.IsPreLaunch) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available)
                    //    {
                    //        GUI.enabled = false;
                    //        buttonText = "Add";
                    //        buttonToolTip = "Add Disabled.  Realism Settings are preventing this action.\r\nTo add a Kerbal, Change your realism Settings.";
                    //    }
                    //    else
                    //    {
                    //        GUI.enabled = false;
                    //        buttonText = "--";
                    //        buttonToolTip = "Kerbal is not available (" + kerbal.rosterStatus + ").\r\nCurrent status does not allow any action.";
                    //    }

                    //    if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(70)))
                    //    {
                    //        if (buttonText == "Add")
                    //            RMAddon.AddCrewMember(kerbal, FlightGlobals.ActiveVessel);
                    //        else if (buttonText == "Respawn")
                    //            RMAddon.RespawnKerbal(kerbal);
                    //        else if (buttonText == "Remove")
                    //        {
                    //            // get part...
                    //            Part part = RMAddon.FindKerbalPart(kerbal);
                    //            if (part != null)
                    //                RMAddon.RemoveCrewMember(kerbal, part);
                    //        }
                    //    }
                    //    rect = GUILayoutUtility.GetLastRect();
                    //    if (Event.current.type == EventType.Repaint && ShowToolTips == true)
                    //        ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y);
                        GUILayout.EndHorizontal();
                        GUI.enabled = true;
                    }
                }

                GUILayout.EndVertical();
                GUILayout.EndScrollView();

            }
            catch (Exception ex)
            {
                Utilities.LogMessage(string.Format(" in RosterListViewer.  Error:  {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true);
            }
        }
        public void Initialize(ProtoCrewMember.Gender? gender = null, string name = null)
        {
            if (name != null)
            {
                this.name = name;
                _pcm = pcm;
            }

            if (gender != null)
            {
                this.gender = gender.Value;
            }
            else
            {
                this.gender = RandomGender();
            }

            if (_pcm != null)
            {
                SetCrew(_pcm);
            }
            else
            {
                this.name = name ?? KerbalName(this.gender);
                experienceTrait = RandomExperienceTrait();
                kerbalType = ProtoCrewMember.KerbalType.Crew;
            }
        }
示例#34
0
        public bool Test(ProtoCrewMember pcm)
        {
            bool res = true;

            if (pcm == null)
            {
                Core.Log("ProtoCrewMember argument in Logic.Test is null!", LogLevel.Error);
                return(res);
            }
            Vessel v = Core.KerbalVessel(pcm);

            if (Situation != null)
            {
                if (v != null)
                {
                    switch (Situation.ToLower())
                    {
                    case "prelaunch":
                        Op(ref res, v.situation == Vessel.Situations.PRELAUNCH);
                        break;

                    case "landed":
                        Op(ref res, v.situation == Vessel.Situations.LANDED);
                        break;

                    case "splashed":
                        Op(ref res, v.situation == Vessel.Situations.SPLASHED);
                        break;

                    case "ground":
                        Op(ref res, (v.situation == Vessel.Situations.LANDED) || (v.situation == Vessel.Situations.SPLASHED));
                        break;

                    case "flying":
                        Op(ref res, v.situation == Vessel.Situations.FLYING);
                        break;

                    case "suborbital":
                        Op(ref res, v.situation == Vessel.Situations.SUB_ORBITAL);
                        break;

                    case "orbiting":
                        Op(ref res, v.situation == Vessel.Situations.ORBITING);
                        break;

                    case "escaping":
                        Op(ref res, v.situation == Vessel.Situations.ESCAPING);
                        break;

                    case "in space":
                        Op(ref res, (v.situation == Vessel.Situations.SUB_ORBITAL) || (v.situation == Vessel.Situations.ORBITING) || (v.situation == Vessel.Situations.ESCAPING));
                        break;
                    }
                }
                else
                {
                    Op(ref res, false);
                }
            }

            if (InSOI != null)
            {
                Op(ref res, v != null ? InSOI.Equals(v.mainBody.name, StringComparison.CurrentCultureIgnoreCase) : false);
            }

            if (KerbalStatus != null)
            {
                Op(ref res, KerbalStatus.Equals(pcm.rosterStatus.ToString(), StringComparison.CurrentCultureIgnoreCase));
            }

            if (!Double.IsNaN(MissionTime))
            {
                Op(ref res, v != null ? v.missionTime >= MissionTime : false);
            }

            if (Gender != null)
            {
                ProtoCrewMember.Gender g = pcm.gender;
                switch (Gender.ToLower())
                {
                case "female":
                    Op(ref res, g == ProtoCrewMember.Gender.Female);
                    break;

                case "male":
                    Op(ref res, g == ProtoCrewMember.Gender.Male);
                    break;
                }
            }

            if (GenderPresent != null)
            {
                ProtoCrewMember.Gender g;
                switch (GenderPresent.ToLower())
                {
                case "female":
                    g = ProtoCrewMember.Gender.Female;
                    break;

                case "male":
                    g = ProtoCrewMember.Gender.Male;
                    break;

                case "same":
                    g = pcm.gender;
                    break;

                case "other":
                    g = pcm.gender == ProtoCrewMember.Gender.Female ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female;
                    break;

                default:
                    Core.Log("Unrecognized value for gender in 'genderPresent = " + GenderPresent + "'. Assuming 'other'.");
                    goto case "other";
                }
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((crewmate.gender == g) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Op(ref res, found);
            }

            if (TraitPresent != null)
            {
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((crewmate.trait.ToLower() == TraitPresent.ToLower()) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Op(ref res, found);
            }

            if (ConditionPresent != null)
            {
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((Core.KerbalHealthList[crewmate].HasCondition(ConditionPresent)) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Op(ref res, found);
            }

            foreach (Logic l in Operands)
            {
                Op(ref res, l.Test(pcm));
            }

            return(res ^ Inverse);
        }
示例#35
0
        public bool Test(ProtoCrewMember pcm)
        {
            Core.Log("Logic.Test('" + pcm.name + "')");
            bool res = true;

            if (pcm == null)
            {
                Core.Log("ProtoCrewMember argument in Logic.Test is null!", Core.LogLevel.Error);
                return(res);
            }
            Vessel v = Core.KerbalVessel(pcm);

            if (Situation != null)
            {
                if (v != null)
                {
                    Core.Log("Checking 'situation = " + Situation + "'. " + v.vesselName + " is " + v.situation);
                    switch (Situation.ToLower())
                    {
                    case "prelaunch": Op(ref res, v.situation == Vessel.Situations.PRELAUNCH); break;

                    case "landed": Op(ref res, v.situation == Vessel.Situations.LANDED); break;

                    case "splashed": Op(ref res, v.situation == Vessel.Situations.SPLASHED); break;

                    case "ground": Op(ref res, (v.situation == Vessel.Situations.LANDED) || (v.situation == Vessel.Situations.SPLASHED)); break;

                    case "flying": Op(ref res, v.situation == Vessel.Situations.FLYING); break;

                    case "suborbital": Op(ref res, v.situation == Vessel.Situations.SUB_ORBITAL); break;

                    case "orbiting": Op(ref res, v.situation == Vessel.Situations.ORBITING); break;

                    case "escaping": Op(ref res, v.situation == Vessel.Situations.ESCAPING); break;

                    case "in space": Op(ref res, (v.situation == Vessel.Situations.SUB_ORBITAL) || (v.situation == Vessel.Situations.ORBITING) || (v.situation == Vessel.Situations.ESCAPING)); break;
                    }
                }
                else
                {
                    Op(ref res, false);
                }
            }
            if (InSOI != null)
            {
                if (v != null)
                {
                    Core.Log("Checking 'inSOI = " + InSOI + "' rule. " + pcm.name + " is in " + v.mainBody?.name + "'s SOI.");
                    Op(ref res, InSOI.Equals(v.mainBody.name, StringComparison.CurrentCultureIgnoreCase));
                }
                else
                {
                    Core.Log("Checking 'inSOI = " + InSOI + "' rule. " + pcm.name + " is not in a vessel => this logic is false.");
                    Op(ref res, false);
                }
            }
            if (KerbalStatus != null)
            {
                Core.Log("Checking 'kerbalStatus = " + KerbalStatus + "'. " + pcm.name + " is " + pcm.rosterStatus);
                Op(ref res, KerbalStatus.Equals(pcm.rosterStatus.ToString(), StringComparison.CurrentCultureIgnoreCase));
            }
            if (!Double.IsNaN(MissionTime))
            {
                Core.Log("Checking 'missionTime = " + MissionTime + "'. MET is " + v?.missionTime + ".");
                if (v != null)
                {
                    Op(ref res, v.missionTime >= MissionTime);
                }
                else
                {
                    Op(ref res, false);
                }
            }
            if (Gender != null)
            {
                ProtoCrewMember.Gender g = pcm.gender;
                Core.Log("Checking condition 'gender = " + Gender + "'. " + pcm.name + " is " + g);
                switch (Gender.ToLower())
                {
                case "female": Op(ref res, g == ProtoCrewMember.Gender.Female); break;

                case "male": Op(ref res, g == ProtoCrewMember.Gender.Male); break;
                }
            }
            if (GenderPresent != null)
            {
                ProtoCrewMember.Gender g;
                switch (GenderPresent.ToLower())
                {
                case "female": g = ProtoCrewMember.Gender.Female; break;

                case "male": g = ProtoCrewMember.Gender.Male; break;

                case "same": g = pcm.gender; break;

                case "other": g = pcm.gender == ProtoCrewMember.Gender.Female ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; break;

                default:
                    Core.Log("Unrecognized value for gender in 'genderPresent = " + GenderPresent + "'. Assuming 'other'.");
                    goto case "other";
                }
                Core.Log("Checking condition 'genderPresent = " + GenderPresent + "'. Looking for " + g + " crewmates.");
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((crewmate.gender == g) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Core.Log(g + " crewmates " + (found ? "" : "not ") + "found.");
                Op(ref res, found);
            }
            if (TraitPresent != null)
            {
                Core.Log("Checking condition 'traitPresent = " + TraitPresent + "'.");
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((crewmate.trait.ToLower() == TraitPresent.ToLower()) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Core.Log(TraitPresent + " crewmates " + (found ? "" : "not ") + "found.");
                Op(ref res, found);
            }
            if (ConditionPresent != null)
            {
                Core.Log("Checking condition 'conditionPresent = " + ConditionPresent + "'.");
                bool found = false;
                if (v != null)
                {
                    foreach (ProtoCrewMember crewmate in v.GetVesselCrew())
                    {
                        if ((Core.KerbalHealthList.Find(crewmate.name).HasCondition(ConditionPresent)) && (crewmate != pcm))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                Core.Log("Crewmates with " + ConditionPresent + (found ? "" : " not") + " found.");
                Op(ref res, found);
            }
            foreach (Logic l in Operands)
            {
                Op(ref res, l.Test(pcm));
            }
            return(res ^ Inverse);
        }
示例#36
0
        private void kHire()
        {
            ProtoCrewMember newKerb   = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew);
            int             loopcount = 0;

            ProtoCrewMember.Gender gender = (KGender == 0)? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female;
            string career = "";

            switch (KCareer)
            {
            case 0: career = "Pilot"; break;

            case 1: career = "Scientist"; break;

            case 2: career = "Engineer"; break;

            default: break;    // throw an error?
            }
            while ((newKerb.experienceTrait.Title != career) || (newKerb.gender != gender))
            {
                HighLogic.CurrentGame.CrewRoster.Remove(newKerb);
                newKerb = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew);
                loopcount++;
            }

            Debug.Log("KSI :: KIA MIA Stat is: " + KDead);
            Debug.Log("KSI :: " + newKerb.experienceTrait.TypeName + " " + newKerb.name + " has been created in: " + loopcount.ToString() + " loops.");
            newKerb.rosterStatus    = ProtoCrewMember.RosterStatus.Available;
            newKerb.experience      = 0;
            newKerb.experienceLevel = 0;
            newKerb.courage         = KCourage / 100;
            newKerb.stupidity       = KStupidity / 100;
            if (KFearless)
            {
                newKerb.isBadass = true;
            }
            Debug.Log("KSI :: Status set to Available, courage and stupidity set, fearless trait set.");

            if (KLevel == 1)
            {
                newKerb.flightLog.AddEntry("Orbit,Kerbin");
                newKerb.flightLog.AddEntry("Suborbit,Kerbin");
                newKerb.flightLog.AddEntry("Flight,Kerbin");
                newKerb.flightLog.AddEntry("Land,Kerbin");
                newKerb.flightLog.AddEntry("Recover");
                newKerb.ArchiveFlightLog();
                newKerb.experience      = 2;
                newKerb.experienceLevel = 1;
                Debug.Log("KSI :: Level set to 1.");
            }
            if (KLevel == 2)
            {
                newKerb.flightLog.AddEntry("Orbit,Kerbin");
                newKerb.flightLog.AddEntry("Suborbit,Kerbin");
                newKerb.flightLog.AddEntry("Flight,Kerbin");
                newKerb.flightLog.AddEntry("Land,Kerbin");
                newKerb.flightLog.AddEntry("Recover");
                newKerb.flightLog.AddEntry("Flyby,Mun");
                newKerb.flightLog.AddEntry("Orbit,Mun");
                newKerb.flightLog.AddEntry("Land,Mun");
                newKerb.flightLog.AddEntry("Flyby,Minmus");
                newKerb.flightLog.AddEntry("Orbit,Minmus");
                newKerb.flightLog.AddEntry("Land,Minmus");
                newKerb.ArchiveFlightLog();
                newKerb.experience      = 8;
                newKerb.experienceLevel = 2;
                Debug.Log("KSI :: Level set to 2.");
            }
            if (ACLevel == 5)
            {
                newKerb.experience      = 9999;
                newKerb.experienceLevel = 5;
                Debug.Log("KSI :: Level set to 5 - Non-Career Mode default.");
            }

            GameEvents.onGUIAstronautComplexSpawn.Fire();
            // Refreshes the AC so that new kerbal shows on the available roster.


            // GameEvents.OnCrewmemberHired.Fire(newKerb, HighLogic.CurrentGame.CrewRoster.GetActiveCrewCount());
            // The previous line was commented out because it was charging the cost determined by my mod plus the stock game cost in the previous event.
            // This lead to even higher costs than if you weren't even using my mod... even if you could hire level 2 kerbals. \


            if (HighLogic.CurrentGame.Mode == Game.Modes.CAREER)
            {
                double myFunds = Funding.Instance.Funds;
                Funding.Instance.AddFunds(-costMath(), TransactionReasons.CrewRecruited);
                Debug.Log("KSI :: Total Funds removed " + costMath());
            }
            Debug.Log("KSI :: Hiring Function Completed.");
        }
示例#37
0
 public Kerbal(ProtoCrewMember.Gender gender)
 {
     Initialize(gender);
 }
            public void SelectKerbal()
            {
                if (kerbalSelected)
                {
                    return;
                }
                kerbalSelected = true;

                // First, try to get a Kerbal that matches the name
                if (!string.IsNullOrEmpty(characterName))
                {
                    kerbal = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == characterName).FirstOrDefault();
                }
                // Now grab from the active vessel
                else if (kerbal == null && FlightGlobals.ActiveVessel != null)
                {
                    kerbal = FlightGlobals.ActiveVessel.GetVesselCrew().Where(pcm => !excludeName.Contains(pcm.name)).ElementAtOrDefault(crewIndex);

                    if (kerbal != null)
                    {
                        characterName = kerbal.name;
                    }
                }

                if (kerbal == null && string.IsNullOrEmpty(characterName))
                {
                    System.Random r = new System.Random();
                    gender = r.Next(2) == 0 ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female;
                    characterName = CrewGenerator.GetRandomName(gender);
                }
            }
        private static void DisplayRosterViewer()
        {
            try
            {
                // We have changed to an Update refreshed list, so I've moved filtering and sorting to the beginning of the routine, instead of the end.
                FilterRosterList(FilteredBy);
                SortRosterList(RMAddon.AllCrewSort);
                DisplayRosterHeader();

                _scrollViewerPosition = GUILayout.BeginScrollView(_scrollViewerPosition, RMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680));
                //foreach (ProtoCrewMember kerbal in RMAddon.AllCrew
                foreach (var rmkerbal in RMAddon.AllCrew)
                {
                    var kerbal     = rmkerbal.Value.Kerbal;
                    var labelStyle = GetLabelStyle(kerbal, rmkerbal);

                    // What vessel is this Kerbal Assigned to?
                    var rosterDetails = "";
                    if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned)
                    {
                        rosterDetails = RosterVesselDetails(rmkerbal.Value);
                    }
                    else if (InstalledMods.IsDfInstalled && kerbal.type == ProtoCrewMember.KerbalType.Unowned)
                    {
                        // This kerbal could be frozen.  Lets find out...
                        rosterDetails = GetFrozenDetials(kerbal);
                        labelStyle    = RMStyle.LabelStyleCyan;
                    }
                    else if (rmkerbal.Value.SalaryContractDispute)
                    {
                        // This kerbal is in contract dispute
                        rosterDetails = rmkerbal.Value.Trait == "Tourist" ? "Contract Cancelled - Strike" : "Contract Dispute";
                    }
                    else
                    {
                        // Since the kerbal has no vessel assignment, lets show what their status...
                        rosterDetails = kerbal.rosterStatus.ToString();
                    }
                    GUILayout.BeginHorizontal();
                    // Column Name (is a Button)
                    var          buttonText    = kerbal.name;
                    const string buttonToolTip = "Opens the Edit section for this kerbal.";
                    var          btnStyle      = SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal ? RMStyle.ButtonStyleLeft : RMStyle.ButtonToggledStyleLeft;
                    if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), btnStyle, GUILayout.Width(160)))
                    {
                        if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal)
                        {
                            //Find the RMKerbal entry for the selected kerbal.
                            SelectedKerbal = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name).Value;
                            if (SelectedKerbal == null)
                            //Didn't find the RMKerbal entry? Should never happen? Create a new one just in case.
                            {
                                SelectedKerbal = new RMKerbal(Planetarium.GetUniversalTime(), kerbal, true, false);
                                RMLifeSpan.Instance.RMKerbals.AllrmKerbals.Add(kerbal.name, SelectedKerbal);
                            }
                            else
                            {
                                SelectedKerbal.IsNew = false;
                            }
                            SetProfessionFlag();
                            Gender      = SelectedKerbal.Gender;
                            DisplayMode = DisplayModes.Edit;
                        }
                        else
                        {
                            SelectedKerbal = null;
                            DisplayMode    = DisplayModes.Index;
                            Gender         = ProtoCrewMember.Gender.Male;
                        }
                    }
                    var rect = GUILayoutUtility.GetLastRect();
                    if (Event.current.type == EventType.Repaint && ShowToolTips)
                    {
                        ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
                    }

                    // Column Gender
                    GUILayout.Label(kerbal.gender.ToString(), labelStyle, GUILayout.Width(50));
                    if (RMLifeSpan.Instance.RMGameSettings.EnableAging)
                    {
                        var kerbalInfo = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name);
                        if (kerbalInfo.Key != null)
                        {
                            GUILayout.Label(kerbalInfo.Value.Age.ToString("##0"), labelStyle, GUILayout.Width(35));
                        }
                    }
                    // Column Salary
                    GUILayout.Label(rmkerbal.Value.SalaryContractDispute ? rmkerbal.Value.RealTrait : kerbal.trait, labelStyle, GUILayout.Width(75));
                    // Column Skill level
                    GUILayout.Label(kerbal.experienceLevel.ToString(), labelStyle, GUILayout.Width(35));
                    // column Experience
                    GUILayout.Label(kerbal.experience.ToString(CultureInfo.InvariantCulture), labelStyle, GUILayout.Width(75));
                    // Column Status
                    var statusWidth = GUILayout.Width(240);
                    if (RMLifeSpan.Instance.RMGameSettings.EnableAging)
                    {
                        statusWidth = GUILayout.Width(200);
                    }
                    GUILayout.Label(rosterDetails, labelStyle, statusWidth);
                    GUILayout.EndHorizontal();
                    GUI.enabled = true;
                }

                GUILayout.EndScrollView();
            }
            catch (Exception ex)
            {
                Utilities.LogMessage(string.Format(" in RosterListViewer.  Error:  {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true);
            }
        }
            public override void OnLoad(ConfigNode configNode)
            {
                base.OnLoad(configNode);

                crewIndex = ConfigNodeUtil.ParseValue<int>(configNode, "crewIndex");
                excludeName = ConfigNodeUtil.ParseValue<List<string>>(configNode, "excludeName", new List<string>());
                gender = ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender>(configNode, "gender", ProtoCrewMember.Gender.Male);
            }
 public void SetCrew(ProtoCrewMember pcm)
 {
     this._pcm = pcm;
     gender = pcm.gender;
     name = pcm.name;
     experienceTrait = pcm.experienceTrait.TypeName;
     kerbalType = pcm.type;
 }
        public void DodgeKerbals(ConfigNode inputNode, Guid protovesselID)
        {
            List <string> takenKerbals = new List <string>();

            foreach (ConfigNode partNode in inputNode.GetNodes("PART"))
            {
                int crewIndex = 0;
                foreach (string currentKerbalName in partNode.GetValues("crew"))
                {
                    if (kerbalToVessel.ContainsKey(currentKerbalName) ? kerbalToVessel[currentKerbalName] != protovesselID : false)
                    {
                        ProtoCrewMember        newKerbal       = null;
                        ProtoCrewMember.Gender newKerbalGender = GetKerbalGender(currentKerbalName);
                        string newExperienceTrait = null;
                        if (HighLogic.CurrentGame.CrewRoster.Exists(currentKerbalName))
                        {
                            ProtoCrewMember oldKerbal = HighLogic.CurrentGame.CrewRoster[currentKerbalName];
                            newKerbalGender    = oldKerbal.gender;
                            newExperienceTrait = oldKerbal.experienceTrait.TypeName;
                        }
                        foreach (ProtoCrewMember possibleKerbal in HighLogic.CurrentGame.CrewRoster.Crew)
                        {
                            bool kerbalOk = true;
                            if (kerbalOk && kerbalToVessel.ContainsKey(possibleKerbal.name) && (takenKerbals.Contains(possibleKerbal.name) || kerbalToVessel[possibleKerbal.name] != protovesselID))
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk && possibleKerbal.gender != newKerbalGender)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk)
                            {
                                newKerbal = possibleKerbal;
                                break;
                            }
                        }
                        int kerbalTries = 0;
                        while (newKerbal == null)
                        {
                            bool kerbalOk = true;
                            ProtoCrewMember.KerbalType kerbalType = ProtoCrewMember.KerbalType.Crew;
                            if (newExperienceTrait == "Tourist")
                            {
                                kerbalType = ProtoCrewMember.KerbalType.Tourist;
                            }
                            if (newExperienceTrait == "Unowned")
                            {
                                kerbalType = ProtoCrewMember.KerbalType.Unowned;
                            }
                            ProtoCrewMember possibleKerbal = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(kerbalType);
                            if (kerbalTries < 200 && possibleKerbal.gender != newKerbalGender)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalTries < 100 && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk)
                            {
                                newKerbal = possibleKerbal;
                            }
                            kerbalTries++;
                        }
                        DarkLog.Debug("Generated dodged kerbal with " + kerbalTries + " tries");
                        partNode.SetValue("crew", newKerbal.name, crewIndex);
                        newKerbal.seatIdx      = crewIndex;
                        newKerbal.rosterStatus = ProtoCrewMember.RosterStatus.Assigned;
                        takenKerbals.Add(newKerbal.name);
                    }
                    else
                    {
                        takenKerbals.Add(currentKerbalName);
                        CreateKerbalIfMissing(currentKerbalName, protovesselID);
                        HighLogic.CurrentGame.CrewRoster[currentKerbalName].rosterStatus = ProtoCrewMember.RosterStatus.Assigned;
                        HighLogic.CurrentGame.CrewRoster[currentKerbalName].seatIdx      = crewIndex;
                    }
                    crewIndex++;
                }
            }
            vesselToKerbal[protovesselID] = takenKerbals;
            foreach (string name in takenKerbals)
            {
                kerbalToVessel[name] = protovesselID;
            }
        }
示例#43
0
 internal static void DisplaySelectGender()
 {
     GUILayout.BeginHorizontal();
     bool isMale = ProtoCrewMember.Gender.Male == gender ? true : false;
     GUILayout.Label("Gender:", GUILayout.Width(80));
     isMale = GUILayout.Toggle(isMale, ProtoCrewMember.Gender.Male.ToString(), GUILayout.Width(70));
     isMale = GUILayout.Toggle(!isMale, ProtoCrewMember.Gender.Female.ToString(), GUILayout.Width(80));
     gender = isMale ? ProtoCrewMember.Gender.Female : ProtoCrewMember.Gender.Male;
     GUILayout.EndHorizontal();
 }