private void Awake() { equipment = this; objects = GameObject.Find("GameSetting").GetComponent <ObjectsInfo>(); player = GameObject.FindGameObjectWithTag(Tags.player).GetComponent <PlayerInformation>(); inventory = GameObject.Find("Inventory").GetComponent <Inventory>(); myDrag = this.transform.GetComponentInChildren <MyDrag>(); }
private static TrajectoryPoint[] Calculate(double bc, DragTableId id) { var dragTable = new MyDrag(); var ammo = new Ammunition( weight: new Measurement <WeightUnit>(168, WeightUnit.Grain), ballisticCoefficient: new BallisticCoefficient(bc, id), muzzleVelocity: new Measurement <VelocityUnit>(555, VelocityUnit.MetersPerSecond), bulletDiameter: new Measurement <DistanceUnit>(0.224, DistanceUnit.Inch), bulletLength: new Measurement <DistanceUnit>(0.9, DistanceUnit.Inch)); //define ACOG scope var sight = new Sight( sightHeight: new Measurement <DistanceUnit>(3.5, DistanceUnit.Inch), verticalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards), horizontalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards) ); //M16 rifling var rifling = new Rifling( riflingStep: new Measurement <DistanceUnit>(12, DistanceUnit.Inch), direction: TwistDirection.Right); //standard 100 yard ACOG zeroing var zero = new ZeroingParameters( distance: new Measurement <DistanceUnit>(50, DistanceUnit.Yard), ammunition: null, atmosphere: null ); //define rifle by sight, zeroing and rifling parameters var rifle = new Rifle(sight: sight, zero: zero, rifling: rifling); //define atmosphere var atmosphere = new Atmosphere( altitude: new Measurement <DistanceUnit>(0, DistanceUnit.Foot), pressure: new Measurement <PressureUnit>(29.92, PressureUnit.InchesOfMercury), pressureAtSeaLevel: false, temperature: new Measurement <TemperatureUnit>(59, TemperatureUnit.Fahrenheit), humidity: 0.78); var calc = new TrajectoryCalculator(); //shot parameters var shot = new ShotParameters() { MaximumDistance = new Measurement <DistanceUnit>(2000, DistanceUnit.Meter), Step = new Measurement <DistanceUnit>(100, DistanceUnit.Meter), //calculate sight angle for the specified zero distance SightAngle = calc.SightAngle(ammo, rifle, atmosphere, id == DragTableId.GC ? dragTable : null) }; //calculate trajectory return(calc.Calculate(ammo, rifle, atmosphere, shot, null, id == DragTableId.GC ? dragTable : null)); }
public void Custom1() { var template = TableLoader.FromResource("custom"); var table = new MyDrag(); const double velocityAccuracyInPercent = 0.015, dropAccuracyInMOA = 0.25; var cal = new TrajectoryCalculator(); ShotParameters shot = new ShotParameters() { Step = new Measurement <DistanceUnit>(50, DistanceUnit.Meter), MaximumDistance = new Measurement <DistanceUnit>(500, DistanceUnit.Meter), SightAngle = cal.SightAngle(template.Ammunition, template.Rifle, template.Atmosphere, table), ShotAngle = template.ShotParameters?.ShotAngle, CantAngle = template.ShotParameters?.CantAngle, }; var winds = template.Wind == null ? null : new Wind[] { template.Wind }; var trajectory = cal.Calculate(template.Ammunition, template.Rifle, template.Atmosphere, shot, winds, table); trajectory.Length.Should().Be(template.Trajectory.Count); for (int i = 0; i < trajectory.Length; i++) { var point = trajectory[i]; var templatePoint = template.Trajectory[i]; point.Distance.In(templatePoint.Distance.Unit).Should().BeApproximately(templatePoint.Distance.Value, templatePoint.Distance.Value * velocityAccuracyInPercent, $"@{point.Distance:N0}"); point.Velocity.In(templatePoint.Velocity.Unit).Should().BeApproximately(templatePoint.Velocity.Value, templatePoint.Velocity.Value * velocityAccuracyInPercent, $"@{point.Distance:N0}"); if (i > 0) { var dropAccuracyInInch = Measurement <AngularUnit> .Convert(dropAccuracyInMOA, AngularUnit.MOA, AngularUnit.InchesPer100Yards) * templatePoint.Distance.In(DistanceUnit.Yard) / 100; point.Drop.In(DistanceUnit.Inch).Should().BeApproximately(templatePoint.Drop.In(DistanceUnit.Inch), dropAccuracyInInch, $"@{point.Distance:N0}"); } } }