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; }
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); }
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; } }
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); } } }
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; }
protected void targetHitHandler(Vector3 position, SSpaceMissileParameters mParams) { explosionManager.showExplosion(position, 2.5f); }
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() ); }