public void EquipOrUnequip(WeaponMount weaponMount, bool equip)
    {
        if (weaponMount.DecorationTransform != null)
        {
            weaponMount.DecorationTransform.gameObject.SetActive(!equip);
        }

        if (weaponMount.EquippedWeaponTransform != null)
        {
            weaponMount.EquippedWeaponTransform.gameObject.SetActive(equip);
        }

        if (weaponMount.EquippedThrowableDecorationTransform != null)
        {
            weaponMount.EquippedThrowableDecorationTransform.gameObject.SetActive(equip);
        }

        if (weaponMount.CarrierDecoration != null)
        {
            weaponMount.CarrierDecoration.gameObject.SetActive(true);
        }

        // We play the equip animation
        if (equip)
        {
            _player.PlayerWeaponsAnimator.EquipAnimation(weaponMount);
        }
    }
Пример #2
0
        public Adder()
        {
            Category     = "Small Spacecraft";
            Manufacturer = "Zorgon Peterson";
            Dimensions   = "L 31.5m x W 28.8m x H 9.6m";
            LandingPad   = "Small";
            Crew         = 2;
            Passengers   = 1;

            Agility = 8;
            Speed   = 6;
            Range   = "Explorer (50% Bonus)";
            Fuel    = "8T (80LY)";
            Hull    = 75;
            SetHullValues(75, 112);
            Shields = 0;

            Bulkheads        = new Bulkheads("Adder", 35120, 79030);
            ReinforcedAlloys = true;
            Weapons          = new WeaponMount[] { new WeaponMount(1), new WeaponMount(1), new WeaponMount(2) };
            Utilities        = new UtilityMount[] { new UtilityMount(0), new UtilityMount(0) };
            Fixed            = new FixedMount[] { new FixedMount(3, "Power Plant", new PowerPlants('E', 3, 8, 30, 6200)),
                                                  new FixedMount(3, "Thrusters", new Thrusters(3, 'E', 2.48, 30, 0, 0, 6270)),
                                                  new FixedMount(3, "FSD", new FrameShiftDrive('E', 3, 25, 0.24, 9, 6270)),
                                                  new FixedMount(1, "Life Support", new LifeSupport(5, 0.32, 'E', 520, 1, 15)),
                                                  new FixedMount(2, "Power Distributor", new PowerDistributor('E', 0.36, 1450, 2, 20,
                                                                                                              0, 0, 0, 0)),
                                                  new FixedMount(3, "Sensors", new Sensors(3, 'E', 0.18, 1450, 15, new int[]
                                                                                           { 0, 0 })) };
            FuelTank   = new FixedMount(3, "FuelTank", new FuelTank('C', 3, 8, 7060));
            CargoHatch = new FixedMount(1, "Cargo Hatch", new CargoHatch());
            Optionals  = new OptionalMount[] { new OptionalMount(3), new OptionalMount(3), new OptionalMount(2), new OptionalMount(2), new OptionalMount(1) };
        }
 public void EquipAnimation(WeaponMount weaponMount)
 {
     if (weaponMount.EquipAnimatorTrigger != "")
     {
         _animator.SetTrigger(weaponMount.EquipAnimatorTrigger);
     }
 }
Пример #4
0
 public float GetWeaponDamage(WeaponMount slot)
 {
     if (equippedWeapons.ContainsKey(slot))
     {
         return(equippedWeapons[slot].baseDamage);
     }
     return(baseDamage);
 }
Пример #5
0
 public frmCreateWeaponMount(Vehicle objVehicle, Character objCharacter, WeaponMount objWeaponMount = null)
 {
     _xmlDoc       = XmlManager.Load("vehicles.xml");
     _objVehicle   = objVehicle;
     _objMount     = objWeaponMount;
     _objCharacter = objCharacter;
     InitializeComponent();
 }
Пример #6
0
 void SetWeapon(WeaponMount mount, GameObject prefab = null)
 {
     for (int i = 0; i < mount.transform.childCount; ++i)
     {
         Destroy(mount.transform.GetChild(0).gameObject);
     }
     Instantiate(prefab == null ? mount.weapons[0].prefab : prefab, mount.transform);
 }
Пример #7
0
 public PowerupAttachable GetWeapon(WeaponMount mount)
 {
     if (equippedWeapons.ContainsKey(mount))
     {
         return(equippedWeapons[mount]);
     }
     return(null);
 }
Пример #8
0
 public IEnumerator AutoFireWeapon(WeaponMount weaponMount)
 {
     while (isAutoFiring)
     {
         WeaponData weapon = weaponMount.weapons[0];
         FireWeapon(weapon, weaponMount.transform);
         yield return(new WaitForSeconds(1 / weapon.fireRate));
     }
 }
Пример #9
0
    public void Unequipper(string name)
    {
        noItem = true;
        switch (name)
        {
        case "FrontWeapons":
            weaponMount = WeaponMount.Grill;
            isWeapon    = true;
            break;

        case "RearWeapons":
            weaponMount = WeaponMount.Hitch;
            isWeapon    = true;
            break;

        case "DoorWeapons":
            weaponMount = WeaponMount.Doors;
            isWeapon    = true;
            break;

        case "RoofWeapons":
            weaponMount = WeaponMount.Roof;
            isWeapon    = true;
            break;

        case "WheelWeapons":
            weaponMount = WeaponMount.Wheels;
            isWeapon    = true;
            break;

        case "EngineMods":
            modMount = ModMount.Engine;
            isWeapon = false;
            break;

        case "NitroMods":
            modMount = ModMount.Trunk;
            isWeapon = false;
            break;

        case "ChassisMods":
            modMount = ModMount.Frame;
            isWeapon = false;
            break;

        case "BumperMods":
            modMount = ModMount.Bumpers;
            isWeapon = false;
            break;

        case "WheelMods":
            modMount = ModMount.Tires;
            isWeapon = false;
            break;
        }
    }
Пример #10
0
    private void Update()
    {
        if (_player.PlayerWeapons.EquippedWeaponMount == null)
        {
            return;
        }

        WeaponMount weaponMount = _player.PlayerWeapons.EquippedWeaponMount;

        // Can't fire when spriting or busy with wall or weapon is unprepared
        if (GameManager.Instance.InputManager.Firing
            //&& !_player.PlayerState.IsSprinting()
            && !_player.PlayerState.IsBusyWithWall &&
            _player.PlayerState.PlayerWeaponState == PlayerWeaponState.Prepared &&
            weaponMount.MagazineAmmo != 0 &&
            !_player.PlayerWeaponsAnimator.IsReloading)
        {
            if (Time.time > _nextFireTime)
            {
                _nextFireTime = Time.time + weaponMount.Weapon.TimeBetweenBullets;

                if (weaponMount.Weapon.WithFireAnimation)
                {
                    if (weaponMount.Weapon.ChargingWeapon)
                    {
                        if (_isCharging)
                        {
                            return;
                        }

                        _isCharging = true;
                        _player.PlayerWeaponsAnimator.Charge(true);
                        //GameManager.Instance.AudioManager.PlayOneShotSound(weaponMount.Weapon.ChargingSound, 1, 0, 1, transform.position);

                        _player.PlayerWeaponsAnimator.Fire();
                    }
                    else
                    {
                        _player.PlayerWeaponsAnimator.Fire();
                    }
                }
                else
                {
                    Fire(weaponMount);
                }
            }
        }

        // If we are done charging the weapon, we let go and exert the attack
        if (!GameManager.Instance.InputManager.Firing && _isCharging)
        {
            _isCharging = false;
            _player.PlayerWeaponsAnimator.Charge(false);
        }
    }
Пример #11
0
        protected T GetWeaponMount <T>(int index, HardpointTypes type) where T : WeaponTemplate, new()
        {
            WeaponMount mount = FindWeaponMount(type, index);

            if (mount.MountedWeapon == null || mount.MountedWeapon.WeaponType != GetStandardWeaponTypeForMount(type))
            {
                mount.MountedWeapon = new T();
            }

            return(mount.MountedWeapon as T);
        }
Пример #12
0
        public void SetupBeamWeapon(int hardpointIndex, float arc, float nomialDir, float range, float cycleTime, float damage)
        {
            WeaponMount mount = FindWeaponMount(HardpointTypes.Beam, hardpointIndex);
            var         beam  = GetWeaponMount <BeamWeaponBankTemplate>(hardpointIndex, HardpointTypes.Beam);

            beam.BeamArc          = arc;
            mount.DefaultFacing   = nomialDir;
            beam.NominalRange     = range;
            beam.NominalCycleTime = cycleTime;
            beam.NominalDamage    = damage;
        }
    private void HandleReload()
    {
        if (GameManager.Instance.InputManager.Reload && !_isReloading && _player.PlayerState.PlayerWeaponState == PlayerWeaponState.Prepared)
        {
            WeaponMount weaponMount = _player.PlayerWeapons.EquippedWeaponMount;

            if (weaponMount.MagazineAmmo < weaponMount.Weapon.MaxMagazineAmmo && weaponMount.Ammo > 0)
            {
                Reload();
            }
        }
    }
Пример #14
0
            public WeaponMount Clone()
            {
                WeaponMount m = new WeaponMount();

                m.DefaultFacing = DefaultFacing;
                m.IsTurret      = IsTurret;
                m.RotationArc   = RotationArc;
                m.RotationSpeed = RotationSpeed;
                m.MountedWeapon = MountedWeapon?.Clone();
                m.Hardpoint     = new HardpointID(Hardpoint);
                return(m);
            }
Пример #15
0
    public void ShowUnequippedItem(WeaponMount mount)
    {
        StatPack          pack      = new StatPack();
        PowerupAttachable otherItem = controller.GetCar().GetComponent <PowerupManager>().GetWeapon(mount);

        if (otherItem == null)
        {
            return;
        }
        StatPack otherPack = otherItem.GetComponent <PowerupStats>().GetPack();

        ShowStatBars(pack, otherPack);
        damageSliders.ShowPotentialWeapon(mount, controller.GetCar().GetComponent <PowerupManager>().baseDamage);
    }
Пример #16
0
        public WeaponMount FindWeaponMount(HardpointTypes type, int index)
        {
            HardpointID id = new HardpointID(type, index);

            if (Weapons.ContainsKey(id))
            {
                return(Weapons[id]);
            }

            WeaponMount mount = new WeaponMount();

            mount.Hardpoint = id;
            Weapons.Add(id, mount);
            return(mount);
        }
Пример #17
0
 public void Remove(WeaponMount slot)
 {
     Debug.Log("CALLED");
     if (equippedWeapons.ContainsKey(slot))
     {
         equippedWeapons[slot].GetComponent <PowerupMain>().UnEquip();
         equippedWeapons.Remove(slot);
     }
     if (physicalWeapons.ContainsKey(slot))
     {
         foreach (GameObject oldWeapon in physicalWeapons[slot])
         {
             Destroy(oldWeapon);
         }
     }
     ReCalcStats();
 }
    private void Update()
    {
        WeaponMount weaponMount = GameManager.Instance.Player.PlayerWeapons.EquippedWeaponMount;

        if (weaponMount.Weapon.WeaponType == WeaponType.Hands && _ammoPanel.gameObject.activeSelf)
        {
            _ammoPanel.gameObject.SetActive(false);
        }
        else if ((weaponMount.Weapon.IsRangeWeapon) &&
                 !_ammoPanel.gameObject.activeSelf)
        {
            _ammoPanel.gameObject.SetActive(true);
        }

        _magazineAmmoText.text = weaponMount.MagazineAmmo + "";
        _ammoText.text         = weaponMount.Ammo + "";
    }
Пример #19
0
 public static void TryUpdate(StatPack pack, WeaponMount weapon, float damage)
 {
     if (damage > maxDamage)
     {
         maxDamage = damage;
     }
     if (WeaponMin.ContainsKey(weapon))
     {
         WeaponMin[weapon] = StatPack.Min(WeaponMin[weapon], pack);
         WeaponMax[weapon] = StatPack.Max(WeaponMax[weapon], pack);
     }
     else
     {
         WeaponMin[weapon] = StatPack.Min(new StatPack(), pack);
         WeaponMax[weapon] = StatPack.Max(new StatPack(), pack);
     }
     UpdateMinMax();
 }
    public void RefreshAmmunationDecoration(WeaponMount weaponMount)
    {
        if (weaponMount.AmmunationDecorations.Count == 0)
        {
            return;
        }

        for (int i = 0; i < weaponMount.AmmunationDecorations.Count; i++)
        {
            if (i < weaponMount.Ammo)
            {
                weaponMount.AmmunationDecorations[i].gameObject.SetActive(true);
            }
            else
            {
                weaponMount.AmmunationDecorations[i].gameObject.SetActive(false);
            }
        }
    }
    private void Equip(int scroll)
    {
        if (scroll != 0)
        {
            GameManager.Instance.AudioManager.PlayOneShotSound(_equipWeaponSound, 1, 0, 1, transform.position);
        }

        // When we equip a new weapon, we unprepare the previous one
        if (scroll != 0)
        {
            _player.PlayerState.UnprepareWeapon();
        }

        int equippedWeaponIndex = 0;

        for (int i = 0; i < _weaponMountsInPossession.Count; i++)
        {
            if (_weaponMountsInPossession[i] == _equippedWeaponMount)
            {
                equippedWeaponIndex = i;
            }
        }

        equippedWeaponIndex += scroll;

        if (equippedWeaponIndex >= _weaponMountsInPossession.Count)
        {
            equippedWeaponIndex = 0;
        }
        if (equippedWeaponIndex < 0)
        {
            equippedWeaponIndex = _weaponMountsInPossession.Count - 1;
        }

        foreach (WeaponMount weaponMount in _weaponMountsInPossession)
        {
            EquipOrUnequip(weaponMount, false);
        }

        EquipOrUnequip(_weaponMountsInPossession[equippedWeaponIndex], true);

        _equippedWeaponMount = _weaponMountsInPossession[equippedWeaponIndex];
    }
Пример #22
0
    public void ShowPotentialWeapon(WeaponMount weaponLocation, float damage)
    {
        Slider         slider;
        PowerupManager car = controller.GetCar().GetComponent <PowerupManager>();

        switch (weaponLocation)
        {
        case WeaponMount.Grill:
            slider = transform.Find("FrontSlider").GetComponent <Slider>();
            break;

        case WeaponMount.Hitch:
            slider = transform.Find("RearSlider").GetComponent <Slider>();
            break;

        case WeaponMount.Roof:
            slider = transform.Find("RoofSlider").GetComponent <Slider>();
            break;

        case WeaponMount.Doors:
            slider = transform.Find("DoorSlider").GetComponent <Slider>();
            break;

        default:
            slider = transform.Find("WheelSlider").GetComponent <Slider>();
            break;
        }

        float newPosition = GarageSlider.SliderPosition(GarageStats.minDamage, GarageStats.maxDamage, damage);

        if (newPosition > slider.value + 0.00001f)
        {
            slider.transform.Find("Fill Area").Find("Fill").GetComponent <Image>().color = new Color(0, 1, 0, 0.3f);
        }
        if (newPosition < slider.value + 0.00001f)
        {
            slider.transform.Find("Fill Area").Find("Fill").GetComponent <Image>().color = new Color(1, 0, 0, 0.3f);
        }
        slider.value = newPosition;
    }
Пример #23
0
    private void HitSomething(RaycastHit hitInfo, WeaponMount weaponMount)
    {
        if (weaponMount.Weapon.Projectile != null)
        {
            InstantiateProjectile(weaponMount, (hitInfo.point - weaponMount.FirePosition.position).normalized);
        }
        else
        {
            Health health = hitInfo.transform.GetComponent <Health>();

            if (health != null)
            {
                health.TakeDamage(weaponMount.Weapon.Damage, _player.gameObject, weaponMount.Weapon.DamageParticleType);
            }
            else
            {
                GlassBreaker glassBreaker = hitInfo.transform.GetComponent <GlassBreaker>();
                if (glassBreaker != null)
                {
                    glassBreaker.BreakerGlass();
                }
                else
                {
                    Rigidbody rigidbody = hitInfo.transform.GetComponent <Rigidbody>();
                    if (rigidbody != null)
                    {
                        rigidbody.AddForce(_player.transform.forward * weaponMount.Weapon.PushForce);
                    }
                    else
                    {
                        GameObject tmp = Instantiate(weaponMount.Weapon.BulletHole, hitInfo.point + hitInfo.normal * .01f, Quaternion.identity);
                        tmp.transform.forward = -hitInfo.normal;
                        tmp.transform.parent  = hitInfo.transform;
                    }
                }
            }
        }
    }
    public void ReloadAnimationEvent()
    {
        WeaponMount weaponMount = _player.PlayerWeapons.EquippedWeaponMount;

        int needed = weaponMount.Weapon.MaxMagazineAmmo - weaponMount.MagazineAmmo;
        int toAdd  = 0;

        if (weaponMount.Ammo > needed)
        {
            weaponMount.Ammo -= needed;
            toAdd             = needed;
        }
        else
        {
            toAdd            = weaponMount.Ammo;
            weaponMount.Ammo = 0;
        }

        weaponMount.MagazineAmmo += toAdd;

        // Refrech ammuniation decoration
        _player.PlayerWeapons.RefreshAmmunationDecoration(_player.PlayerWeapons.EquippedWeaponMount);
    }
Пример #25
0
        private void cmdOK_Click(object sender, EventArgs e)
        {
            //TODO: THIS IS UGLY AS SHIT, FIX BETTER

            string strSelectedMount = cboSize.SelectedValue?.ToString();

            if (string.IsNullOrEmpty(strSelectedMount))
            {
                return;
            }
            string strSelectedControl = cboControl.SelectedValue?.ToString();

            if (string.IsNullOrEmpty(strSelectedControl))
            {
                return;
            }
            string strSelectedFlexibility = cboFlexibility.SelectedValue?.ToString();

            if (string.IsNullOrEmpty(strSelectedFlexibility))
            {
                return;
            }
            string strSelectedVisibility = cboVisibility.SelectedValue?.ToString();

            if (string.IsNullOrEmpty(strSelectedVisibility))
            {
                return;
            }

            XmlNode xmlSelectedMount = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedMount + "\"]");

            if (xmlSelectedMount == null)
            {
                return;
            }
            XmlNode xmlSelectedControl = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedControl + "\"]");

            if (xmlSelectedControl == null)
            {
                return;
            }
            XmlNode xmlSelectedFlexibility = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedFlexibility + "\"]");

            if (xmlSelectedFlexibility == null)
            {
                return;
            }
            XmlNode xmlSelectedVisibility = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedVisibility + "\"]");

            if (xmlSelectedVisibility == null)
            {
                return;
            }

            XmlNode xmlForbiddenNode = xmlSelectedMount["forbidden"];

            if (xmlForbiddenNode != null)
            {
                string strStringToCheck = xmlSelectedControl["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlControlNodeList = xmlForbiddenNode.SelectNodes("control"))
                        if (xmlControlNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlControlNodeList)
                            {
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    return;
                                }
                            }
                        }
                }

                strStringToCheck = xmlSelectedFlexibility["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlFlexibilityNodeList = xmlForbiddenNode.SelectNodes("flexibility"))
                        if (xmlFlexibilityNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlFlexibilityNodeList)
                            {
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    return;
                                }
                            }
                        }
                }

                strStringToCheck = xmlSelectedVisibility["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlVisibilityNodeList = xmlForbiddenNode.SelectNodes("visibility"))
                        if (xmlVisibilityNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlVisibilityNodeList)
                            {
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    return;
                                }
                            }
                        }
                }
            }
            XmlNode xmlRequiredNode = xmlSelectedMount["required"];

            if (xmlRequiredNode != null)
            {
                bool   blnRequirementsMet = true;
                string strStringToCheck   = xmlSelectedControl["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlControlNodeList = xmlRequiredNode.SelectNodes("control"))
                        if (xmlControlNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlControlNodeList)
                            {
                                blnRequirementsMet = false;
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    blnRequirementsMet = true;
                                    break;
                                }
                            }
                        }
                }
                if (!blnRequirementsMet)
                {
                    return;
                }

                strStringToCheck = xmlSelectedFlexibility["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlFlexibilityNodeList = xmlRequiredNode.SelectNodes("flexibility"))
                        if (xmlFlexibilityNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlFlexibilityNodeList)
                            {
                                blnRequirementsMet = false;
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    blnRequirementsMet = true;
                                    break;
                                }
                            }
                        }
                }
                if (!blnRequirementsMet)
                {
                    return;
                }

                strStringToCheck = xmlSelectedVisibility["name"]?.InnerText;
                if (!string.IsNullOrEmpty(strStringToCheck))
                {
                    using (XmlNodeList xmlVisibilityNodeList = xmlRequiredNode.SelectNodes("visibility"))
                        if (xmlVisibilityNodeList?.Count > 0)
                        {
                            foreach (XmlNode xmlLoopNode in xmlVisibilityNodeList)
                            {
                                blnRequirementsMet = false;
                                if (xmlLoopNode.InnerText == strStringToCheck)
                                {
                                    blnRequirementsMet = true;
                                    break;
                                }
                            }
                        }
                }
                if (!blnRequirementsMet)
                {
                    return;
                }
            }
            if (_objMount == null)
            {
                _objMount = new WeaponMount(_objCharacter, _objVehicle);
                _objMount.Create(xmlSelectedMount);
            }
            else if (_objMount.SourceId != strSelectedMount)
            {
                _objMount.Create(xmlSelectedMount);
            }

            WeaponMountOption objControlOption     = new WeaponMountOption(_objCharacter);
            WeaponMountOption objFlexibilityOption = new WeaponMountOption(_objCharacter);
            WeaponMountOption objVisibilityOption  = new WeaponMountOption(_objCharacter);

            if (objControlOption.Create(xmlSelectedControl) &&
                objFlexibilityOption.Create(xmlSelectedFlexibility) &&
                objVisibilityOption.Create(xmlSelectedVisibility))
            {
                _objMount.WeaponMountOptions.Clear();
                _objMount.WeaponMountOptions.Add(objControlOption);
                _objMount.WeaponMountOptions.Add(objFlexibilityOption);
                _objMount.WeaponMountOptions.Add(objVisibilityOption);
            }

            _objMount.Mods.Clear();
            foreach (VehicleMod objMod in _lstMods)
            {
                objMod.WeaponMountParent = _objMount;
                _objMount.Mods.Add(objMod);
            }
            DialogResult = DialogResult.OK;
        }
Пример #26
0
        private void cmdOK_Click(object sender, EventArgs e)
        {
            TreeNode tree = new TreeNode();
            //TODO: THIS IS UGLY AS SHIT, FIX BETTER
            XmlNode node = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboSize.SelectedValue + "\"]");

            if (node["forbidden"] != null)
            {
                XmlNodeList list  = node.SelectNodes("/forbidden/control");
                XmlNode     check = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboControl.SelectedValue + "\"]");
                if (list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText))
                {
                    return;
                }
                list  = node.SelectNodes("/forbidden/flexibility");
                check = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboFlexibility.SelectedValue + "\"]");
                if (list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText))
                {
                    return;
                }
                list  = node.SelectNodes("/forbidden/visibility");
                check = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboVisibility.SelectedValue + "\"]");
                if (list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText))
                {
                    return;
                }
            }
            if (node["required"] != null)
            {
                bool        requirementsMet = true;
                XmlNodeList list            = node.SelectNodes("/required/control");
                XmlNode     check           = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboControl.SelectedValue + "\"]");
                if (list.Count > 0)
                {
                    requirementsMet = requirementsMet && list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText);
                    if (!requirementsMet)
                    {
                        return;
                    }
                }
                list = node.SelectNodes("/required/flexibility");
                if (list.Count > 0)
                {
                    check           = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboFlexibility.SelectedValue + "\"]");
                    requirementsMet = requirementsMet && list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText);
                    if (!requirementsMet)
                    {
                        return;
                    }
                }
                list = node.SelectNodes("/required/visibility");
                if (list.Count > 0)
                {
                    check           = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + cboVisibility.SelectedValue + "\"]");
                    requirementsMet = requirementsMet && list.Cast <XmlNode>().Any(n => n.InnerText == check["name"].InnerText);
                    if (!requirementsMet)
                    {
                        return;
                    }
                }
            }
            WeaponMount mount = new WeaponMount(_objCharacter, _vehicle);

            mount.Create(node, tree, _vehicle);
            WeaponMountOption option = new WeaponMountOption(_objCharacter);

            option.Create(cboControl.SelectedValue.ToString(), mount.WeaponMountOptions);
            option = new WeaponMountOption(_objCharacter);
            option.Create(cboFlexibility.SelectedValue.ToString(), mount.WeaponMountOptions);
            option = new WeaponMountOption(_objCharacter);
            option.Create(cboVisibility.SelectedValue.ToString(), mount.WeaponMountOptions);
            WeaponMount  = mount;
            tree.Text    = mount.DisplayName(GlobalOptions.Language);
            DialogResult = DialogResult.OK;
        }
Пример #27
0
 void Awake()
 {
     _mount = GetComponentInChildren <WeaponMount>();
 }
Пример #28
0
        public void SetMissleWeaponDirection(int hardpointIndex, float direction)
        {
            WeaponMount mount = FindWeaponMount(HardpointTypes.Tube, hardpointIndex);

            mount.DefaultFacing = direction;
        }
Пример #29
0
    private void InstantiateProjectile(WeaponMount weaponMount, Vector3 direction)
    {
        Projectile projectileTmp = Instantiate(weaponMount.Weapon.Projectile, weaponMount.FirePosition.position, Quaternion.identity);

        projectileTmp.Initialize(gameObject, direction);
    }
Пример #30
0
    public virtual void Fire(WeaponMount weaponMount)
    {
        // We can't fire when we are taking a hit
        if (_player.TakingHit)
        {
            return;
        }

        if (weaponMount.MuzzleFlash != null)
        {
            weaponMount.MuzzleFlash.gameObject.SetActive(true);
            weaponMount.MuzzleFlash.Play();
        }

        Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 1));

        RaycastHit[] hitInfos = Physics.RaycastAll(ray, weaponMount.Weapon.Range, _layerMask);

        int closestHitIndex = -1;

        if (hitInfos.Length > 0)
        {
            for (int i = 0; i < hitInfos.Length; i++)
            {
                RaycastHit hitInfo = hitInfos[i];

                // We make sure we don't hit something behind us
                if (Vector3.Angle(hitInfo.transform.position - _player.transform.position, _player.transform.forward) > 180)
                {
                    continue;
                }

                if (closestHitIndex == -1)
                {
                    closestHitIndex = i;
                }
                else
                {
                    float thisDistance    = (hitInfo.point - transform.position).magnitude;
                    float closestDistance = (hitInfos[closestHitIndex].point - transform.position).magnitude;
                    if (thisDistance < closestDistance)
                    {
                        closestHitIndex = i;
                    }
                }
            }

            if (closestHitIndex != -1)
            {
                RaycastHit hitInfo = hitInfos[closestHitIndex];

                HitSomething(hitInfo, weaponMount);
            }
        }

        // If we didn't hit anything but the weapon uses a projectile, we still want to instantiate the projectile
        if (closestHitIndex == -1 && weaponMount.Weapon.Projectile != null)
        {
            InstantiateProjectile(weaponMount, Camera.main.transform.forward);
        }

        GameManager.Instance.AudioManager.PlayOneShotSound(weaponMount.Weapon.FireSound, 1, 0, 1, transform.position);

        weaponMount.MagazineAmmo -= 1;
        // We don't want to reload when we have a bow equipped because the bow is automatically going to reload after playing the fire animation (for smoother movements of the player)
        if (weaponMount.MagazineAmmo == 0 && weaponMount.Ammo > 0 && !_player.PlayerWeaponsAnimator.PreparedBow)
        {
            _player.PlayerWeaponsAnimator.Reload();
        }
    }