Ejemplo n.º 1
0
    private void OnDestroy()
    {
        if (inWeapon != null)
        {
            inWeapon.loadedMagazine = null;
            inWeapon = null;
        }

        onDestroy.Invoke();
    }
Ejemplo n.º 2
0
    bool CheckIfArmed()
    {
        if (weapon == null)
        {
            weapon = rightHand.GetComponentInChildren <WeaponPhysicalObject>();
            if (weapon == null)
            {
                weapon = leftHand.GetComponentInChildren <WeaponPhysicalObject>();
            }
        }

        return(weapon != null);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Called when picking up this item
    /// </summary>
    public void OnLoaded(Transform pickedUpByHand, WeaponPhysicalObject weapon)
    {
        //internal stuff
        isPickedUp = true;
        //NOTE: REMEMBER TO USE RIGIDBODY.MovePosition instead of changing transform.position to avoid weird physics, or lack thereof
        body.isKinematic = true;

        transform.rotation = pickedUpByHand.rotation;
        transform.position = pickedUpByHand.position;
        transform.parent   = pickedUpByHand.transform;

        inWeapon = weapon;

        // TODO: should invoke something
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Called when picking up this item
    /// </summary>
    public override void OnPickUp(Transform pickedUpByHand)
    {
        //internal stuff
        isPickedUp = true;

        body.isKinematic = true;
        transform.parent = pickedUpByHand.transform;

        if (inWeapon != null)
        {
            inWeapon.loadedMagazine = null;
            inWeapon = null;
        }

        //external stuff
        onPickup.Invoke(pickedUpByHand);
    }
 public bool HasAmmoInGun(WeaponPhysicalObject weaponObject)
 {
     return(weaponObject.loadedMagazine.IsNotEmpty());
 }
Ejemplo n.º 6
0
    void UpdateWeaponsAndTarget()
    {
        seePlayer = Agent.Sensor.IsSeeingPlayer;

        if (seePlayer)
        {
            lastSeenPlayerPos  = Agent.Sensor.player.transform.position;
            timeSinceSawPlayer = Time.realtimeSinceStartup;
        }

        if ((prevCalcPlayerPos - Agent.Sensor.player.transform.position).sqrMagnitude > distanceUpdateThreshold ||
            (prevAgentPos - transform.position).sqrMagnitude > distanceUpdateThreshold || (seePlayer && !prevFrameSeePlayer))
        {
            prevCalcPlayerPos = Agent.Sensor.player.transform.position;
            prevAgentPos      = transform.position;

            if (leftWeapon == null)
            {
                try
                { leftWeapon = (WeaponPhysicalObject)Agent.Sensor.GetItemInHand(Agent.Sensor.leftHand); }
                catch (System.InvalidCastException) { leftWeapon = null; }
#if ROBOOTCAMP
                if (leftWeapon == null)
                {
                    Commander.AddReward(-0.05f);
                }
#endif
            }
            if (rightWeapon == null)
            {
                try
                { rightWeapon = (WeaponPhysicalObject)Agent.Sensor.GetItemInHand(Agent.Sensor.rightHand); }
                catch (System.InvalidCastException) { rightWeapon = null; }
#if ROBOOTCAMP
                if (rightWeapon == null)
                {
                    Commander.AddReward(-0.05f);
                }
#endif
            }
#if ROBOOTCAMP
            if (!Agent.Sensor.IsArmed)
            {
                Commander.AddReward(-1.00f);
                Commander.Done();
            }
#endif


            leftStartSlerpRotation  = leftWeaponHand.rotation;
            rightStartSlerpRotation = rightWeaponHand.rotation;
            reachedTarget           = false;
            leftSlerpPos            = 0f;
            rightSlerpPos           = 0f;

            if ((leftWeapon != null || rightWeapon != null) && (lastSeenPlayerPos != Vector3.zero || Time.realtimeSinceStartup - timeSinceSawPlayer < blindSupressTime) && seePlayer)
            {
                aimAtTarget = GetTargetToHit(lastSeenPlayerPos, 0.1f);

                float diffSqrtMagnitude = (transform.position - Agent.Sensor.player.transform.position).sqrMagnitude * 0.3f;
                leftAimAtTarget  = aimAtTarget + GetRandomVectorOffset(diffSqrtMagnitude);
                rightAimAtTarget = aimAtTarget + GetRandomVectorOffset(diffSqrtMagnitude);
            }
        }
        if (!seePlayer && (lastSeenPlayerPos == Vector3.zero || Time.realtimeSinceStartup - timeSinceSawPlayer > blindSupressTime))
        {
            aimAtTarget      = GetTargetToHit(lastSeenPlayerPos, 0.1f);
            leftAimAtTarget  = Agent.Sensor.leftHand.position + transform.forward;
            rightAimAtTarget = Agent.Sensor.rightHand.position + transform.forward;
        }

        prevFrameSeePlayer = seePlayer;
    }
Ejemplo n.º 7
0
    public void ReloadWeapon(PhysicalObject weaponObject, float reloadTimer = 0)
    {
        WeaponPhysicalObject weapon = (WeaponPhysicalObject)weaponObject;

        weapon?.loadedMagazine?.AgentReload(reloadTimer);
    }