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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }