예제 #1
0
        private void HitHandler(BoltEntity targetEntity, int weaponAmount, WeaponType weaponType, Vector3 hit)
        {
            // If we are not the owner if the target entity, just return, we can do nothing
            if (targetEntity.IsOwner == false)
            {
                return;
            }

            // Ignore if we try to hit ourself
            if (targetEntity.Equals(entity))
            {
                return;
            }

            // Get Player State
            var moveAndShootPlayerState = targetEntity.GetState <IMoveAndShootPlayer>();
            var healthChange            = 0;

            switch (weaponType)
            {
            case WeaponType.HEAL:
                // Ignore if is the other Team
                if (moveAndShootPlayerState.Team != state.Team)
                {
                    return;
                }

                // Increase health
                healthChange = weaponAmount;
                break;

            case WeaponType.DAMAGE:
                // Ignore if is the same Team
                if (moveAndShootPlayerState.Team == state.Team)
                {
                    return;
                }

                // Decrease health
                healthChange = -weaponAmount;
                break;
            }

            // Get Current Health and Apply weapon change
            var targetHealth = moveAndShootPlayerState.Health + healthChange;

            // Clamp result value a put back on the state
            moveAndShootPlayerState.Health = Mathf.Clamp(targetHealth, 0, 100);

            // Send FX Event
            var hitInfoToken = ProtocolTokenUtils.GetToken <HitInfo>();

            hitInfoToken.hitPosition = hit;
            hitInfoToken.hitType     = healthChange > 0;

            MoveAndShootHitEvent.Post(GlobalTargets.Everyone, ReliabilityModes.ReliableOrdered, hitInfoToken);
        }
        public override void OnEvent(MoveAndShootHitEvent evnt)
        {
            var hitData = evnt.HitData as HitInfo;

            if (hitData != null)
            {
                if (hitData.hitType == true)
                {
                    Instantiate(HitHealEffectPrefab, hitData.hitPosition, Quaternion.identity);
                }
                else
                {
                    Instantiate(HitDamageEffectPrefab, hitData.hitPosition, Quaternion.identity);
                }
            }
        }