コード例 #1
0
 public static void BackgroundUpdate(Vessel vessel, ProtoPartSnapshot p, ProtoPartModuleSnapshot m, GravityRing ring, Resource_Info ec, double elapsed_s)
 {
     // if the module is either non-deployable or deployed
     if (ring.deploy.Length == 0 || Lib.Proto.GetBool(m, "deployed"))
     {
         // consume ec
         ec.Consume(ring.ec_rate * elapsed_s);
     }
 }
コード例 #2
0
        public static void BackgroundUpdate(Vessel v, ProtoPartModuleSnapshot m, Experiment exp, Resource_Info ec, double elapsed_s)
        {
            // if experiment is active
            if (Lib.Proto.GetBool(m, "recording"))
            {
                // detect conditions
                // - comparing against amount in previous step
                bool   has_ec       = ec.amount > double.Epsilon;
                bool   has_operator = new CrewSpecs(exp.crew).Check(v);
                string sit          = Science.Situation(v, exp.situations);

                // deduce issues
                string issue = string.Empty;
                if (sit.Length == 0)
                {
                    issue = "invalid situation";
                }
                else if (!has_operator)
                {
                    issue = "no operator";
                }
                else if (!has_ec)
                {
                    issue = "missing <b>EC</b>";
                }
                Lib.Proto.Set(m, "issue", issue);

                // if there are no issues
                if (issue.Length == 0)
                {
                    // generate subject id
                    string subject_id = Science.Generate_Subject(exp.experiment, v.mainBody, sit, Science.Biome(v, sit), Science.Multiplier(v, sit));

                    // record in drive
                    if (exp.transmissible)
                    {
                        DB.Vessel(v).drive.Record_File(subject_id, exp.data_rate * elapsed_s);
                    }
                    else
                    {
                        DB.Vessel(v).drive.Record_Sample(subject_id, exp.data_rate * elapsed_s);
                    }

                    // consume ec
                    ec.Consume(exp.ec_rate * elapsed_s);
                }
            }
        }
コード例 #3
0
        public void FixedUpdate()
        {
            // do nothing in the editor
            if (Lib.IsEditor())
            {
                return;
            }

            // if the module is either non-deployable or deployed
            if (deploy.Length == 0 || deployed)
            {
                // get resource handler
                Resource_Info ec = ResourceCache.Info(vessel, "ElectricCharge");

                // consume ec
                ec.Consume(ec_rate * Kerbalism.elapsed_s);
            }
        }
コード例 #4
0
        public void FixedUpdate()
        {
            // do nothing in the editor
            if (Lib.IsEditor())
            {
                return;
            }

            // do nothing if vessel is invalid
            if (!Cache.VesselInfo(vessel).is_valid)
            {
                return;
            }

            // get ec handler
            Resource_Info ec = ResourceCache.Info(vessel, "ElectricCharge");

            // if experiment is active
            if (recording)
            {
                // detect conditions
                // - comparing against amount in previous step
                bool   has_ec       = ec.amount > double.Epsilon;
                bool   has_operator = operator_cs.Check(vessel);
                string sit          = Science.Situation(vessel, situations);

                // deduce issues
                issue = string.Empty;
                if (sit.Length == 0)
                {
                    issue = "invalid situation";
                }
                else if (!has_operator)
                {
                    issue = "no operator";
                }
                else if (!has_ec)
                {
                    issue = "missing <b>EC</b>";
                }

                // if there are no issues
                if (issue.Length == 0)
                {
                    // generate subject id
                    string subject_id = Science.Generate_Subject(experiment, vessel.mainBody, sit, Science.Biome(vessel, sit), Science.Multiplier(vessel, sit));

                    // record in drive
                    if (transmissible)
                    {
                        DB.Vessel(vessel).drive.Record_File(subject_id, data_rate * Kerbalism.elapsed_s);
                    }
                    else
                    {
                        DB.Vessel(vessel).drive.Record_Sample(subject_id, data_rate * Kerbalism.elapsed_s);
                    }

                    // consume ec
                    ec.Consume(ec_rate * Kerbalism.elapsed_s);
                }
            }
        }
コード例 #5
0
        public static void BackgroundUpdate(Vessel v, ProtoPartSnapshot p, ProtoPartModuleSnapshot antenna, Vessel_Info vi, Resource_Info ec, double elapsed_s)
        {
            if (Features.Deploy)
            {
                bool isDeploy;
                bool has_ec = ec.amount > double.Epsilon;

                ProtoPartModuleSnapshot deployModule = p.FindModule("AntennaDeploy");
                ProtoPartModuleSnapshot anim;

                if (deployModule == null)
                {
                    Lib.Debug("AntennaDeploy is null. Load vessel to try fix it");
                    return;
                }

                // if it is transmitting, leave with Kerbalism
                if (Features.Science && (vi.transmitting.Length > 0 || vi.relaying.Length > 0))
                {
                    return;
                }

                if (has_ec)
                {
                    if (Features.Signal)
                    {
                        anim = p.FindModule("ModuleAnimationGroup");
                        if (anim != null)
                        {
                            isDeploy = Lib.Proto.GetBool(anim, "isDeployed");
                        }
                        else
                        {
                            isDeploy = true;
                        }

                        if (!Settings.ExtendedAntenna || isDeploy)
                        {
                            Lib.Proto.Set(antenna, "extended", true);
                            ec.Consume(Lib.Proto.GetDouble(deployModule, "ecCost") * elapsed_s);
                        }
                    }
                    else if (Features.KCommNet)
                    {
                        anim = p.FindModule("ModuleDeployableAntenna");
                        if (anim != null)
                        {
                            isDeploy = Lib.Proto.GetString(anim, "deployState") == "EXTENDED";
                        }
                        else
                        {
                            isDeploy = true;
                        }

                        if (isDeploy)
                        {
                            Lib.Proto.Set(antenna, "canComm", true);
                            ec.Consume(Lib.Proto.GetDouble(deployModule, "ecCost") * elapsed_s);
                        }
                    }
                }
                else
                {
                    if (Features.Signal)
                    {
                        Lib.Proto.Set(antenna, "extended", false);
                    }
                    else if (Features.KCommNet)
                    {
                        Lib.Proto.Set(antenna, "canComm", false);
                    }
                }
            }
        }