コード例 #1
0
ファイル: MissileAIUpdate.cs プロジェクト: lanyizi/OpenSAGE
        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
        }
コード例 #2
0
 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;
 }
コード例 #3
0
        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;
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: Weapon.cs プロジェクト: wu162/OpenSAGE
        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);
        }