コード例 #1
0
        public void Render()
        {
            Matrix[] boneTransforms = new Matrix[AmmoModel.Bones.Count];
            AmmoModel.CopyAbsoluteBoneTransformsTo(boneTransforms);

            foreach (ModelMesh mesh in AmmoModel.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    Matrix world = Matrix.Identity;
                    world                    = boneTransforms[mesh.ParentBone.Index] * Matrix.CreateScale(0.01f) * Matrix.CreateRotationY(MathHelper.ToRadians(90)) * Matrix.CreateFromAxisAngle(Vector3.Zero, -17.447933f) * Matrix.CreateTranslation(new Vector3(0, -0.45f, Z)) * Matrix.Invert(WorldMatrix);
                    BoundingBox              = BoundingBoxRenderer.UpdateBoundingBox(AmmoModel, world);
                    effect.World             = world;
                    effect.View              = Camera.ViewMatrix;
                    effect.Projection        = Camera.ProjectionsMatrix;
                    effect.AmbientLightColor = new Vector3(1.0f, 1.0f, 1.0f);
                    effect.TextureEnabled    = true;
                    effect.CurrentTechnique.Passes[0].Apply();
                }

                mesh.Draw();
            }

            BoundingBoxRenderer.Render(BoundingBox, Device, Camera.ViewMatrix, Camera.ProjectionsMatrix, Color.Red);
        }
コード例 #2
0
        public CalculatorViewModel(IEventAggregator eventsAggregator,
            RiflesModel riflesModel,
            AmmoModel cartridgeModel,
            ConfigurationModel configurationModel)
            : base(eventsAggregator)
        {
            this.riflesModel = riflesModel;
            this.configurationModel = configurationModel;
            this.cartridgeModel = cartridgeModel;
            selectedRifle = null;
             DisplayName = "Ballistic Calculation";
            configurationModel.Load();
            selectedRifle = configurationModel.CalculatorSettings.CurrentRifle;

            var rifles = Rifles.ToList();
            if (string.IsNullOrWhiteSpace(selectedRifle?.Name) && rifles.Count > 0)
                SelectedRifle = rifles.OrderByDescending(x => x.Name).FirstOrDefault();

            if (selectedRifle != null)
            {
                selectedCartridge = configurationModel.CalculatorSettings.CurrentCartridge;
                if (string.IsNullOrWhiteSpace(selectedCartridge?.Name))
                    selectedCartridge = selectedRifle.Cartridge;
            }
        }
コード例 #3
0
        // private static HttpClient httpClient = new HttpClient();
        public async Task Fire(AmmoModel ammo)
        {
            if (ammo.Protocol.Equals("get", StringComparison.OrdinalIgnoreCase))
            {
                var response = await _httpClient.GetAsync(new Uri(ammo.Url));

                ammo.ActualCode     = (int)response.StatusCode;
                ammo.ActualResponse = await response.Content.ReadAsStringAsync();
            }
        }
コード例 #4
0
 public EditCartridgeViewModel(ConfigurationModel configurationModel,
                               AmmoModel cartridgesModel,
                               Cartridge cartridgeToEdit = null)
 {
     Cartridge = cartridgeToEdit ?? new Cartridge();
     isNew     = cartridgeToEdit == null;
     configurationModel.Initialize();
     units                = configurationModel.Units;
     DisplayName          = "Cartridge Data";
     this.cartridgesModel = cartridgesModel;
 }
コード例 #5
0
 public RiflesViewModel(RiflesModel riflesModel,
                        ConfigurationModel configurationModel,
                        AmmoModel cartridgesModel,
                        ScopesModel scopesModel,
                        IWindowManager windowManager,
                        IEventAggregator eventsAggregator) : base(eventsAggregator)
 {
     DisplayName             = "Rifles";
     this.riflesModel        = riflesModel;
     this.configurationModel = configurationModel;
     this.cartridgesModel    = cartridgesModel;
     this.scopesModel        = scopesModel;
     this.windowManager      = windowManager;
 }
コード例 #6
0
        public static AmmoIdentifier GetIdentifier(AmmoModel model)
        {
            var foundKey = _cache.FirstOrDefault((x) => x.Value == model).Key;

            if (foundKey.AmmoType != AmmoType.NONE)
            {
                return(foundKey);
            }

            var newIdentifier = GetIdentifierInternal(model);

            if (newIdentifier.AmmoType != AmmoType.NONE)
            {
                _cache[newIdentifier] = model;
            }
            return(newIdentifier);
        }
コード例 #7
0
        internal static PersistentAmmo GetPersistentAmmoForAmmo(AmmoModel model)
        {
            var identifier = AmmoIdentifier.GetIdentifier(model);

            if (identifier.AmmoType == AmmoType.NONE)
            {
                return(null);
            }
            if (!PersistentAmmoData.ContainsKey(identifier))
            {
                var newData = new PersistentAmmo(identifier, new PersistentAmmoModel(model));
                PersistentAmmoData.Add(identifier, newData);
                newData.Sync();
            }

            return(PersistentAmmoData[identifier]);
        }
コード例 #8
0
        public AmmoViewModel(AmmoModel ammoModel,
                             RiflesModel riflesModel,
                             ConfigurationModel configurationModel,
                             IWindowManager windowManager,
                             IEventAggregator eventsAggregator)
            : base(eventsAggregator)
        {
#pragma warning disable CC0021 // Use nameof
            DisplayName = "Cartridges";
#pragma warning restore CC0021 // Use nameof
            this.ammoModel          = ammoModel;
            this.configurationModel = configurationModel;
            this.windowManager      = windowManager;

            configurationModel.Initialize();
            this.eventsAggregator = eventsAggregator;
            this.riflesModel      = riflesModel;
        }
コード例 #9
0
        public EditRifleViewModel(ConfigurationModel configurationModel,
                                  AmmoModel cartridgesModel,
                                  ScopesModel scopesModel,
                                  Rifle rifle = null)
        {
            this.cartridgesModel    = cartridgesModel;
            this.scopesModel        = scopesModel;
            this.configurationModel = configurationModel;
            this.rifle = rifle ?? new Rifle
            {
                ZeroingWeather = WeatherCondition.Default
            };

            NotifyOfPropertyChange(() => Scope);
            NotifyOfPropertyChange(() => Cartridge);

            DisplayName = "Rifle Settings";
        }
コード例 #10
0
        static AmmoIdentifier GetIdentifierInternal(AmmoModel ammoModel) // warning, this is a reference based check
        {
            foreach (var candidate in SceneContext.Instance.GameModel.player.ammoDict)
            {
                if (candidate.Value == ammoModel)
                {
                    return(new AmmoIdentifier(Ammo.AmmoType.PLAYER, (long)candidate.Key));
                }
            }

            foreach (var candidate in SceneContext.Instance.GameModel.gadgetSites.Where((x) => x.Value.HasAttached()))
            {
                var potentialKey = new AmmoIdentifier(AmmoType.GADGET, candidate.Key);
                if (candidate.Value.attached is DroneModel drone)
                {
                    if (drone.ammo == ammoModel)
                    {
                        return(potentialKey);
                    }
                }

                if (candidate.Value.attached is WarpDepotModel depot)
                {
                    if (depot.ammo == ammoModel)
                    {
                        return(potentialKey);
                    }
                }
            }

            foreach (var candidate in SceneContext.Instance.GameModel.landPlots)
            {
                foreach (var ammo in candidate.Value.siloAmmo)
                {
                    if (ammo.Value == ammoModel)
                    {
                        return(new AmmoIdentifier(AmmoType.LANDPLOT, (long)ammo.Key, candidate.Key));
                    }
                }
            }

            return(new AmmoIdentifier(AmmoType.NONE, 0));
        }
コード例 #11
0
 public static bool TryGetIdentifier(AmmoModel model, out AmmoIdentifier identifier)
 {
     identifier = GetIdentifier(model);
     return(identifier.AmmoType != AmmoType.NONE);
 }
コード例 #12
0
 public PersistentAmmoModel(AmmoModel model)
 {
     UpdateFromExistingSlots(model.slots);
 }