public SSpaceMissileClusterData(
            Vector3 launcherPos, Vector3 launcherVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileParameters mParams)
        {
            _target = target;
            _timeToHit = timeToHit;
            _parameters = mParams;
            _missiles = new SSpaceMissileData[numMissiles];

            if (_parameters.spawnGenerator != null) {
                _parameters.spawnGenerator.Generate(numMissiles,
                    (i, scale, pos, orient) => {
                        Matrix4 spawnTxfm = _parameters.spawnTxfm(_target,
                            launcherPos, launcherVel, i, numMissiles);
                        Vector3 missilePos = pos * _parameters.spawnGeneratorScale;
                        missilePos = Vector3.Transform(missilePos, spawnTxfm);
                        _missiles [i] = new SSpaceMissileData (
                            this, i, launcherPos, launcherVel, missilePos, timeToHit);
                        return true; // accept new missile from the generator
                    }
                );
            } else {
                for (int i = 0; i < numMissiles; ++i) {
                    Matrix4 spawnTxfm = _parameters.spawnTxfm(_target,
                        launcherPos, launcherVel, i, numMissiles);
                    var missilePos = Vector3.Transform(Vector3.Zero, spawnTxfm);
                    _missiles [i] = new SSpaceMissileData (
                        this, i, launcherPos, launcherVel, missilePos, timeToHit);
                }
            }
        }
        public SSpaceMissileClusterData launchCluster(
            Vector3 launchPos, Vector3 launchVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileParameters clusterParams)
        {
            var cluster = new SSpaceMissileClusterData(
                launchPos, launchVel, numMissiles, target, timeToHit, clusterParams);

            _clusters.Add(cluster);
            _targets.Add(target);
            return(cluster);
        }
 /// <summary>
 /// can be used with derived classes to obtain a copy of simpler parameters
 /// of this class
 /// </summary>
 public SSpaceMissileParameters(SSpaceMissileParameters other)
 {
     this.simulationStep = other.simulationStep;
     this.terminateWhenAtTarget = other.terminateWhenAtTarget;
     this.debuggingAid = other.debuggingAid;
     this.atTargetDistance = other.atTargetDistance;
     this.ejectionAcc = other.ejectionAcc;
     this.ejectionVelocity = other.ejectionVelocity;
     this.pursuitActivationTime = other.pursuitActivationTime;
     this.pursuitAugmentedPN = other.pursuitAugmentedPN;
     this.pursuitHitTimeCorrection = other.pursuitHitTimeCorrection;
     this.pursuitMaxAcc = other.pursuitMaxAcc;
     this.pursuitMaxVelocity = other.pursuitMaxVelocity;
     this.pursuitNavigationGain = other.pursuitNavigationGain;
 }
Esempio n. 4
0
        public SSpaceMissileClusterData launchCluster(
            Vector3 launchPos, Vector3 launchVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileParameters clusterParams)
        {
            _initParamsSpecific(clusterParams);
            var cluster = _simulation.launchCluster(launchPos, launchVel, numMissiles,
                                                    target, timeToHit, clusterParams);

            foreach (var missile in cluster.missiles)
            {
                _addMissileRender(missile);
            }
            return(cluster);
        }
 /// <summary>
 /// can be used with derived classes to obtain a copy of simpler parameters
 /// of this class
 /// </summary>
 public SSpaceMissileParameters(SSpaceMissileParameters other)
 {
     this.simulationStep           = other.simulationStep;
     this.terminateWhenAtTarget    = other.terminateWhenAtTarget;
     this.debuggingAid             = other.debuggingAid;
     this.atTargetDistance         = other.atTargetDistance;
     this.ejectionAcc              = other.ejectionAcc;
     this.ejectionVelocity         = other.ejectionVelocity;
     this.pursuitActivationTime    = other.pursuitActivationTime;
     this.pursuitAugmentedPN       = other.pursuitAugmentedPN;
     this.pursuitHitTimeCorrection = other.pursuitHitTimeCorrection;
     this.pursuitMaxAcc            = other.pursuitMaxAcc;
     this.pursuitMaxVelocity       = other.pursuitMaxVelocity;
     this.pursuitNavigationGain    = other.pursuitNavigationGain;
 }
Esempio n. 6
0
        public SSpaceMissileVisualData(
            Vector3 missileWorldPos, Vector3 missileWorldVel,
            SSpaceMissileParameters parameters = null, ISSpaceMissileTarget target      = null, AtTargetFunc atf = null,
            float ejectionYawVelocity          = float.NaN, float ejectionPitchVelocity = float.NaN)
            : base(missileWorldPos, missileWorldVel, parameters, target)
        {
            var ejectionAsVisual = _driver as SMissileEjectionVisualDriver;

            if (!float.IsNaN(ejectionYawVelocity))
            {
                ejectionAsVisual.yawVelocity = ejectionYawVelocity;
            }
            if (!float.IsNaN(ejectionPitchVelocity))
            {
                ejectionAsVisual.pitchVelocity = ejectionPitchVelocity;
            }
        }
Esempio n. 7
0
        public SSpaceMissileData(
            Vector3 missileWorldPos, Vector3 missileWorldVel,
            SSpaceMissileParameters parameters = null, ISSpaceMissileTarget target = null,
            float timeToHitTarget = 0f, ISharableData sharableData = null, AtTargetFunc atf = null)
        {
            _sharableData = sharableData ?? new SingleInstanceData()
            {
                target          = target,
                parameters      = parameters,
                timeSinceLaunch = 0f,
                timeToHit       = timeToHitTarget,
                atTargetFunc    = atf,
            };

            this.position = missileWorldPos;
            this.velocity = missileWorldVel;
        }
        public SSpaceMissileClusterData(
            Vector3 launcherPos, Vector3 launcherVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileParameters mParams)
        {
            _target     = target;
            _timeToHit  = timeToHit;
            _parameters = mParams;
            _missiles   = new SSpaceMissileData[numMissiles];

            if (_parameters.spawnGenerator != null)
            {
                _parameters.spawnGenerator.Generate(numMissiles,
                                                    (i, scale, pos, orient) => {
                    Matrix4 spawnTxfm = _parameters.spawnTxfm(_target,
                                                              launcherPos, launcherVel, i, numMissiles);
                    Vector3 missilePos = pos * _parameters.spawnGeneratorScale;
                    missilePos         = Vector3.Transform(missilePos, spawnTxfm);
                    _missiles [i]      = new SSpaceMissileData(
                        this, i, launcherPos, launcherVel, missilePos, timeToHit);
                    return(true);    // accept new missile from the generator
                }
                                                    );
            }
            else
            {
                for (int i = 0; i < numMissiles; ++i)
                {
                    Matrix4 spawnTxfm = _parameters.spawnTxfm(_target,
                                                              launcherPos, launcherVel, i, numMissiles);
                    var missilePos = Vector3.Transform(Vector3.Zero, spawnTxfm);
                    _missiles [i] = new SSpaceMissileData(
                        this, i, launcherPos, launcherVel, missilePos, timeToHit);
                }
            }
        }
Esempio n. 9
0
        protected void _initParamsSpecific(SSpaceMissileParameters mParams)
        {
            // smoke effectors
            if (_particleRenderer.textureMaterial == null)
            {
                _particleRenderer.textureMaterial = new SSTextureMaterial(mParams.smokeParticlesTexture);
            }
            if (_flameSmokeColorEffector == null)
            {
                _flameSmokeColorEffector = new SSColorKeyframesEffector();
                _flameSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _flameSmokeColorEffector.effectorMask      = (ushort)ParticleEffectorMasks.FlameToSmoke;
                _flameSmokeColorEffector.particleLifetime  = mParams.flameSmokeDuration;
                //_smokeColorEffector.colorMask = ;
                _flameSmokeColorEffector.keyframes.Clear();
                var flameColor = mParams.innerFlameColor;
                flameColor.A = 0.9f;
                _flameSmokeColorEffector.keyframes.Add(0f, flameColor);
                flameColor   = mParams.outerFlameColor;
                flameColor.A = 0.7f;
                _flameSmokeColorEffector.keyframes.Add(0.1f, flameColor);
                var smokeColor = mParams.smokeColor;
                smokeColor.A = 0.2f;
                _flameSmokeColorEffector.keyframes.Add(0.2f, smokeColor);
                smokeColor.A = 0f;
                _flameSmokeColorEffector.keyframes.Add(1f, smokeColor);

                _particlesData.addEffector(_flameSmokeColorEffector);
            }
            if (_ejectionSmokeColorEffector == null)
            {
                _ejectionSmokeColorEffector = new SSColorKeyframesEffector();
                _ejectionSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _ejectionSmokeColorEffector.effectorMask      = (ushort)ParticleEffectorMasks.EjectionSmoke;
                _ejectionSmokeColorEffector.particleLifetime  = mParams.flameSmokeDuration;
                _ejectionSmokeColorEffector.keyframes.Clear();
                var smokeColor = mParams.smokeColor;
                smokeColor.A = 0.3f;
                _ejectionSmokeColorEffector.keyframes.Add(0f, smokeColor);
                smokeColor.A = 0.14f;
                _ejectionSmokeColorEffector.keyframes.Add(0.2f, smokeColor);
                smokeColor.A = 0f;
                _ejectionSmokeColorEffector.keyframes.Add(1f, smokeColor);

                _particlesData.addEffector(_ejectionSmokeColorEffector);
            }
            if (_flameSmokeScaleEffector == null)
            {
                _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector();
                _flameSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _flameSmokeScaleEffector.effectorMask      = (ushort)ParticleEffectorMasks.FlameToSmoke;
                _flameSmokeScaleEffector.particleLifetime  = mParams.flameSmokeDuration;
                _flameSmokeScaleEffector.keyframes.Clear();
                _flameSmokeScaleEffector.keyframes.Add(0f, 0.3f);
                _flameSmokeScaleEffector.keyframes.Add(0.1f, 1f);
                _flameSmokeScaleEffector.keyframes.Add(1f, 2f);

                _particlesData.addEffector(_flameSmokeScaleEffector);
            }
            if (_ejectionSmokeScaleEffector == null)
            {
                _ejectionSmokeScaleEffector = new SSMasterScaleKeyframesEffector();
                _ejectionSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _ejectionSmokeScaleEffector.effectorMask      = (ushort)ParticleEffectorMasks.EjectionSmoke;
                _ejectionSmokeScaleEffector.particleLifetime  = mParams.ejectionSmokeDuration;
                _ejectionSmokeScaleEffector.keyframes.Clear();
                _ejectionSmokeScaleEffector.keyframes.Add(0f, 0.1f);
                _ejectionSmokeScaleEffector.keyframes.Add(0.35f, 0.8f);
                _ejectionSmokeScaleEffector.keyframes.Add(1f, 1.35f);

                _particlesData.addEffector(_ejectionSmokeScaleEffector);
            }
        }
 public SSpaceMissileClusterData launchCluster(
     Vector3 launchPos, Vector3 launchVel, int numMissiles,
     ISSpaceMissileTarget target, float timeToHit,
     SSpaceMissileParameters clusterParams)
 {
     _initParamsSpecific(clusterParams);
     var cluster = _simulation.launchCluster(launchPos, launchVel, numMissiles,
                                             target, timeToHit, clusterParams);
     foreach (var missile in cluster.missiles) {
         _addMissileRender(missile);
     }
     return cluster;
 }
        protected void _initParamsSpecific(SSpaceMissileParameters mParams)
        {
            // smoke effectors
            if (_particleRenderer.textureMaterial == null) {
                _particleRenderer.textureMaterial = new SSTextureMaterial (mParams.smokeParticlesTexture);
            }
            if (_flameSmokeColorEffector == null) {
                _flameSmokeColorEffector = new SSColorKeyframesEffector ();
                _flameSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _flameSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke;
                _flameSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration;
                //_smokeColorEffector.colorMask = ;
                _flameSmokeColorEffector.keyframes.Clear();
                var flameColor = mParams.innerFlameColor;
                flameColor.A = 0.9f;
                _flameSmokeColorEffector.keyframes.Add(0f, flameColor);
                flameColor = mParams.outerFlameColor;
                flameColor.A = 0.7f;
                _flameSmokeColorEffector.keyframes.Add(0.1f, flameColor);
                var smokeColor = mParams.smokeColor;
                smokeColor.A = 0.2f;
                _flameSmokeColorEffector.keyframes.Add(0.2f, smokeColor);
                smokeColor.A = 0f;
                _flameSmokeColorEffector.keyframes.Add(1f, smokeColor);

                _particlesData.addEffector(_flameSmokeColorEffector);
            }
            if (_ejectionSmokeColorEffector == null) {
                _ejectionSmokeColorEffector = new SSColorKeyframesEffector ();
                _ejectionSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _ejectionSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke;
                _ejectionSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration;
                _ejectionSmokeColorEffector.keyframes.Clear();
                var smokeColor = mParams.smokeColor;
                smokeColor.A = 0.3f;
                _ejectionSmokeColorEffector.keyframes.Add(0f, smokeColor);
                smokeColor.A = 0.14f;
                _ejectionSmokeColorEffector.keyframes.Add(0.2f, smokeColor);
                smokeColor.A = 0f;
                _ejectionSmokeColorEffector.keyframes.Add(1f, smokeColor);

                _particlesData.addEffector(_ejectionSmokeColorEffector);
            }
            if (_flameSmokeScaleEffector == null) {
                _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector ();
                _flameSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _flameSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke;
                _flameSmokeScaleEffector.particleLifetime = mParams.flameSmokeDuration;
                _flameSmokeScaleEffector.keyframes.Clear();
                _flameSmokeScaleEffector.keyframes.Add(0f, 0.3f);
                _flameSmokeScaleEffector.keyframes.Add(0.1f, 1f);
                _flameSmokeScaleEffector.keyframes.Add(1f, 2f);

                _particlesData.addEffector(_flameSmokeScaleEffector);
            }
            if (_ejectionSmokeScaleEffector == null) {
                _ejectionSmokeScaleEffector = new SSMasterScaleKeyframesEffector ();
                _ejectionSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals;
                _ejectionSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke;
                _ejectionSmokeScaleEffector.particleLifetime = mParams.ejectionSmokeDuration;
                _ejectionSmokeScaleEffector.keyframes.Clear();
                _ejectionSmokeScaleEffector.keyframes.Add(0f, 0.1f);
                _ejectionSmokeScaleEffector.keyframes.Add(0.35f, 0.8f);
                _ejectionSmokeScaleEffector.keyframes.Add(1f, 1.35f);

                _particlesData.addEffector(_ejectionSmokeScaleEffector);
            }
        }
 public SSpaceMissileClusterData launchCluster(
     Vector3 launchPos, Vector3 launchVel, int numMissiles,
     ISSpaceMissileTarget target, float timeToHit,
     SSpaceMissileParameters clusterParams)
 {
     var cluster = new SSpaceMissileClusterData (
       launchPos, launchVel, numMissiles, target, timeToHit, clusterParams);
     _clusters.Add(cluster);
     _targets.Add(target);
     return cluster;
 }
Esempio n. 13
0
 protected void targetHitHandler(Vector3 position, SSpaceMissileParameters mParams)
 {
     explosionManager.showExplosion(position, 2.5f);
 }
Esempio n. 14
0
        protected override void setupScene()
        {
            base.setupScene();

            var droneMesh = SSAssetManager.GetInstance<SSMesh_wfOBJ> ("./drone2/", "Drone2.obj");
            //var droneMesh = SSAssetManager.GetInstance<SSMesh_wfOBJ> ("missiles", "missile.obj");
            var vandalMesh = SSAssetManager.GetInstance<SSMesh_wfOBJ> ("missiles", "vandal_assembled.obj");

            // add drones
            attackerDrone = new SSObjectMesh (droneMesh);
            attackerDrone.Pos = new OpenTK.Vector3(-20f, 0f, 0f);
            attackerDrone.Orient(Vector3.UnitX, Vector3.UnitY);
            attackerDrone.AmbientMatColor = new Color4(0.1f,0.1f,0.1f,0.1f);
            attackerDrone.DiffuseMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            attackerDrone.SpecularMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            attackerDrone.EmissionMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            attackerDrone.Name = "attacker drone";
            main3dScene.AddObject (attackerDrone);

            targetDrone = new SSObjectMesh (droneMesh);
            targetDrone.Pos = new OpenTK.Vector3(200f, 0f, 0f);
            targetDrone.Orient(-Vector3.UnitX, Vector3.UnitY);
            targetDrone.AmbientMatColor = new Color4(0.1f,0.1f,0.1f,0.1f);
            targetDrone.DiffuseMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            targetDrone.SpecularMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            targetDrone.EmissionMatColor = new Color4(0.3f,0.3f,0.3f,0.3f);
            targetDrone.Name = "target drone";
            targetDrone.MainColor = new Color4(1f, 0f, 0.7f, 1f);
            main3dScene.AddObject (targetDrone);

            vandalShip = new SSObjectMesh (vandalMesh);
            vandalShip.Pos = new OpenTK.Vector3(100f, 0f, 0f);
            vandalShip.Scale = new Vector3 (0.05f);
            vandalShip.AmbientMatColor = new Color4(0.1f,0.1f,0.1f,0.1f);
            vandalShip.DiffuseMatColor = new Color4(0.1f,0.1f,0.1f,0.1f);
            vandalShip.SpecularMatColor = new Color4(0.1f,0.1f,0.1f,0.1f);
            vandalShip.EmissionMatColor = new Color4(0.0f,0.0f,0.0f,0.0f);
            vandalShip.Name = "Vandal ship";
            vandalShip.MainColor = new Color4 (0.6f, 0.6f, 0.6f, 1f);
            //vandalShip.MainColor = new Color4(1f, 0f, 0.7f, 1f);
            //droneObj2.renderState.visible = false;
            vandalShip.Orient((targetDrone.Pos-vandalShip.Pos).Normalized(), Vector3.UnitY);
            main3dScene.AddObject (vandalShip);

            // shows explosions
            explosionManager = new SExplosionRenderManager ();
            explosionManager.particleSystem.doShockwave = false;
            explosionManager.particleSystem.doDebris = false;
            explosionManager.particleSystem.timeScale = 3f;
            //explosionManager.renderState.visible = false;
            alpha3dScene.AddObject(explosionManager);

            // attacker drone missile parameters
            attackerDroneMissileParams = new SSpaceMissileParameters();
            attackerDroneMissileParams.targetHitHandlers += targetHitHandler;

            // vandal missile params
            vandalShipMissileParams = new SSpaceMissileParameters();
            vandalShipMissileParams.spawnGenerator = null;
            vandalShipMissileParams.spawnTxfm = straightMissileSpawnTxfm;
            vandalShipMissileParams.ejectionMaxRotationVel = 0.05f;
            vandalShipMissileParams.ejectionVelocity = 15f;

            vandalShipMissileParams.targetHitHandlers += targetHitHandler;
            vandalShipMissileParams.pursuitActivationTime = 0.1f;
            vandalShipMissileParams.ejectionSmokeDuration = 0.5f;
            vandalShipMissileParams.ejectionSmokeSizeMax = 5f;

            cameraMissileParams = new SSpaceMissileParameters();
            cameraMissileParams.targetHitHandlers += targetHitHandler;
            cameraMissileParams.spawnGenerator = null;
            cameraMissileParams.spawnTxfm = straightMissileSpawnTxfm;
            cameraMissileParams.ejectionMaxRotationVel = 0.05f;
            cameraMissileParams.ejectionVelocity = 10f;

            // missile manager
            missileManager = new SSpaceMissilesRenderManager(main3dScene, alpha3dScene, hud2dScene);

            // additional statistics text
            missileStatsText = new SSObjectGDISurface_Text();
            missileStatsText.alphaBlendingEnabled = true;
            missileStatsText.Label = "stats placeholder...";
            missileStatsText.Pos = new Vector3 (100f, 100f, 0f);
            //missileStatsText.Size = 20f;
            hud2dScene.AddObject(missileStatsText);

            var targetsManager = new SHudTargetsManager (main3dScene, hud2dScene);
            targetHud = targetsManager.addTarget(
                Color4.Red,
                _showDistanceFunc,
                (o) => o != null ? o.Name : "none",
                getTargetObject()
            );
        }