Example #1
0
        private void SyncAbilityHit(SyncableVariable var, NetworkReader reader)
        {
            if (References.NetworkIdentity.isServer)
            {
                _nextSyncResults = new List <AbilityCastResult>();
            }
            int resultsCount = reader.ReadInt32();

            for (int i = 0; i < resultsCount; i++)
            {
                AbilityCastResult result = reader.ReadAbilityCastResult();

                if (References.NetworkIdentity.isServer)
                {
                    OnReceiveAbilityHit.Invoke(this, result);
                    result.CastData.FillResult(result);
                    _nextSyncResults.Add(result);
                    PinouNetworkManager.MainBehaviour.SetDirty(gameObject, SyncableVariable.EntityAbilityHit);
                }
                else if (References.NetworkIdentity.hasAuthority)
                {
                    OnReceiveAbilityHit.Invoke(this, result);
                    result.CastData.FillResult(result);
                }

                if (result.CastData.Caster == this)
                {
                    return;
                }

                OnAbilityHitResult.Invoke(this, result);
            }
        }
        private void MakeText(GameObject model, AbilityCastResult result, AbilityResourceImpactData impactData)
        {
            GameObject    textGo = PinouApp.Pooler.Retrieve(model, transform);
            UI_DamageText dmgTxt = textGo.GetComponent <UI_DamageText>();

            dmgTxt.Build(result, impactData);
            _damageTexts.Add(dmgTxt);
        }
Example #3
0
        public override void ReceiveAbilityHit(AbilityCastResult result)
        {
            OnReceiveAbilityHit.Invoke(this, result);
            result.CastData.FillResult(result);

            OnAbilityHitResult.Invoke(this, result);

            _nextSyncResults.Add(result);

            PinouNetworkManager.MainBehaviour.SetDirty(gameObject, SyncableVariable.EntityAbilityHit);
        }
Example #4
0
 protected override void OnDeath(Entity entity, AbilityCastResult killingResult)
 {
     if (team != EntityTeam.Players)
     {
         base.OnDeath(entity, killingResult);
     }
     else
     {
         //Prevent pooling to prevent authority issues in multiplayer
         gameObject.SetActive(false);
         gameObject.Destroy(1f);
     }
 }
        private void OnEntityAbilityHitResult(Entity ent, AbilityCastResult result)
        {
            EntityType receivingEntityType  = GetEntityType(ent);
            EntityType inflictingEntityType = GetEntityType(result.CastData.Caster);

            AbilityResourceImpactData[] resourcesChanges = result.ResourcesChanges;
            for (int i = 0; i < resourcesChanges.Length; i++)
            {
                bool positive = resourcesChanges[i].ResourceChange >= 0;
                if (ShouldMakeText(resourcesChanges[i].ResourceType, receivingEntityType, inflictingEntityType, positive))
                {
                    GameObject model = GetModel(resourcesChanges[i].ResourceType, receivingEntityType, inflictingEntityType, positive);
                    MakeText(model, result, resourcesChanges[i]);
                }
            }
        }
Example #6
0
        public void Build(AbilityCastResult result, AbilityResourceImpactData impactData)
        {
            _moveStartTime = Time.time;
            _worldPos      = result.Impact;

            RectTransform.anchoredPosition = Camera.main.WorldToScreenPoint(result.Impact) * (1920f / Screen.width);
            Vector2 impactScreenPoint = Camera.main.WorldToScreenPoint(result.Impact);
            Vector2 directionScreenPoint;

            if (result.KnockbackApplied.sqrMagnitude > 0f)
            {
                directionScreenPoint = Camera.main.WorldToScreenPoint(result.Impact + result.KnockbackApplied.normalized);
            }
            else
            {
                directionScreenPoint = Camera.main.WorldToScreenPoint(result.Impact + result.CastData.CastDirection);
            }

            Vector2 textDirection = (directionScreenPoint - impactScreenPoint);

            if (textDirection.sqrMagnitude > 0f)
            {
                textDirection.Normalize();
            }
            else
            {
                textDirection = Vector2.right;
            }

            float angle = (textDirection.y > 0 ? Mathf.Acos(textDirection.x) : -Mathf.Acos(textDirection.x)) * Mathf.Rad2Deg;

            RectTransform.rotation  = Quaternion.Euler(0, 0, angle);
            _textTransform.rotation = Quaternion.Euler(0, 0, 0);

            float dmgValue = Mathf.Abs(impactData.ResourceChange);

            if (dmgValue < 1f)
            {
                _text.text = dmgValue.ToString("0.0");
            }
            else
            {
                _text.text = Mathf.FloorToInt(dmgValue).ToString();
            }
        }
        public static void WriteAbilityCastResult(this NetworkWriter writer, AbilityCastResult result)
        {
            //CastData
            writer.WriteAbilityCastData(result.CastData);

            //Main
            writer.WriteInt32((int)result.ResultType);
            writer.WriteGameObject(result.Victim.gameObject);
            writer.WriteVector3(result.Impact);
            writer.WriteVector3(result.KnockbackApplied);

            //Resources Changes
            AbilityResourceImpactData[] resourceChanges = result.ResourcesChanges;
            writer.WriteInt32(resourceChanges.Length);
            for (int i = 0; i < resourceChanges.Length; i++)
            {
                writer.WriteAbilityResourceImpactData(resourceChanges[i]);
            }
        }
        public static AbilityCastResult ReadAbilityCastResult(this NetworkReader reader)
        {
            //CastData
            AbilityCastData       castData;
            AbilityCastIdentifier identifier = ReadAbilityCastIdentifier(reader);

            if (_storedAbilityCastData.ContainsKey(identifier))
            {
                castData = _storedAbilityCastData[identifier];
            }
            else
            {
                castData = new AbilityCastData(
                    identifier.Caster,
                    (AbilityData)PinouApp.Resources.Data.Databases.GetItem(DatabaseType.Ability, identifier.AbilityID),
                    identifier.CastTime,
                    identifier.MultiCastID);
                _storedAbilityCastData.Add(identifier, castData);
            }

            ReadAbilityCastDataBody(reader, castData);

            AbilityCastResult result = new AbilityCastResult(castData);

            //Main
            _ = reader.ReadInt32();//Discards ResultType
            result.FillVictim(reader.ReadGameObject().GetComponent <Entity>());
            result.FillImpact(reader.ReadVector3());
            result.FillKnockbackApplied(reader.ReadVector3());

            //Resources Changes
            int resourceChangesLength = reader.ReadInt32();

            AbilityResourceImpactData[] resourceChanges = new AbilityResourceImpactData[resourceChangesLength];
            for (int i = 0; i < resourceChangesLength; i++)
            {
                resourceChanges[i] = reader.ReadAbilityResourceImpactData();
            }
            result.SetResourceChanges(resourceChanges);

            return(result);
        }
Example #9
0
 public abstract void StartFX(AbilityCastResult result);