Example #1
0
 public Inventory()
 {
     syringe       = new Syringe();
     medkit        = new Medkit();
     shieldCell    = new ShieldCell();
     shieldBattery = new ShieldBattery();
     phoenixKit    = new Phoenixkit();
 }
Example #2
0
            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);
            }
Example #3
0
 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;
        }
    }
Example #6
0
 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();
 }
Example #7
0
            // 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);
                }
            }