Ejemplo n.º 1
0
        //public override void OnItemPickup(Agent agent, SpawnedItemEntity item)
        //{
        //    if (agent.Character == CharacterObject.PlayerCharacter)
        //    {
        //        //if (item.WeaponCopy.PrimaryItem != null && item.WeaponCopy.PrimaryItem.ItemCategory == ItemCategory.)
        //        //{
        //        //}
        //    }
        //}

        public EquipmentElement GetEquipmentWithModifier(ItemObject item, float targetValueFactor)
        {
            ItemModifierGroup itemModifierGroup;
            ArmorComponent    armorComponent = item.ArmorComponent;

            if (armorComponent != null)
            {
                itemModifierGroup = armorComponent.ItemModifierGroup;
            }
            else
            {
                itemModifierGroup = null;
            }
            ItemModifierGroup itemModifierGroup1     = itemModifierGroup ?? Campaign.Current.ItemModifierGroupss.FirstOrDefault <ItemModifierGroup>((ItemModifierGroup x) => x.ItemTypeEnum == item.ItemType);
            ItemModifier      itemModifierWithTarget = null;

            if (itemModifierGroup1 != null)
            {
                itemModifierWithTarget = itemModifierGroup1.GetItemModifierWithTarget(targetValueFactor);
                if (itemModifierWithTarget != null)
                {
                    float single = (itemModifierWithTarget.PriceMultiplier < targetValueFactor ? itemModifierWithTarget.PriceMultiplier / targetValueFactor : targetValueFactor / itemModifierWithTarget.PriceMultiplier);
                    if ((1f < targetValueFactor ? 1f / targetValueFactor : targetValueFactor) > single)
                    {
                        itemModifierWithTarget = null;
                    }
                }
            }
            return(new EquipmentElement(item, itemModifierWithTarget));
        }
Ejemplo n.º 2
0
        public void Initialize(PlatoonBehaviour platoon)
        {
            TargetTuple = new TargetTuple(this);
            Platoon     = platoon;

            _unitData = gameObject.GetComponent <DataComponent>();

            _voiceComponent = gameObject.transform.Find("VoiceComponent")
                              .GetComponent <VoiceComponent>();
            _movementComponent = gameObject.GetComponent <MovementComponent>();
            _healthComponent   = gameObject.GetComponent <HealthComponent>();
            _armorComponent    = gameObject.GetComponent <ArmorComponent>();
            VisionComponent    = gameObject.GetComponent <VisionComponent>();
            _turretSystem      = gameObject.GetComponent <TurretSystem>();

            // Only used in this class, not really configurable,
            // and no way to get a reference to it here if it's
            // instantiated in the UnitFitter.
            // I think it's fine to leave it here.
            _selectionCircle = Instantiate(
                Resources.Load <GameObject>("SelectionCircle"), Transform);

            _movementComponent.Initialize();
            _healthComponent.Initialize(this, _unitData);
            VisionComponent.Initialize(this, _unitData);
            _armorComponent.Initialize(_healthComponent, _unitData, _movementComponent);

            _targetingOverlay = OverlayFactory.Instance.CreateTargetingOverlay(this);
            _targetingOverlay.gameObject.transform.parent = gameObject.transform;
        }
Ejemplo n.º 3
0
        public static EquipmentElement GetEquipmentWithModifier(ItemObject item, float prosperityFactor)
        {
            ItemModifierGroup itemModifierGroup;
            ArmorComponent    armorComponent = item.ArmorComponent;

            if (armorComponent != null)
            {
                itemModifierGroup = armorComponent.ItemModifierGroup;
            }
            else
            {
                itemModifierGroup = null;
            }
            ItemModifierGroup itemModifierGroup1     = itemModifierGroup ?? Campaign.Current.ItemModifierGroupss.FirstOrDefault <ItemModifierGroup>((ItemModifierGroup x) => x.ItemTypeEnum == item.ItemType);
            ItemModifier      itemModifierWithTarget = null;

            if (itemModifierGroup1 != null)
            {
                float prosperityVariance = 1f;
                if (prosperityFactor < 1f)
                {
                    prosperityVariance = MBRandom.RandomFloatRanged(prosperityFactor, 1f);
                }
                else
                {
                    prosperityVariance = MBRandom.RandomFloatRanged(1f, prosperityFactor);
                }

                itemModifierWithTarget = itemModifierGroup1.GetRandomModifierWithTarget(prosperityVariance, 1f);
            }
            return(new EquipmentElement(item, itemModifierWithTarget));
        }
Ejemplo n.º 4
0
    public bool AddEquipment(ItemComponent itemComponent)
    {
        Entity itemEntity = itemComponent.thisEntity;

        if (itemComponent.itemType == ItemType.Weapon)
        {
            EntityComponent wComp = itemEntity.GetEntityComponent(ComponentID.Weapon);
            if (wComp == null)
            {
                return(false);
            }
            if (weapon != null)
            {
                DropCurWpn();
            }
            weapon = (WeaponComponent)wComp;
            Debug.Log("WEAPON added to equipment - " + itemComponent.itemName);
            MessageLog_Manager.NewMessage("You equip a " + itemComponent.itemName, Color.cyan);
            RenderSystem.instance.Render(itemComponent.itemName, wpnRenderer);
            return(true);
        }
        else if (itemComponent.itemType == ItemType.Armor)
        {
            EntityComponent aComp = itemEntity.GetEntityComponent(ComponentID.Armor);
            if (aComp == null)
            {
                return(false);
            }
            if (armor != null)
            {
                DropCurArmor();
            }
            armor = (ArmorComponent)aComp;
            Debug.Log("ARMOR added to equipment - " + itemComponent.itemName);
            MessageLog_Manager.NewMessage("You equip a " + itemComponent.itemName, Color.cyan);
            RenderSystem.instance.Render(itemComponent.itemName, armorRenderer);
            return(true);
        }
        return(false);
    }
Ejemplo n.º 5
0
        public void Initialize(
            PlatoonBehaviour platoon,
            GameObject art,
            GameObject deathEffect,
            VoiceComponent voice)
        {
            _unitData = gameObject.GetComponent <DataComponent>();

            TargetType type = _unitData.ApImmunity ? TargetType.INFANTRY : TargetType.VEHICLE;

            TargetTuple = new TargetTuple(this, type);
            Platoon     = platoon;

            _art         = art;
            _deathEffect = deathEffect?.GetComponent <WreckComponent>();

            _voiceComponent    = voice;
            _movementComponent = gameObject.GetComponent <MovementComponent>();
            _healthComponent   = gameObject.GetComponent <HealthComponent>();
            _armorComponent    = gameObject.GetComponent <ArmorComponent>();
            VisionComponent    = gameObject.GetComponent <VisionComponent>();
            _turretSystem      = gameObject.GetComponent <TurretSystem>();

            // Only used in this class, not really configurable,
            // and no way to get a reference to it here if it's
            // instantiated in the UnitFitter.
            // I think it's fine to leave it here.
            _selectionCircle = Instantiate(
                Resources.Load <GameObject>("SelectionCircle"), Transform);

            _movementComponent.Initialize();

            _healthComponent.Initialize(this, _unitData);
            VisionComponent.Initialize(this, _unitData);
            _armorComponent.Initialize(_healthComponent, _unitData, _movementComponent);

            _targetingOverlay = OverlayFactory.Instance.CreateTargetingOverlay(this);
            _targetingOverlay.gameObject.transform.parent = gameObject.transform;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Returns value for armor using its properties and filter settings
        /// </summary>
        /// <param name="sourceItem">Armor item</param>
        /// <param name="slot">Armor equipment slot</param>
        /// <returns>calculated value for armor</returns>
        public float CalculateArmorValue(EquipmentElement sourceItem, FilterArmorSettings filterArmor)
        {
            ArmorComponent armorComponentItem = sourceItem.Item.ArmorComponent;

            float sum =
                Math.Abs(filterArmor.HeadArmor) +
                Math.Abs(filterArmor.ArmArmor) +
                Math.Abs(filterArmor.ArmorBodyArmor) +
                Math.Abs(filterArmor.ArmorWeight) +
                Math.Abs(filterArmor.LegArmor);

            ItemModifier mod = sourceItem.ItemModifier;

            int HeadArmor = armorComponentItem.HeadArmor,
                BodyArmor = armorComponentItem.BodyArmor,
                LegArmor  = armorComponentItem.LegArmor,
                ArmArmor  = armorComponentItem.ArmArmor;
            float Weight  = sourceItem.Weight;

            if (mod != null)
            {
                // Since armor values are positive numbers, we need to check
                // if the given values have positive number before we apply
                // any modifiers to it.
                if (HeadArmor > 0f)
                {
                    HeadArmor = mod.ModifyArmor(HeadArmor);
                }
                if (BodyArmor > 0f)
                {
                    BodyArmor = mod.ModifyArmor(BodyArmor);
                }
                if (LegArmor > 0f)
                {
                    LegArmor = mod.ModifyArmor(LegArmor);
                }
                if (ArmArmor > 0f)
                {
                    ArmArmor = mod.ModifyArmor(ArmArmor);
                }
                //Weight *= mod.WeightMultiplier;

                HeadArmor = HeadArmor < 0 ? 0 : HeadArmor;
                BodyArmor = BodyArmor < 0 ? 0 : BodyArmor;
                LegArmor  = LegArmor < 0 ? 0 : LegArmor;
                ArmArmor  = ArmArmor < 0 ? 0 : ArmArmor;
            }

            float value = (
                HeadArmor * filterArmor.HeadArmor +
                BodyArmor * filterArmor.ArmorBodyArmor +
                LegArmor * filterArmor.LegArmor +
                ArmArmor * filterArmor.ArmArmor +
                Weight * filterArmor.ArmorWeight
                ) / sum;

#if DEBUG
            InformationManager.DisplayMessage(new InformationMessage(String.Format("{0}: HA {1}, BA {2}, LA {3}, AA {4}, W {5}",
                                                                                   sourceItem.Item.Name, HeadArmor, BodyArmor, LegArmor, ArmArmor, Weight)));

            InformationManager.DisplayMessage(new InformationMessage("Total score: " + value));
#endif
            return(value);
        }
 public override ItemCategory GetItemCategoryForItem(ItemObject itemObject)
 {
     if (itemObject.PrimaryWeapon != null)
     {
         WeaponComponentData primaryWeapon = itemObject.PrimaryWeapon;
         if (primaryWeapon.IsMeleeWeapon)
         {
             if (itemObject.Tier == ItemObject.ItemTiers.Tier6 || itemObject.Tier == ItemObject.ItemTiers.Tier5)
             {
                 return(DefaultItemCategories.MeleeWeapons5);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier4)
             {
                 return(DefaultItemCategories.MeleeWeapons4);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier3)
             {
                 return(DefaultItemCategories.MeleeWeapons3);
             }
             return(itemObject.Tier != ItemObject.ItemTiers.Tier2 ? DefaultItemCategories.MeleeWeapons1 : DefaultItemCategories.MeleeWeapons2);
         }
         if (primaryWeapon.IsRangedWeapon)
         {
             if (itemObject.Tier == ItemObject.ItemTiers.Tier6 || itemObject.Tier == ItemObject.ItemTiers.Tier5)
             {
                 return(DefaultItemCategories.RangedWeapons5);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier4)
             {
                 return(DefaultItemCategories.RangedWeapons4);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier3)
             {
                 return(DefaultItemCategories.RangedWeapons3);
             }
             return(itemObject.Tier != ItemObject.ItemTiers.Tier2 ? DefaultItemCategories.RangedWeapons1 : DefaultItemCategories.RangedWeapons2);
         }
         if (primaryWeapon.IsShield)
         {
             if (itemObject.Tier == ItemObject.ItemTiers.Tier6 || itemObject.Tier == ItemObject.ItemTiers.Tier5)
             {
                 return(DefaultItemCategories.Shield5);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier4)
             {
                 return(DefaultItemCategories.Shield4);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier3)
             {
                 return(DefaultItemCategories.Shield3);
             }
             return(itemObject.Tier != ItemObject.ItemTiers.Tier2 ? DefaultItemCategories.Shield1 : DefaultItemCategories.Shield2);
         }
         return(primaryWeapon.IsAmmo ? DefaultItemCategories.Arrows : DefaultItemCategories.MeleeWeapons1);
     }
     if (itemObject.HasHorseComponent)
     {
         return(DefaultItemCategories.Horse);
     }
     if (itemObject.HasArmorComponent)
     {
         ArmorComponent armorComponent = itemObject.ArmorComponent;
         if (itemObject.Type == ItemObject.ItemTypeEnum.HorseHarness)
         {
             if (itemObject.Tier == ItemObject.ItemTiers.Tier6 || itemObject.Tier == ItemObject.ItemTiers.Tier5)
             {
                 return(DefaultItemCategories.HorseEquipment5);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier4)
             {
                 return(DefaultItemCategories.HorseEquipment4);
             }
             if (itemObject.Tier == ItemObject.ItemTiers.Tier3)
             {
                 return(DefaultItemCategories.HorseEquipment3);
             }
             return(itemObject.Tier != ItemObject.ItemTiers.Tier2 ? DefaultItemCategories.HorseEquipment : DefaultItemCategories.HorseEquipment2);
         }
         if (itemObject.Tier == ItemObject.ItemTiers.Tier6 || itemObject.Tier == ItemObject.ItemTiers.Tier5)
         {
             return(DefaultItemCategories.UltraArmor);
         }
         if (itemObject.Tier == ItemObject.ItemTiers.Tier4)
         {
             return(DefaultItemCategories.HeavyArmor);
         }
         if (itemObject.Tier == ItemObject.ItemTiers.Tier3)
         {
             return(DefaultItemCategories.MediumArmor);
         }
         return(itemObject.Tier != ItemObject.ItemTiers.Tier2 ? DefaultItemCategories.Garment : DefaultItemCategories.LightArmor);
     }
     return(itemObject.HasSaddleComponent ? DefaultItemCategories.HorseEquipment : DefaultItemCategories.Unassigned);
 }
Ejemplo n.º 8
0
 protected void Awake()
 {
     base.Awake();
     hpComponent = GetComponent<HpComponent>();
     armorComponent = GetComponent<ArmorComponent>();
 }
Ejemplo n.º 9
0
        public void Run()
        {
            foreach (int i in _pedsWithArmor)
            {
                GswPedComponent gswPed = _pedsWithArmor.Components1[i];
                ArmorComponent  armor  = _pedsWithArmor.Components2[i];

                Ped ped = gswPed.ThisPed;
                if (!ped.Exists())
                {
                    continue;
                }

                if (ped.Armor > armor.Armor)
                {
                    armor.Armor = ped.Armor;
                }
#if DEBUG
                if (armor.Armor <= 0)
                {
                    continue;
                }

                Vector3 position = ped.AbovePosition;
                float   maxArmor = ped.IsLocalPlayer
                    ? NativeFunction.Natives.GET_PLAYER_MAX_ARMOUR <int>(Game.LocalPlayer)
                    : 100;
                Debug.DrawWireBoxDebug(position, ped.Orientation, new Vector3(1.05f, 0.15f, 0.1f), Color.LightSkyBlue);
                Debug.DrawWireBoxDebug(position, ped.Orientation, new Vector3(armor.Armor / maxArmor, 0.1f, 0.1f), Color.MediumBlue);
#endif
            }

            foreach (int i in _damagedPedsWithArmor)
            {
                GswPedComponent gswPed = _damagedPedsWithArmor.Components1[i];
                ArmorComponent  armor  = _damagedPedsWithArmor.Components4[i];
                Ped             ped    = gswPed.ThisPed;
                if (!ped.Exists())
                {
                    continue;
                }

                int pedEntity = _damagedPedsWithArmor.Entities[i];
                if (armor.Armor <= 0)
                {
#if DEBUG
                    _logger.MakeLog($"Ped {ped.Name(pedEntity)} doesn't have armor");
#endif
                    ped.Armor = armor.Armor;
                    continue;
                }

                int bodyPartEntity = _damagedPedsWithArmor.Components2[i].DamagedBodyPartEntity;
                var bodyArmor      = _ecsWorld.GetComponent <BodyPartArmorComponent>(bodyPartEntity);
                if (bodyArmor == null || !bodyArmor.ProtectedByBodyArmor)
                {
#if DEBUG
                    var partName = bodyPartEntity.GetEntityName(_ecsWorld);
                    _logger.MakeLog($"{partName} of {ped.Name(pedEntity)} is not protected by armor");
#endif
                    ped.Armor = armor.Armor;
                    continue;
                }

                int weaponEntity = _damagedPedsWithArmor.Components3[i].WeaponEntity;
                var weaponStats  = _ecsWorld.GetComponent <ArmorWeaponStatsComponent>(weaponEntity);
                if (weaponStats == null)
                {
#if DEBUG
                    _logger.MakeLog($"This weapon doesn't have {nameof(ArmorWeaponStatsComponent)}");
#endif
                    ped.Armor = armor.Armor;
                    continue;
                }

                armor.Armor -= weaponStats.ArmorDamage;
                var newPain = _ecsWorld.EnsureComponent <AdditionalPainComponent>(pedEntity, out bool _);
                newPain.AdditionalPain = weaponStats.ArmorDamage;
#if DEBUG
                _logger.MakeLog($"Pain {newPain.AdditionalPain} by armor hit for ped {ped.Name(pedEntity)}");
#endif

                if (armor.Armor <= 0)
                {
#if DEBUG
                    _logger.MakeLog($"Armor of {ped.Name(pedEntity)} was destroyed");
#endif
                    ped.Armor = armor.Armor;
                    continue;
                }

                float maxArmor = ped.IsLocalPlayer
                    ? NativeFunction.Natives.GET_PLAYER_MAX_ARMOUR <int>(Game.LocalPlayer)
                    : 100;

                float armorPercent = armor.Armor / maxArmor;
                if (!weaponStats.CanPenetrateArmor || weaponStats.MinArmorPercentForPenetration < armorPercent)
                {
#if DEBUG
                    _logger.MakeLog($"Armor of {ped.Name(pedEntity)} was not penetrated");
#endif
                    _ecsWorld.RemoveComponent <DamagedByWeaponComponent>(pedEntity);
                    _ecsWorld.RemoveComponent <DamagedBodyPartComponent>(pedEntity);
                    ped.Armor = armor.Armor;
                    continue;
                }

                float chanceToPenetrate = 1 - armorPercent / weaponStats.MinArmorPercentForPenetration;
                bool  wasPenetrated     = Random.IsTrueWithProbability(chanceToPenetrate);
                if (!wasPenetrated)
                {
#if DEBUG
                    _logger.MakeLog($"Armor of {ped.Name(pedEntity)} was not penetrated, when chance was {chanceToPenetrate}");
#endif
                    _ecsWorld.RemoveComponent <DamagedByWeaponComponent>(pedEntity);
                    _ecsWorld.RemoveComponent <DamagedBodyPartComponent>(pedEntity);
                    ped.Armor = armor.Armor;
                    continue;
                }

#if DEBUG
                _logger.MakeLog($"Armor of {ped.Name(pedEntity)} was penetrated, when chance was {chanceToPenetrate}");
#endif
                ped.Armor = armor.Armor;
            }
        }
Ejemplo n.º 10
0
    private void Update()
    {
        if (inputState == InputState.Off)
        {
            return;
        }
        Vector2 inputV2 = Vector2.zero;

        if (Input.GetButtonDown("DiagTopLeft"))
        {
            inputV2 = Vector2.up + Vector2.left;
        }
        else if (Input.GetButtonDown("DiagTopRight"))
        {
            inputV2 = Vector2.up + Vector2.right;
        }
        else if (Input.GetButtonDown("DiagBottomRight"))
        {
            inputV2 = Vector2.down + Vector2.right;
        }
        else if (Input.GetButtonDown("DiagBottomLeft"))
        {
            inputV2 = Vector2.down + Vector2.left;
        }
        else
        {
            inputV2 = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
        }


        if (inputV2 != lastV2)
        {
            lastV2 = inputV2;
            if (inputV2 == Vector2.zero)
            {
                return;
            }
            if (OnMoveInput != null)
            {
                OnMoveInput(new MoveData(inputV2.x, inputV2.y));
            }
        }

        if (dynamicKeyActions.Count > 0)
        {
            for (int i = 0; i < dynamicKeyActions.Count; i++)
            {
                if (Input.GetKeyDown(dynamicKeyActions[i].dynamicKey))
                {
                    dynamicKeyActions[i].action();
                }
            }
        }


        if (canFindTile == false)
        {
            return;
        }
        mousePos = Vector2Int.FloorToInt(Camera.main.ScreenToWorldPoint(Input.mousePosition));
        if (mousePos != lastMousePos)
        {
            lastMousePos = mousePos;
            infoUI.Clear();
            MapTile tile = mapManager.Map.GetTile(mousePos.x, mousePos.y);
            if (tile == null)
            {
                infoUI.DeActivate();
                return;
            }
            if (tile.tileType == TileType.Darkness)
            {
                infoUI.Activate();

                infoUI.UpdateTexts(new Message[] { new Message("Poison", Color.magenta), new Message("100%", Color.red), new Message("Lethal!", Color.red) });
                infoUI.UpdatePosition(mousePos + Vector2.left * 2, canvas);
                return;
            }
            if (tile.tileType == TileType.SemiDark)
            {
                infoUI.Activate();

                infoUI.UpdateTexts(new Message[] { new Message("Poison", Color.magenta), new Message("50%", Color.yellow), new Message("Dangerous!", Color.yellow) });
                infoUI.UpdatePosition(mousePos + Vector2.left * 2, canvas);
                return;
            }

            if (tile.entities.Count <= 0)
            {
                infoUI.DeActivate();
                return;
            }
            else
            {
                Message[] info = new Message[3];
                if (tile.entities[0].entityType == EntityType.Unit)
                {
                    FighterComponent fighter = (FighterComponent)tile.entities[0].GetEntityComponent(ComponentID.Fighter);
                    info[0] = new Message(fighter.thisEntity.Name, Color.white);
                    info[1] = new Message(fighter.GetAttackPower().ToString(), Color.red);
                    info[2] = new Message(fighter.GetDefensePower().ToString(), Color.cyan);
                }
                else if (tile.entities[0].entityType == EntityType.Item)
                {
                    ItemComponent item = (ItemComponent)tile.entities[0].GetEntityComponent(ComponentID.Item);
                    info[0] = new Message(item.itemName, Color.white);
                    if (item.itemType == ItemType.Weapon)
                    {
                        WeaponComponent wpn = (WeaponComponent)tile.entities[0].GetEntityComponent(ComponentID.Weapon);
                        info[1] = new Message(wpn.weaponAttackStats.AttackPower.ToString(), Color.red);
                        info[2] = new Message(wpn.weaponAttackStats.DefensePower.ToString(), Color.cyan);
                    }
                    else if (item.itemType == ItemType.Armor)
                    {
                        ArmorComponent armor = (ArmorComponent)tile.entities[0].GetEntityComponent(ComponentID.Armor);
                        info[1] = new Message(armor.armorAttackStats.AttackPower.ToString(), Color.red);
                        info[2] = new Message(armor.armorAttackStats.DefensePower.ToString(), Color.cyan);
                    }
                    else
                    {
                        HealthDropComponent consumable = (HealthDropComponent)tile.entities[0].GetEntityComponent(ComponentID.Consumable);
                        info[1] = new Message(consumable.HealthGained.ToString(), Color.cyan);
                    }
                }
                infoUI.Activate();
                infoUI.UpdateTexts(info);
                infoUI.UpdatePosition(mousePos + Vector2.left * 2, canvas);
            }
        }
    }
Ejemplo n.º 11
0
    private void OnArmorDamage(ArmorComponent armorComponent, bool survived, int damage)
    {
        string color = survived ? "#088" : "#f0f";

        takeDamageMessage.Add($"Your component {armorComponent.GetCurrentIdentifier()} absorbed <color={color}>{damage} IP damage{(!survived ? ", and was deleted" : "")}</color>");
    }