public Inventory() { syringe = new Syringe(); medkit = new Medkit(); shieldCell = new ShieldCell(); shieldBattery = new ShieldBattery(); phoenixKit = new Phoenixkit(); }
private Medkit FindClosestMedkit() { distanceToMedkit = float.PositiveInfinity; Medkit closestMedkit = null; foreach (Medkit medkit in Medkit.medkits) { if (medkit.enabled) { if (Vector3.Distance(medkit.transform.position, this.transform.position) < distanceToMedkit) { distanceToMedkit = Vector3.Distance(medkit.transform.position, this.transform.position); closestMedkit = medkit; } } } return(closestMedkit); }
public void PickUpMedkit(Medkit medkit) { if (medkit.instantHeal || medkit.healDuration == 0) { if (currentHealth + medkit.healAmount <= health) { currentHealth += medkit.healAmount; } else { currentHealth = health; } healthSlider.value = currentHealth; } else { StartCoroutine(Healing(medkit.healDuration, medkit.healAmount)); } state = AIState.WalkingOnPath; }
public PowerUp GetPowerup(string powerupType) { if (powerupType == null) { return(null); } if (powerupType.Equals("DeflectionSyringe")) { PowerupFlyweight flyweight = PowerupFlyweightFactory.GetFlyweight(TextureIdentifier.DeflectionSyringe, new DeflectionStrategy()); return(new DeflectionSyringe(flyweight)); } else if (powerupType.Equals("HealingSyringe")) { PowerupFlyweight flyweight = PowerupFlyweightFactory.GetFlyweight(TextureIdentifier.HealingSyringe, new HealingStrategy()); return(new HealingSyringe(flyweight)); } else if (powerupType.Equals("Medkit")) { PowerupFlyweight flyweight = PowerupFlyweightFactory.GetFlyweight(TextureIdentifier.Medkit, new HealingStrategy()); var tmpMedkit = new Medkit(flyweight); tmpMedkit.PowerUpStrategy = new HealingStrategy(100f); return(tmpMedkit); } else if (powerupType.Equals("MovementSyringe")) { PowerupFlyweight flyweight = PowerupFlyweightFactory.GetFlyweight(TextureIdentifier.MovementSyringe, new MovmentSpeedStrategy()); return(new MovementSyringe(flyweight)); } else if (powerupType.Equals("ReloadSyringe")) { PowerupFlyweight flyweight = PowerupFlyweightFactory.GetFlyweight(TextureIdentifier.ReloadSyringe, new ReloadSpeedStrategy()); return(new ReloadSyringe(flyweight)); } return(null); }
// OnStateEnter is called before OnStateEnter is called on any state inside this state machine override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { ItemCore item = animator.gameObject.transform.parent.GetComponent <ItemCore>(); Medkit medkit = animator.gameObject.transform.parent.GetComponent <Medkit>(); Syringe syringe = animator.gameObject.transform.parent.GetComponent <Syringe>(); //MeleeWeapon melee = animator.gameObject.transform.parent.GetComponent<MeleeWeapon>(); // item.animationEnded = false; if (!item.runTriggerActivated) { //item.runTriggerActivated = false; item.animator.SetBool("stopMovementAnimation", false); } else { item.runTriggerActivated = false; } item.isInAnimation = false; item.lerp.canChange = true; item.lerp.timer = 0; item.lerp.lerpOnce = true; item.lerp.canLerp = false; item.canUse = true; item.isInAnimation = false; item.player.isDoingAction = false; if (medkit) { medkit.canHeal = true; } if (syringe) { syringe.canInject = true; } }
public void GainItem(CollectibleItem itemType, Collectible collectible) { if (Inventory.ContainsKey(itemType)) { Inventory[itemType].Add(collectible); UpdateUI(); } else { Inventory.Add(itemType, new List <Collectible>()); Inventory[itemType].Add(collectible); } if (Inventory.ContainsKey(CollectibleItem.Medkit)) { List <Collectible> medkits = Inventory[CollectibleItem.Medkit]; while (medkits.Count > 0) { Medkit medkit = medkits[0] as Medkit; Director.Instance.PlayerHealth.HealthSync += medkit.HealAmount; medkits.Remove(medkit); } } UpdateUI(); }
// Update is called once per frame void Update() { timeSinceLastShoot += Time.deltaTime; canvas.transform.rotation = Quaternion.LookRotation(canvas.transform.position - Camera.main.transform.position); distanceToPlayer = Vector3.Distance(player.transform.position, this.transform.position); Medkit medkit = FindClosestMedkit(); if (currentHealth <= health * 0.4f && distanceToMedkit < distanceToPlayer) { navAgent.speed = runningSpeed; navAgent.SetDestination(medkit.transform.position); state = AIState.FindingMedkit; } else { if (weapons.Count > 0) { bool noAmmo = true; if ((inventoryAmmos[inventoryWeapons[currWeapon].ammoType] + inventoryWeapons[currWeapon].currentMagazine) > 0) { noAmmo = false; } if (noAmmo) { AmmoBox closestBox = FindClosestAmmo(inventoryWeapons[currWeapon].ammoType); if (closestBox != null) { navAgent.speed = runningSpeed; navAgent.isStopped = false; navAgent.SetDestination(closestBox.transform.position); state = AIState.FindingAmmo; } else { navAgent.isStopped = false; state = AIState.WalkingOnPath; } } else { if (Physics.SphereCast(eyesPos.position, 0.5f, player.hand.transform.position - eyesPos.position, out RaycastHit hit, viewRange)) { if (hit.transform.CompareTag("Player") || hit.transform.CompareTag("PlayerPart")) { if (hit.distance < maxShootRange) { state = AIState.Shooting; animator.SetBool("Aiming", true); navAgent.isStopped = true; } else { navAgent.isStopped = false; state = AIState.RunningToShootPosition; } transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(player.hand.transform.position - eyesPos.position), 2); StopCoroutine("WaitToLostAggro"); StartCoroutine("WaitToLostAggro"); } else { if (state == AIState.Shooting) { state = AIState.RunningToShootPosition; } animator.SetBool("Aiming", false); navAgent.isStopped = false; } } } } else { navAgent.speed = runningSpeed; state = AIState.FindingWeapon; } } switch (state) { case AIState.Idle: break; case AIState.WalkingOnPath: if (navPath != null) { DoPath(); navAgent.speed = speed; } break; case AIState.Shooting: if (player != null) { if (navAgent.velocity.magnitude < 0.1f) { IK = player.gameObject.transform.position + Vector3.up; } if (inventoryWeapons[currWeapon].currentMagazine > 0) { if (timeSinceLastShoot >= 60 / (inventoryWeapons[currWeapon].fireRate * 60) && state == AIState.Shooting && Vector3.Distance(transform.position, player.transform.position) <= (maxShootRange + 1)) { animator.SetBool("Aiming", true); Fire(); timeSinceLastShoot = 0; } } else if (!reloading) { if (inventoryAmmos.ContainsKey(inventoryWeapons[currWeapon].ammoType)) { if (inventoryAmmos[inventoryWeapons[currWeapon].ammoType] > 0) { animator.SetTrigger("Reload"); reloading = true; StopCoroutine("WaitForReload"); StartCoroutine("WaitForReload"); } } } } break; case AIState.FindingPlayer: navAgent.speed = runningSpeed; animator.SetBool("Aiming", false); break; case AIState.FindingAmmo: animator.SetBool("Aiming", false); break; case AIState.FindingWeapon: break; case AIState.FindingMedkit: break; case AIState.RunningToShootPosition: navAgent.SetDestination(player.transform.position); navAgent.speed = runningSpeed; break; default: break; } if (navAgent.velocity.magnitude > 0.1f) { animator.SetFloat("Horizontal", 0f); if (navAgent.velocity.magnitude > runningSpeed * 0.9) { animator.SetBool("isRunning", true); animator.SetFloat("Vertical", navAgent.velocity.normalized.magnitude * 0.9f); } else { animator.SetBool("isRunning", false); animator.SetFloat("Vertical", navAgent.velocity.normalized.magnitude * 0.9f); } } else { animator.SetFloat("Vertical", 0); } }