public void Serialize <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s) where TDoc : class where TCursor : class { var xs = s.GetSerializerInterface(); var td = KSoft.Debug.TypeCheck.CastReference <BTacticData>(s.UserData); s.StreamElementEnumOpt("Relation", ref mRelation, e => e != BRelationType.Enemy); if (!s.StreamElementEnumOpt("SquadMode", ref mSquadMode, e => e != BSquadMode.Invalid)) { if (s.StreamElementEnumOpt("AutoTargetSquadMode", ref mSquadMode, e => e != BSquadMode.Invalid)) { AutoTargetSquadMode = true; } } s.StreamElements("DamageType", DamageTypes, xs, XML.BDatabaseXmlSerializerBase.StreamDamageType); s.StreamElements("TargetType", TargetTypes, xs, XML.BDatabaseXmlSerializerBase.StreamUnitID); td.StreamID(s, "Action", ref mActionID, TacticDataObjectKind.Action); XML.XmlUtil.Serialize(s, Flags, XML.BBitSetXmlParams.kFlagsAreElementNamesThatMeanTrue); XML.XmlUtil.Serialize(s, TargetStates, kTargetStatesXmlParams); if (!xs.StreamDBID(s, "Ability", ref mAbilityID, DatabaseObjectKind.Ability)) { IsOptionalAbility = xs.StreamDBID(s, "OptionalAbility", ref mAbilityID, DatabaseObjectKind.Ability); } }
public override void Serialize <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s) { var xs = s.GetSerializerInterface(); using (s.EnterCursorBookmark("Attributes")) { base.Serialize(s); using (var bm = s.EnterCursorBookmarkOpt("Cost", Cost, x => x.HasNonZeroItems)) if (bm.IsNotNull) { XML.XmlUtil.SerializeCostHack(s, Cost); } XML.XmlUtil.Serialize(s, DynamicCosts, BPowerDynamicCost.kBListXmlParams); XML.XmlUtil.Serialize(s, TargetEffectiveness, BPowerTargetEffectiveness.kBListXmlParams); XML.XmlUtil.Serialize(s, Populations, BPopulation.kBListXmlParamsSingle_LowerCase); s.StreamElementOpt("UIRadius", ref mUIRadius, Predicates.IsNotZero); s.StreamElementEnumOpt("PowerType", ref mPowerType, e => e != BPowerType.Invalid); s.StreamElementOpt("AutoRecharge", ref mAutoRecharge, Predicates.IsNotZero); s.StreamElementOpt("UseLimit", ref mUseLimit, Predicates.IsNotZero); XML.XmlUtil.Serialize(s, Flags, XML.BBitSetXmlParams.kFlagsAreElementNamesThatMeanTrue); XML.XmlUtil.Serialize(s, Flags2, XML.BBitSetXmlParams.kFlagsAreElementNamesThatMeanTrue); s.StreamElementOpt("Icon", ref mIconTextureName, Predicates.IsNotNullOrEmpty); s.StreamElements("IconLocation", IconLocations, xs, StreamIconLocation); s.StreamElements("TechPrereq", TechPrereqs, xs, XML.BDatabaseXmlSerializerBase.StreamTechID); s.StreamElementEnumOpt("Action", ref mActionType, BProtoAction.kNotInvalidActionType); s.StreamElementEnumOpt("Minigame", ref mMinigameType, e => e != BMinigameType.None); s.StreamElementOpt("CameraZoomMin", ref mCameraZoomMin, Predicates.IsNotZero); s.StreamElementOpt("CameraZoomMax", ref mCameraZoomMax, Predicates.IsNotZero); s.StreamElementOpt("CameraPitchMin", ref mCameraPitchMin, Predicates.IsNotZero); s.StreamElementOpt("CameraPitchMax", ref mCameraPitchMax, Predicates.IsNotZero); s.StreamElementOpt("CameraEffectIn", ref mCameraEffectIn, Predicates.IsNotNullOrEmpty); s.StreamElementOpt("CameraEffectOut", ref mCameraEffectOut, Predicates.IsNotNullOrEmpty); s.StreamElementOpt("MinDistanceToSquad", ref mMinDistanceToSquad, PhxPredicates.IsNotInvalid); s.StreamElementOpt("MaxDistanceToSquad", ref mMaxDistanceToSquad, PhxPredicates.IsNotInvalid); using (var bm = s.EnterCursorBookmarkOpt("ShowTargetHighlight", this, x => x.HasShowTargetHighlightData)) if (bm.IsNotNull) { xs.StreamDBID(s, "ObjectType", ref mShowTargetHighlightObjectType, DatabaseObjectKind.ObjectType, xmlSource: XML.XmlUtil.kSourceAttr); s.StreamAttributeEnumOpt("Relation", ref mShowTargetHighlightRelation, e => e != BRelationType.Any); } using (var bm = s.EnterCursorBookmarkOpt("ChildObjects", ChildObjectIDs, Predicates.HasItems)) if (bm.IsNotNull) { s.StreamElements("Object", ChildObjectIDs, xs, XML.BDatabaseXmlSerializerBase.StreamObjectID); } using (var bm = s.EnterCursorBookmarkOpt("BaseDataLevel", this, x => x.BaseDataLevel != null)) if (bm.IsNotNull) { if (s.IsReading) { mBaseDataLevel = new BProtoPowerDataLevel(); } BaseDataLevel.Serialize(s); } XML.XmlUtil.Serialize(s, LevelData, BProtoPowerDataLevel.kBListExplicitIndexXmlParams); } s.StreamElementOpt("TriggerScript", ref mTriggerScript, Predicates.IsNotNullOrEmpty); s.StreamElementOpt("CommandTriggerScript", ref mCommandTriggerScript, Predicates.IsNotNullOrEmpty); }
public override void Serialize <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s) { base.Serialize(s); var xs = s.GetSerializerInterface(); s.StreamElementEnumOpt("Type", ref mType, e => e != BAbilityType.Invalid); s.StreamElementOpt("AmmoCost", ref mAmmoCost, Predicates.IsNotZero); s.StreamElements("Object", ObjectIDs, xs, XML.BDatabaseXmlSerializerBase.StreamObjectID); s.StreamElementEnumOpt("SquadMode", ref mSquadMode, e => e != BSquadMode.Invalid); s.StreamElementEnumOpt("RecoverStart", ref mRecoverStart, e => e != BRecoverType.Move); s.StreamElementEnumOpt("RecoverType", ref mRecoverType, e => e != BRecoverType.Move); s.StreamElementOpt("RecoverTime", ref mRecoverTime, Predicates.IsNotZero); s.StreamElementOpt("MovementSpeedModifier", ref mMovementSpeedModifier, Predicates.IsNotZero); s.StreamElementEnumOpt("MovementModifierType", ref mMovementModifierType, e => e != BMovementModifierType.Mode); s.StreamElementOpt("DamageTakenModifier", ref mDamageTakenModifier, Predicates.IsNotZero); s.StreamElementOpt("DodgeModifier", ref mDodgeModifier, Predicates.IsNotZero); s.StreamStringOpt("Icon", ref mIcon, toLower: false, type: XML.XmlUtil.kSourceElement); s.StreamElementEnumOpt("TargetType", ref mTargetType, e => e != BAbilityTargetType.None); s.StreamStringOpt("RecoverAnimAttachment", ref mRecoverAnimAttachment, toLower: false, type: XML.XmlUtil.kSourceElement); s.StreamStringOpt("RecoverStartAnim", ref mRecoverStartAnim, toLower: false, type: XML.XmlUtil.kSourceElement); s.StreamStringOpt("RecoverEndAnim", ref mRecoverEndAnim, toLower: false, type: XML.XmlUtil.kSourceElement); s.StreamElementOpt("Sprinting", ref mSprinting, Predicates.IsTrue); s.StreamElementOpt("DontInterruptAttack", ref mDontInterruptAttack, Predicates.IsTrue); s.StreamElementOpt("KeepSquadMode", ref mKeepSquadMode, Predicates.IsTrue); s.StreamElementOpt("AttackSquadMode", ref mAttackSquadMode, Predicates.IsTrue); s.StreamElementOpt("Duration", ref mDuration, Predicates.IsNotZero); s.StreamElementOpt("SmartTargetRange", ref mSmartTargetRange, v => v != cDefaultSmartTargetRange); s.StreamElementOpt("CanHeteroCommand", ref mCanHeteroCommand, Predicates.IsFalse); s.StreamElementOpt("NoAbilityReticle", ref mNoAbilityReticle, Predicates.IsTrue); }
public override void Serialize <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s) { var xs = s.GetSerializerInterface(); var td = KSoft.Debug.TypeCheck.CastReference <BTacticData>(s.UserData); s.StreamElementEnumOpt("ActionType", ref mActionType, kNotInvalidActionType); s.StreamElementOpt("ProjectileSpread", ref mProjectileSpread, PhxPredicates.IsNotInvalid); xs.StreamDBID(s, "SquadType", ref mSquadTypeID, DatabaseObjectKind.Squad); td.StreamID(s, "Weapon", ref mWeaponID, TacticDataObjectKind.Weapon); td.StreamID(s, "LinkedAction", ref mLinkedActionID, TacticDataObjectKind.Action); s.StreamElementEnumOpt("SquadMode", ref mSquadMode, kNotInvalidSquadMode); s.StreamElementEnumOpt("NewSquadMode", ref mNewSquadMode, kNotInvalidSquadMode); #if false td.StreamID(s, "NewTacticState", ref mNewTacticStateID, BTacticData.ObjectKind.TacticState); #endif #region Work s.StreamElementOpt("WorkRate", ref mWorkRate, PhxPredicates.IsNotInvalid); s.StreamElementOpt("WorkRateVariance", ref mWorkRateVariance, PhxPredicates.IsNotInvalid); s.StreamElementOpt("WorkRange", ref mWorkRange, PhxPredicates.IsNotInvalid); #endregion #region DamageModifiers using (var bm = s.EnterCursorBookmarkOpt("DamageModifiers", this, o => mDamageModifiersDmg != PhxUtil.kInvalidSingle)) if (bm.IsNotNull) { s.StreamAttribute("damage", ref mDamageModifiersDmg); s.StreamAttributeOpt("damageTaken", ref mDamageModifiersDmgTaken, PhxPredicates.IsNotInvalid); s.StreamAttributeOpt("byCombatValue", ref mDamageModifiersByCombatValue, Predicates.IsTrue); } #endregion xs.StreamTypeName(s, "Resource", ref mResourceID, GameDataObjectKind.Cost); // if element equals 'true' this is the default action s.StreamElementOpt("Default", ref mDefault, Predicates.IsTrue); td.StreamID(s, "SlaveAttackAction", ref mSlaveAttackActionID, TacticDataObjectKind.Action); td.StreamID(s, "BaseDPSWeapon", ref mBaseDPSWeaponID, TacticDataObjectKind.Weapon); s.StreamElementEnumOpt("PersistentActionType", ref mPersistentActionType, kNotInvalidActionType); #region Duration using (var bm = s.EnterCursorBookmarkOpt("Duration", this, o => mDuration != PhxUtil.kInvalidSingle)) if (bm.IsNotNull) { s.StreamCursor(ref mDuration); s.StreamAttributeOpt("DurationSpread", ref mDurationSpread, PhxPredicates.IsNotInvalid); } #endregion #region AutoRepair using (var bm = s.EnterCursorBookmarkOpt("AutoRepair", this, o => mAutoRepairIdleTime != PhxUtil.kInvalidSingle)) if (bm.IsNotNull) { s.StreamAttribute("AutoRepairIdleTime", ref mAutoRepairIdleTime); s.StreamAttribute("AutoRepairThreshold", ref mAutoRepairThreshold); s.StreamAttribute("AutoRepairSearchDistance", ref mAutoRepairSearchDistance); } #endregion xs.StreamDBID(s, "InvalidTarget", ref mInvalidTargetObjectID, DatabaseObjectKind.Object); #region ProtoObject using (var bm = s.EnterCursorBookmarkOpt("ProtoObject", this, o => mProtoObjectID.IsNotNone())) if (bm.IsNotNull) { // TODO: This IS optional, right? Only on 'true'? // inner text: if 0, proto object, if not, proto squad s.StreamAttributeOpt("Squad", ref mProtoObjectIsSquad, Predicates.IsTrue); xs.StreamDBID(s, null, ref mSquadTypeID, mProtoObjectIsSquad ? DatabaseObjectKind.Squad : DatabaseObjectKind.Object, false, XML.XmlUtil.kSourceCursor); } #endregion #if false xs.StreamXmlForStringID(s, "Count", ref mCountStringID); #endif s.StreamElementOpt("MaxNumUnitsPerformAction", ref mMaxNumUnitsPerformAction, Predicates.IsNotNone); s.StreamElementOpt("DamageCharge", ref mDamageCharge, PhxPredicates.IsNotInvalid); }