本文整理汇总了C#中Part.IsSepratron方法的典型用法代码示例。如果您正苦于以下问题:C# Part.IsSepratron方法的具体用法?C# Part.IsSepratron怎么用?C# Part.IsSepratron使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Part
的用法示例。
在下文中一共展示了Part.IsSepratron方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HasActiveOrIdleEngineOrTankDescendant
//detect if a part is above an active or idle engine in the part tree
public static bool HasActiveOrIdleEngineOrTankDescendant(Part p, List<int> tankResources)
{
if ((p.State == PartStates.ACTIVE || p.State == PartStates.IDLE)
&& p.IsEngine() && !p.IsSepratron() && p.EngineHasFuel())
{
return true; // TODO: properly check if ModuleEngines is active
}
if ((p is FuelTank) && (((FuelTank)p).fuel > 0)) return true;
if (!p.IsSepratron())
{
for (int i = 0; i < p.Resources.Count; i++)
{
PartResource r = p.Resources[i];
if (r.amount > 0 && r.info.name != "ElectricCharge" && tankResources.Contains(r.info.id))
{
return true;
}
}
}
for (int i = 0; i < p.children.Count; i++)
{
if (HasActiveOrIdleEngineOrTankDescendant(p.children[i], tankResources))
{
return true;
}
}
return false;
}
示例2: HasDeactivatedEngineOrTankDescendant
//detect if a part is above a deactivated engine or fuel tank
public static bool HasDeactivatedEngineOrTankDescendant(Part p)
{
if ((p.State == PartStates.DEACTIVATED) && (p is FuelTank || p.IsEngine()) && !p.IsSepratron())
{
return true; // TODO: yet more ModuleEngine lazy checks
}
//check if this is a new-style fuel tank that's run out of resources:
bool hadResources = false;
bool hasResources = false;
foreach (PartResource r in p.Resources)
{
if (r.name == "ElectricCharge") continue;
if (r.maxAmount > 0) hadResources = true;
if (r.amount > 0) hasResources = true;
}
if (hadResources && !hasResources) return true;
if (p.IsEngine() && !p.EngineHasFuel()) return true;
foreach (Part child in p.children)
{
if (HasDeactivatedEngineOrTankDescendant(child)) return true;
}
return false;
}
示例3: FuelNode
public FuelNode(Part part)
{
bool physicallySignificant = (part.physicalSignificance != Part.PhysicalSignificance.NONE);
if (part.HasModule<ModuleLandingGear>() || part.HasModule<LaunchClamp>())
{
//Landing gear set physicalSignificance = NONE when they enter the flight scene
//Launch clamp mass should be ignored.
physicallySignificant = false;
}
if (physicallySignificant) dryMass = part.mass;
inverseStage = part.inverseStage;
isFuelLine = (part is FuelLine);
isSepratron = part.IsSepratron();
partName = part.partInfo.name;
//note which resources this part has stored
foreach (PartResource r in part.Resources)
{
if (r.info.name != "ElectricCharge") resources[r.info.id] = (float)r.amount;
resourcesUnobtainableFromParent.Add(r.info.id);
}
//record relevant engine stats
ModuleEngines engine = part.Modules.OfType<ModuleEngines>().FirstOrDefault();
if (engine != null)
{
//Only count engines that either are ignited or will ignite in the future:
if (HighLogic.LoadedSceneIsEditor || inverseStage < Staging.CurrentStage || engine.getIgnitionState)
{
//if an engine has been activated early, pretend it is in the current stage:
if (engine.getIgnitionState && inverseStage < Staging.CurrentStage) inverseStage = Staging.CurrentStage;
isEngine = true;
maxThrust = engine.maxThrust;
ispCurve = engine.atmosphereCurve;
propellantSumRatioTimesDensity = engine.propellants.Sum(prop => prop.ratio * MuUtils.ResourceDensity(prop.id));
propellantRatios = engine.propellants.Where(prop => prop.name != "ElectricCharge").ToDictionary(prop => prop.id, prop => prop.ratio);
}
}
//figure out when this part gets decoupled. We do this by looking through this part and all this part's ancestors
//and noting which one gets decoupled earliest (i.e., has the highest inverseStage). Some parts never get decoupled
//and these are assigned decoupledInStage = -1.
decoupledInStage = -1;
Part p = part;
while (true)
{
if (p.IsDecoupler())
{
if (p.inverseStage > decoupledInStage) decoupledInStage = p.inverseStage;
}
if (p.parent == null) break;
else p = p.parent;
}
}
示例4: PartIsEngine
// Find resources burned by engines that will remain after staging (so we wait until tanks are empty before releasing drop tanks)
bool PartIsEngine(Part p)
{
return p.inverseStage >= Staging.CurrentStage && p.IsEngine() && !p.IsSepratron() &&
!p.IsDecoupledInStage(Staging.CurrentStage - 1);
}
示例5: FuelNode
public FuelNode(Part part, bool dVLinearThrust)
{
if (part.IsPhysicallySignificant()) dryMass = part.mass;
inverseStage = part.inverseStage;
isFuelLine = (part is FuelLine);
isSepratron = part.IsSepratron();
partName = part.partInfo.name;
//note which resources this part has stored
foreach (PartResource r in part.Resources)
{
if (r.info.density > 0 && r.name != "IntakeAir") resources[r.info.id] = (float)r.amount;
resourcesUnobtainableFromParent.Add(r.info.id);
}
//record relevant engine stats
ModuleEngines engine = part.Modules.OfType<ModuleEngines>().FirstOrDefault();
if (engine != null)
{
//Only count engines that either are ignited or will ignite in the future:
if (HighLogic.LoadedSceneIsEditor || inverseStage < Staging.CurrentStage || engine.getIgnitionState)
{
//if an engine has been activated early, pretend it is in the current stage:
if (engine.getIgnitionState && inverseStage < Staging.CurrentStage)
inverseStage = Staging.CurrentStage;
isEngine = true;
g = engine.g;
// If we take into account the engine rotation
if (dVLinearThrust)
{
Vector3 thrust = Vector3d.zero;
foreach (var t in engine.thrustTransforms)
thrust -= t.forward / engine.thrustTransforms.Count;
Vector3 fwd = HighLogic.LoadedScene == GameScenes.EDITOR ? Vector3d.up : (HighLogic.LoadedScene == GameScenes.SPH ? Vector3d.forward : (Vector3d)engine.part.vessel.GetTransform().up);
fwdThrustRatio = Vector3.Dot(fwd, thrust);
}
maxThrust = engine.thrustPercentage / 100f * engine.maxThrust;
if (part.Modules.Contains("ModuleEngineConfigs") || part.Modules.Contains("ModuleHybridEngine") || part.Modules.Contains("ModuleHybridEngines"))
{
correctThrust = true;
if (HighLogic.LoadedSceneIsFlight && engine.realIsp > 0.0f)
maxThrust = maxThrust * engine.atmosphereCurve.Evaluate(0) / engine.realIsp; //engine.atmosphereCurve.Evaluate((float)FlightGlobals.ActiveVessel.atmDensity);
}
else
correctThrust = false;
ispCurve = engine.atmosphereCurve;
propellantSumRatioTimesDensity = engine.propellants.Sum(prop => prop.ratio * MuUtils.ResourceDensity(prop.id));
propellantRatios = engine.propellants.Where(prop => PartResourceLibrary.Instance.GetDefinition(prop.id).density > 0 && prop.name != "IntakeAir" ).ToDictionary(prop => prop.id, prop => prop.ratio);
}
}
// And do the same for ModuleEnginesFX :(
ModuleEnginesFX enginefx = part.Modules.OfType<ModuleEnginesFX>().Where(e => e.isEnabled).FirstOrDefault();
if (enginefx != null)
{
//Only count engines that either are ignited or will ignite in the future:
if (HighLogic.LoadedSceneIsEditor || inverseStage < Staging.CurrentStage || enginefx.getIgnitionState)
{
//if an engine has been activated early, pretend it is in the current stage:
if (enginefx.getIgnitionState && inverseStage < Staging.CurrentStage)
inverseStage = Staging.CurrentStage;
isEngine = true;
g = enginefx.g;
// If we take into account the engine rotation
if (dVLinearThrust)
{
Vector3 thrust = Vector3d.zero;
foreach (var t in enginefx.thrustTransforms)
thrust -= t.forward / enginefx.thrustTransforms.Count;
Vector3 fwd = HighLogic.LoadedScene == GameScenes.EDITOR ? Vector3d.up : (HighLogic.LoadedScene == GameScenes.SPH ? Vector3d.forward : (Vector3d)enginefx.part.vessel.GetTransform().up);
fwdThrustRatio = Vector3.Dot(fwd, thrust);
}
maxThrust = enginefx.thrustPercentage / 100f * enginefx.maxThrust;
if (part.Modules.Contains("ModuleEngineConfigs") || part.Modules.Contains("ModuleHybridEngine") || part.Modules.Contains("ModuleHybridEngines"))
{
correctThrust = true;
if (HighLogic.LoadedSceneIsFlight && enginefx.realIsp > 0.0f)
maxThrust = maxThrust * enginefx.atmosphereCurve.Evaluate(0) / enginefx.realIsp; //engine.atmosphereCurve.Evaluate((float)FlightGlobals.ActiveVessel.atmDensity);
}
else
correctThrust = false;
ispCurve = enginefx.atmosphereCurve;
propellantSumRatioTimesDensity = enginefx.propellants.Sum(prop => prop.ratio * MuUtils.ResourceDensity(prop.id));
propellantRatios = enginefx.propellants.Where(prop => PartResourceLibrary.Instance.GetDefinition(prop.id).density > 0 && prop.name != "IntakeAir").ToDictionary(prop => prop.id, prop => prop.ratio);
}
//.........这里部分代码省略.........