public static void WriteAbilityCastData(this NetworkWriter writer, AbilityCastData castData) { AbilityCastIdentifier identifier = new AbilityCastIdentifier( castData.Caster, castData.CastTime, castData.AbilityCast.AbilityID, castData.MultiCastID); //Identifier writer.WriteAbilityCastIdentifier(identifier); //Resources Impacts writer.WriteInt32(castData.BaseResourcesImpacts.Length); for (int i = 0; i < castData.BaseResourcesImpacts.Length; i++) { writer.WriteAbilityResourceImpactData(castData.BaseResourcesImpacts[i]); } //Vec3 writer.WriteVector3(castData.BaseKnockback); writer.WriteVector3(castData.BaseRecoil); writer.WriteVector3(castData.CastDirection); writer.WriteVector3(castData.Origin); if (_storedAbilityCastData.ContainsKey(identifier)) { _storedAbilityCastData[identifier] = castData; } else { _storedAbilityCastData.Add(identifier, castData); } }
public static void WriteAbilityCastIdentifier(this NetworkWriter writer, AbilityCastIdentifier identifier) { //In case of the caster's death if (identifier.Caster == null) { writer.WriteGameObject(null); } else { writer.WriteGameObject(identifier.Caster.gameObject); } writer.WriteDouble(identifier.CastTime); writer.WriteInt32(identifier.AbilityID); writer.WriteInt32(identifier.MultiCastID); }
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); }
public static AbilityCastData ReadAbilityCastData(this NetworkReader reader) { AbilityCastIdentifier identifier = ReadAbilityCastIdentifier(reader); if (_storedAbilityCastData.ContainsKey(identifier)) { ReadAbilityCastDataBody(reader, _storedAbilityCastData[identifier]); return(_storedAbilityCastData[identifier]); } else { AbilityCastData castData = new AbilityCastData( identifier.Caster, (AbilityData)PinouApp.Resources.Data.Databases.GetItem(DatabaseType.Ability, identifier.AbilityID), identifier.CastTime, identifier.MultiCastID); ReadAbilityCastDataBody(reader, castData); _storedAbilityCastData.Add(identifier, castData); return(castData); } }