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);
        }
        public static AbilityResourceImpactData ReadAbilityResourceImpactData(this NetworkReader reader)
        {
            AbilityResourceImpactData impactData = new AbilityResourceImpactData(
                (EntityBeingResourceType)reader.ReadInt32(),
                (float)reader.ReadDouble());

            return(impactData);
        }
예제 #3
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();
            }
        }
        private static void ReadAbilityCastDataBody(NetworkReader reader, AbilityCastData castDataToFill)
        {
            //Resources Impacts
            int baseResourcesImpactLength = reader.ReadInt32();

            AbilityResourceImpactData[] impactsData = new AbilityResourceImpactData[baseResourcesImpactLength];
            for (int i = 0; i < impactsData.Length; i++)
            {
                impactsData[i] = reader.ReadAbilityResourceImpactData();
            }

            castDataToFill.FillBase(
                impactsData,
                //Vec3
                reader.ReadVector3(),
                reader.ReadVector3());
            castDataToFill.FillCastDirection(reader.ReadVector3());
            castDataToFill.FillOrigin(reader.ReadVector3());
        }
        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);
        }
        private void ApplyInfluenceToImpact(AbilityResourceImpactData impact, EntityEquipableAbilityResourcesInfluences influence)
        {
            bool signPositive = impact.ResourceChange >= 0;

            if (influence.UseFactor)
            {
                if (influence.AbilitiesResourcesInfluences.InfluencesGlobal ||
                    signPositive && influence.AbilitiesResourcesInfluences.InfluencesPositive ||
                    signPositive == false && influence.AbilitiesResourcesInfluences.InfluencesNegative)
                {
                    impact.SetResourceChange(impact.ResourceChange * influence.Factor);
                }
            }
            if (influence.UseFlat)
            {
                if (influence.AbilitiesResourcesInfluences.InfluencesGlobal ||
                    signPositive && influence.AbilitiesResourcesInfluences.InfluencesPositive ||
                    signPositive == false && influence.AbilitiesResourcesInfluences.InfluencesNegative)
                {
                    impact.SetResourceChange(impact.ResourceChange + influence.Flat);
                }
            }
        }
 public static void WriteAbilityResourceImpactData(this NetworkWriter writer, AbilityResourceImpactData impactData)
 {
     writer.WriteInt32((int)impactData.ResourceType);
     writer.WriteDouble(impactData.ResourceChange);
 }