Exemple #1
0
 public override void OnEvent(PlayerHitEvent evnt)
 {
     if (myPlayer = evnt.targetEntity)
     {
         myPlayer.GetComponent <PlayerSubScript>().HealthChange(evnt.damage, evnt.attacker, evnt.attackerEntity);
     }
 }
Exemple #2
0
 void Handle(PlayerHitEvent e)
 {
     constraint.ForEachGameObject((egoComponent, transform, player, animator, jump, movement, onCollisionEnter, sound) => {
         if (e.playerID == player.playerID)
         {
         }
     });
 }
Exemple #3
0
    void ProcessWeaponHit(GameObject a_hitObject)
    {
        Player hitPlayer = null;

        //try to find a player component
        if (!a_hitObject.TryGetComponent <Player>(out hitPlayer))
        {
            hitPlayer = a_hitObject.GetComponentInParent <Player>(); //try to get the component from parent
        }

        //if the object hit has a player component, deal damage
        if (hitPlayer)
        {
            float damageToInflict = damagePerBullet;
            //check for headshot
            if (a_hitObject.TryGetComponent <Head>(out var playerHead))
            {
                damageToInflict *= headshotMultiplier;

                GameUI.instance.ActivateHitmarker(GameUI.HitmarkerType.headshot);
                audioSource.PlayOneShot(headshotSound, 0.25f);
            }
            else
            {
                GameUI.instance.ActivateHitmarker(GameUI.HitmarkerType.regular);
                audioSource.PlayOneShot(bodyHitSound, 1f);
            }

            //send player hit event
            var playerHitEvt = PlayerHitEvent.Create(Bolt.GlobalTargets.Everyone, Bolt.ReliabilityModes.ReliableOrdered);

            playerHitEvt.PlayerHitNum    = hitPlayer.playerNum;
            playerHitEvt.DamageToInflict = damageToInflict;
            playerHitEvt.Send();

            return;
        }

        //try to find a health component
        if (a_hitObject.TryGetComponent <Health>(out var objectHitHealth))
        {
            float damageToInflict = damagePerBullet;

            //check for headshot
            if (a_hitObject.TryGetComponent <Head>(out var head))
            {
                damageToInflict *= headshotMultiplier;
            }

            objectHitHealth.TakeDamage(damageToInflict);

            return;
        }
    }
 private void OnPlayerHit(PlayerHitEvent customEvent)
 {
     currentHealth -= customEvent.Damage;
     if (currentHealth <= 0)
     {
         uiManager.UpdateHealth(0);
         gameManager.LoseGame();
     }
     else
     {
         uiManager.UpdateHealth(currentHealth);
     }
 }
Exemple #5
0
 void PlayerHitCheck()
 {
     Physics.Raycast(Spawnpoints.bulletSpawnPoint.position, Spawnpoints.bulletSpawnPoint.forward, out RaycastHit hit);
     if (hit.collider != null && hit.collider.CompareTag("FPSPlayer"))
     {
         var evnt = PlayerHitEvent.Create();
         evnt.attacker       = attacker.text;
         evnt.targetEntity   = hit.collider.gameObject.GetComponent <BoltEntity>();
         evnt.damage         = Random.Range(30, 35);
         evnt.attackerEntity = myEntity;
         evnt.Send();
     }
 }
Exemple #6
0
        /// <summary>
        /// Handles collisions between shells and Players and the Arena.
        /// Shells are destroyed on impact, playerHits are reported cia event call if enabled.
        /// </summary>
        /// <param name="callEvent">Whether should the player hits trigger PlayerHitEvent.</param>
        public void ResolveShellCollisions(double dt, bool callEvent)
        {
            var a           = World.Arena;
            var toBeRemoved = new List <int>();

            void RemoveShell(int index) => toBeRemoved.Add(index);
            bool NotOwner(TankShell shell, Player p) => p.ID != shell.OwnerPID;

            for (int i = 0; i < World.shells.Count; ++i)
            {
                var shell = World.shells[i];
                //Collisions with the players
                bool removed = false;
                foreach (var p in World.players.Values)
                {
                    if (ResolveSphereAABBCollsion(p.Position.Xy, Player.radius,
                                                  shell.position, TankShell.boundingBox).LengthSquared > 0.0 &&
                        NotOwner(shell, p))                           //Ignore self-collisions
                    {
                        if (callEvent)
                        {
                            PlayerHitEvent?.Invoke(p, shell);
                        }
                        RemoveShell(i);
                        removed = true;
                        break;
                    }
                }
                if (removed)
                {
                    continue;
                }
                //Collisions with the arena
                foreach (var cellCenter in GetSurroundingWallCellsCenters(CalcCellCoords(shell.position, a), a))
                {
                    if (ShellAABBCollisionCheck(shell.position, cellCenter, Arena.boundingBox))
                    {
                        RemoveShell(i);
                        break;
                    }
                }
            }

            toBeRemoved.Sort();
            for (int i = toBeRemoved.Count - 1; i >= 0; --i)
            {
                World.shells.RemoveAt(toBeRemoved[i]);
            }
        }
        void CheckIfPlayerWasHit()
        {
            var asteroids =
                this.DataCenter.GetEntitiesWithTag("Asteroid");
            var player =
                this.DataCenter.GetEntitiesWithTag("Player")[0];

            var playerShape   = player.GetData <ShapeData> ();
            var playerSpatial = player.GetData <SpatialData> ();

            var hit = false;

            foreach (var asteroid in asteroids)
            {
                if (hit)
                {
                    break;
                }

                var asteroidSpatial = asteroid.GetData <SpatialData> ();
                var asteroidShape   = asteroid.GetData <ShapeData> ();

                foreach (var point in asteroidShape.Points)
                {
                    var actualPoint =
                        (point * asteroidShape.Size)
                        + new Vector2(asteroidSpatial.X, asteroidSpatial.Y);

                    if (playerShape.Contains(playerSpatial, actualPoint))
                    {
                        var asteroidMass = asteroid.GetData <MassData> ().Mass;
                        var e            = new PlayerHitEvent(asteroidMass);

                        this.eventManager.PublishEvent(this, e);
                        hit = true;
                        break;
                    }
                }
            }
        }
Exemple #8
0
 void Handle(PlayerHitEvent e)
 {
     constraint.ForEachGameObject((egoComponent, transform, player) => {
         transform.position = player.initialPosition;
     });
 }
 /// <summary>
 /// Event handler for player hit event.
 /// </summary>
 /// <param name="sender">Event sender.</param>
 /// <param name="e">Event args.</param>
 void OnPlayerHit(object sender, PlayerHitEvent e)
 {
     Console.Write("Player hit by: " + e);
     this.Restart();
 }