Esempio n. 1
0
 public HumanTaskDefEscalationToPartAddedEvent(string id, string aggregateId, int version, string deadlineId, string escalationId, ToPart toPart, DateTime updateDateTime) : base(id, aggregateId, version)
 {
     DeadlineId     = deadlineId;
     EscalationId   = escalationId;
     ToPart         = toPart;
     UpdateDateTime = updateDateTime;
 }
 public static ToPartResult ToDto(ToPart p)
 {
     return(new ToPartResult
     {
         Expression = p.Expression,
         Name = p.Name
     });
 }
Esempio n. 3
0
        internal void CrewTransferAction()
        {
            try
            {
                // Both parts have internal models...
                if (FromPart.internalModel != null && ToPart.internalModel != null)
                {
                    if (ToSeat.taken)
                    {
                        // Remove the crew members from the part(s)...
                        RemoveCrewMember(FromCrewMember, FromPart);

                        // Swap places if there is no standing room available
                        if (ToPart.CrewCapacity == ToPart.protoModuleCrew.Count)
                        {
                            RemoveCrewMember(ToCrewMember, ToPart);
                            FromPart.AddCrewmemberAt(ToCrewMember, FromPart.internalModel.seats.IndexOf(FromSeat));
                            // Add the crew members back into the part(s) at their new seats.
                            ToPart.AddCrewmemberAt(FromCrewMember, ToPart.internalModel.seats.IndexOf(ToSeat));
                        }
                        else
                        {
                            // Just move.
                            RemoveCrewMember(FromCrewMember, FromPart);
                            AddCrewMember(FromCrewMember, ToPart);
                        }
                        SMAddon.FireEventTriggers();
                    }
                    else
                    {
                        // Just move.
                        RemoveCrewMember(FromCrewMember, FromPart);
                        ToPart.AddCrewmemberAt(FromCrewMember, ToPart.internalModel.seats.IndexOf(ToSeat));
                        SMAddon.FireEventTriggers();
                    }
                }
                else // one or both parts do not have an internal model
                {
                    // no portraits, so let's just move kerbals...
                    if (ToCrewMember != null)
                    {
                        RemoveCrewMember(FromCrewMember, FromPart);
                        RemoveCrewMember(ToCrewMember, ToPart);
                        AddCrewMember(FromCrewMember, ToPart);
                        AddCrewMember(ToCrewMember, FromPart);
                    }
                    else
                    {
                        RemoveCrewMember(FromCrewMember, FromPart);
                        AddCrewMember(FromCrewMember, ToPart);
                    }
                    SMAddon.FireEventTriggers();
                }
                if (SMSettings.EnableStockCrewXfer)
                {
                    // Now let's deal with third party mod support...
                    SourceAction        = new GameEvents.HostedFromToAction <ProtoCrewMember, Part>(FromCrewMember, FromPart, ToPart);
                    FireSourceXferEvent = true;

                    //If a swap, we need to handle that too...
                    if (ToCrewMember != null)
                    {
                        TargetAction        = new GameEvents.HostedFromToAction <ProtoCrewMember, Part>(ToCrewMember, ToPart, FromPart);
                        FireTargetXferEvent = true;
                    }
                }

                FromPart.vessel.SpawnCrew();

                // not sure if these help.   We have been experiencing issues with "ghost" kerbals & EVAs/docking/undocking after Crew Moves.
                // trying this to see if it "cleans up" any internal tracking inside of KSP...
                FromPart.RegisterCrew();
                ToPart.RegisterCrew();

                SMAddon.SmVessel.RespawnCrew();
                SMAddon.SmVessel.TransferCrewObj.IvaDelayActive = true;
            }
            catch (Exception ex)
            {
                SmUtils.LogMessage(
                    $"in CrewTransferAction.  Error moving crewmember.  Error:  {ex.Message} \r\n\r\n{ex.StackTrace}", SmUtils.LogType.Error, true);
            }
        }