public Initializer() { // move radar blocks to radar resource group // first make sure radar group exists. If it does not, radar will stay in its original group. MyStringHash radar = MyStringHash.GetOrCompute("Radar"); foreach (MyDefinitionBase radarGroupDefn in MyDefinitionManager.Static.GetAllDefinitions()) { if (radarGroupDefn is MyResourceDistributionGroupDefinition && radarGroupDefn.Id.SubtypeId == radar) { // find each radar block and move it to radar group foreach (MyDefinitionBase radarBlockDefn in MyDefinitionManager.Static.GetAllDefinitions()) { if (radarBlockDefn is MyCubeBlockDefinition && radarBlockDefn.Id.SubtypeName.ToLower().Contains("radar")) // RadarEquipment.IsRadarOrJammer { MyBeaconDefinition beaconDefn = radarBlockDefn as MyBeaconDefinition; if (beaconDefn != null) { beaconDefn.ResourceSinkGroup = radar.ToString(); continue; } MyLaserAntennaDefinition lasAntDefn = radarBlockDefn as MyLaserAntennaDefinition; if (lasAntDefn != null) { lasAntDefn.ResourceSinkGroup = radar; continue; } MyRadioAntennaDefinition radAntDefn = radarBlockDefn as MyRadioAntennaDefinition; if (radAntDefn != null) { radAntDefn.ResourceSinkGroup = radar; continue; } // stop trying to guess what the radar block is made of } } break; } } }
/// <summary> /// Distance in meters, returns power in MW. /// </summary> public static float LaserAntenna_PowerUsage(MyLaserAntennaDefinition def, double distanceMeters) { // HACK copied and converted from MyLaserAntenna.UpdatePowerInput() double powerRatio = def.PowerInputLasing; double maxRange = (def.MaxRange < 0 ? double.MaxValue : def.MaxRange); double A = powerRatio / 2.0 / 200000.0; double B = powerRatio * 200000.0 - A * 200000.0 * 200000.0; double distance = Math.Min(distanceMeters, maxRange); if (distance > 200000) { return((float)((distance * distance) * A + B) / 1000000f); } else { return((float)(powerRatio * distance) / 1000000f); } }