//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)); }
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; }
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)); }
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); }
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; }
/// <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); }
protected void Awake() { base.Awake(); hpComponent = GetComponent<HpComponent>(); armorComponent = GetComponent<ArmorComponent>(); }
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; } }
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); } } }
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>"); }