internal override void Load(StatePersister reader) { reader.PersistVersion(4); reader.BeginObject("Base"); base.Load(reader); reader.EndObject(); reader.PersistVector3(ref _unknownPosition); reader.PersistUInt32(ref _stateMaybe); reader.PersistFrame(ref _unknownFrame1); var unknownInt1 = int.MaxValue; reader.PersistInt32(ref unknownInt1); if (unknownInt1 != int.MaxValue) { throw new InvalidStateException(); } reader.PersistObjectID(ref _launcherObjectId); reader.PersistObjectID(ref _unknownObjectId); reader.PersistBoolean(ref _unknownBool1); reader.PersistFrame(ref _unknownFrame2); reader.PersistSingle(ref _unknownFloat1); var unknownFloat2 = 99999.0f; reader.PersistSingle(ref unknownFloat2); if (unknownFloat2 != 99999.0f) { throw new InvalidStateException(); } var weaponTemplateName = _weaponTemplate?.Name; reader.PersistAsciiString(ref weaponTemplateName); _weaponTemplate = reader.AssetStore.WeaponTemplates.GetByName(weaponTemplateName); var exhaustParticleSystemTemplateName = _exhaustParticleSystemTemplate?.Name; reader.PersistAsciiString(ref exhaustParticleSystemTemplateName); if (reader.Mode == StatePersistMode.Read) { _exhaustParticleSystemTemplate = reader.AssetStore.FXParticleSystemTemplates.GetByName(exhaustParticleSystemTemplateName); } reader.PersistBoolean(ref _unknownBool2); reader.PersistVector3(ref _currentPositionMaybe); reader.PersistInt32(ref _unknownInt2); // 0, 0x20000 reader.PersistInt32(ref _unknownInt3); // 1960 }
public WeaponStateContext( GameObject gameObject, Weapon weapon, WeaponTemplate weaponTemplate, int weaponIndex, AudioSystem audioSystem, AssetLoadContext assetLoadContext) { GameObject = gameObject; Weapon = weapon; WeaponTemplate = weaponTemplate; WeaponIndex = weaponIndex; AudioSystem = audioSystem; AssetLoadContext = assetLoadContext; }
internal override void Execute(WeaponEffectExecutionContext context) { var projectileTemplate = ProjectileTemplate.Value; WeaponTemplate warheadTemplate; if (IsConvertedFromLegacyData) { warheadTemplate = new WeaponTemplate(); warheadTemplate.ProjectileCollidesWith = ParentWeaponTemplate.ProjectileCollidesWith; warheadTemplate.Nuggets.AddRange(ParentWeaponTemplate.Nuggets.OfType <DamageNugget>()); } else { warheadTemplate = WarheadTemplate.Value; } var projectileObject = context.GameContext.GameObjects.Add( projectileTemplate, context.Weapon.ParentGameObject.Owner); var launchBoneTransform = context.Weapon.ParentGameObject.Drawable.GetWeaponLaunchBoneTransform( context.Weapon.Slot, context.Weapon.WeaponIndex); projectileObject.SetTransformMatrix(launchBoneTransform.Value); projectileObject.SetWarhead(warheadTemplate); projectileObject.CurrentWeapon.SetTarget(context.Weapon.CurrentTarget); projectileObject.Speed = ParentWeaponTemplate.WeaponSpeed; if (IsConvertedFromLegacyData) { var bezierProjectileBehavior = projectileObject.FindBehavior <BezierProjectileBehavior>(); if (bezierProjectileBehavior != null) { bezierProjectileBehavior.DetonationFX = ParentWeaponTemplate.ProjectileDetonationFX?.Value; } var missileAIUpdate = projectileObject.FindBehavior <MissileAIUpdate>(); if (missileAIUpdate != null) { missileAIUpdate.DetonationFX = ParentWeaponTemplate.ProjectileDetonationFX?.Value; } } }
internal Weapon( GameObject gameObject, WeaponTemplate weaponTemplate, int weaponIndex, WeaponSlot slot, AudioSystem audioSystem, AssetLoadContext assetLoadContext) { _gameObject = gameObject; _weaponTemplate = weaponTemplate; _weaponIndex = weaponIndex; Slot = slot; FillClip(); var nuggets = new List <WeaponEffectNugget>(); foreach (var nuggetData in weaponTemplate.Nuggets) { var nugget = nuggetData.CreateNugget(this); if (nugget != null) // TODO: This should never be null. { nuggets.Add(nugget); } } Nuggets = nuggets.ToArray(); _stateMachine = new WeaponStateMachine( new WeaponStateContext( gameObject, this, weaponTemplate, weaponIndex, audioSystem, assetLoadContext)); _usingFlag = ModelConditionFlagUtility.GetUsingWeaponFlag(weaponIndex); }
internal Weapon( GameObject gameObject, WeaponTemplate weaponTemplate, int weaponIndex, WeaponSlot slot, GameContext gameContext) { ParentGameObject = gameObject; Template = weaponTemplate; WeaponIndex = weaponIndex; Slot = slot; FillClip(); _stateMachine = new WeaponStateMachine( new WeaponStateContext( gameObject, this, gameContext)); _usingFlag = ModelConditionFlagUtility.GetUsingWeaponFlag(weaponIndex); }