private void Shoot(double time) { if (Network.isServer) { _anim.SetTrigger(_hash.pistolFireTrigger); // DamageLocation historicalHitLocation = null; Vector3 historicalPointOfAim; // Rollback world state to match what shooter saw at the time they shot. using (new RollbackContext(_syncManager, time)) { historicalPointOfAim = _rangedTarget.transform.position; // Get colliders where shot lands Collider[] colliders = Physics.OverlapSphere(historicalPointOfAim, 0.001f); GameObject hitBodyPart = colliders .Select(c => c.gameObject) .FirstOrDefault(go => go.tag == Tags.bodyPart); var gos = colliders.Select(c => c.gameObject).ToArray(); var gox = gos.FirstOrDefault(x => x.tag == Tags.bodyPart); if (hitBodyPart != null) { // Shot hit a player's body part. historicalHitLocation = hitBodyPart.GetComponent <DamageLocation>(); } } _syncManager.RecordShot(networkGuid, historicalPointOfAim, GetMuzzlePosition()); if (historicalHitLocation != null) { DamageLocationScaled(historicalHitLocation, 30); } } else { _anim.SetTrigger(_hash.pistolFireTrigger); _syncManager.RenderShot(_rangedTarget.transform.position, GetMuzzlePosition()); } }
private void DamageLocationScaled(DamageLocation damageLocation, int damage) { Player otherPlayer = damageLocation.player.GetComponent <Player>(); switch (damageLocation.damageLocationType) { case DamageLocationType.Head: otherPlayer.hp -= (int)(damage * 3.34f); break; case DamageLocationType.Torso: otherPlayer.hp -= damage; break; case DamageLocationType.Legs: otherPlayer.hp -= (int)(damage * 0.67f); break; default: throw new ArgumentOutOfRangeException(); } }
private void DamageLocationScaled(DamageLocation damageLocation, int damage) { Player otherPlayer = damageLocation.player.GetComponent<Player>(); switch (damageLocation.damageLocationType) { case DamageLocationType.Head: otherPlayer.hp -= (int)(damage * 3.34f); break; case DamageLocationType.Torso: otherPlayer.hp -= damage; break; case DamageLocationType.Legs: otherPlayer.hp -= (int)(damage * 0.67f); break; default: throw new ArgumentOutOfRangeException(); } }
public GameEventDefenderNotification(Session session, string attackerName, DamageType damageType, float percent, uint damage, DamageLocation damageLocation, bool criticalHit, AttackConditions attackConditions) : base(GameEventType.DefenderNotification, GameMessageGroup.UIQueue, session) { Writer.WriteString16L(attackerName); Writer.Write((uint)damageType); Writer.Write((double)percent); Writer.Write(damage); Writer.Write((uint)damageLocation); Writer.Write(Convert.ToUInt32(criticalHit)); Writer.Write((UInt64)attackConditions); Writer.Align(); }
public DamageEvent(int amount, DamageLocation location, Vector3 position) { Amount = amount; Location = location; Position = position; }
protected virtual void Awake() { _anim = GetComponent <Animator>(); _hash = GameObject.FindGameObjectWithTag(Tags.gameController).GetComponent <HashIDs>(); _syncManager = GameObject.FindGameObjectWithTag(Tags.networkController).GetComponent <SyncManager>(); _modelInfo = GetComponent <ModelInfo>(); // Create a marker object for player's ranged target. _rangedTarget = InstantiateAsChild(ResourceDirectory.Instance.Creatures["redMarker"], transform) as GameObject; // Create IK controller for right arm. GameObject rArmIkController = GameObject.Instantiate(Resources.Load("Prefabs/Animation/LimbIkController")) as GameObject; rArmIkController.transform.parent = gameObject.transform; _rArmIkLimb = rArmIkController.GetComponent <IkLimb>(); _rArmIkLimb.upperArm = _modelInfo.rArm.transform; _rArmIkLimb.forearm = _modelInfo.rForearm.transform; _rArmIkLimb.hand = _modelInfo.rHand.transform; _rArmIkLimb.elbowTarget = _modelInfo.rArmPistolIkElbowTarget; _rArmIkLimb.target = _modelInfo.rArmPistolIkHandTarget.transform; _rArmIkLimb.IsEnabled = false; _rArmIkLimb.debug = true; _rArmIkLimb.transition = 0.65f; _rArmIkLimb.handRotationPolicy = IkLimb.HandRotations.UseTargetRotation; // Create IK controller for left arm. GameObject lArmIkController = GameObject.Instantiate(Resources.Load("Prefabs/Animation/LimbIkController")) as GameObject; lArmIkController.transform.parent = gameObject.transform; _lArmIkLimb = lArmIkController.GetComponent <IkLimb>(); _lArmIkLimb.upperArm = _modelInfo.lArm.transform; _lArmIkLimb.forearm = _modelInfo.lForearm.transform; _lArmIkLimb.hand = _modelInfo.lHand.transform; _lArmIkLimb.elbowTarget = _modelInfo.lArmPistolIkElbowTarget; _lArmIkLimb.target = _modelInfo.lArmPistolIkHandTarget; _lArmIkLimb.IsEnabled = false; _lArmIkLimb.debug = true; _lArmIkLimb.transition = 0.9f; // Add DamageLocation scripts to skeleton. DamageLocation headDamageLocation = _modelInfo.head.AddComponent <DamageLocation>(); headDamageLocation.damageLocationType = DamageLocationType.Head; headDamageLocation.player = this.gameObject; DamageLocation torsoDamageLocation = _modelInfo.torso.AddComponent <DamageLocation>(); torsoDamageLocation.damageLocationType = DamageLocationType.Torso; torsoDamageLocation.player = this.gameObject; DamageLocation legsDamageLocation = _modelInfo.legs.AddComponent <DamageLocation>(); legsDamageLocation.damageLocationType = DamageLocationType.Legs; legsDamageLocation.player = this.gameObject; // Create initial NoWeapon object. EquipWeaponByName("NoWeapon"); // Create camera orbiter object. MouseOrbit = (GameObject.Instantiate(ResourceDirectory.Instance.Camera["Orbiter"]) as GameObject).GetComponent <MouseOrbit>(); MouseOrbit.transform.parent = transform; MouseOrbit.target = transform; }