private void OnDestroy() { if (inWeapon != null) { inWeapon.loadedMagazine = null; inWeapon = null; } onDestroy.Invoke(); }
bool CheckIfArmed() { if (weapon == null) { weapon = rightHand.GetComponentInChildren <WeaponPhysicalObject>(); if (weapon == null) { weapon = leftHand.GetComponentInChildren <WeaponPhysicalObject>(); } } return(weapon != null); }
/// <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 }
/// <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()); }
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; }
public void ReloadWeapon(PhysicalObject weaponObject, float reloadTimer = 0) { WeaponPhysicalObject weapon = (WeaponPhysicalObject)weaponObject; weapon?.loadedMagazine?.AgentReload(reloadTimer); }