Exemplo n.º 1
0
                public Matrix4 viewProjMat; // maintain this matrix to held 2d countdown renderer

                public MissileDebugRays(SSpaceMissileVisualData missile)
                {
                    _missile = missile;
                    renderState.castsShadow     = false;
                    renderState.receivesShadows = false;
                    renderState.frustumCulling  = false;
                }
Exemplo n.º 2
0
        public SSpaceMissileClusterVisualData(
            Matrix4 launcherWorldMat, Vector3 launcherVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileVisualParameters mParams,
            Vector3[] meshPositioningOffsets                  = null,
            Vector3[] meshPositioningDirections               = null,
            BodiesFieldGenerator meshPositioningGenerator     = null,
            SSpaceMissileVisualData.AtTargetFunc atTargetFunc = null)
        {
            _target           = target;
            _timeToHit        = timeToHit;
            _parameters       = mParams;
            _missiles         = new SSpaceMissileVisualData[numMissiles];
            this.atTargetFunc = atTargetFunc;

            Vector3[]    localSpawnPts     = new Vector3[numMissiles];
            Quaternion[] localSpawnOrients = new Quaternion[numMissiles];
            if (meshPositioningGenerator != null)
            {
                meshPositioningGenerator.Generate(numMissiles,
                                                  (id, scale, pos, orient) => {
                    localSpawnPts [id]     = pos;
                    localSpawnOrients [id] = orient;
                    return(true);
                }
                                                  );
            }

            Quaternion launcherOrientation = launcherWorldMat.ExtractRotation();

            for (int i = 0; i < numMissiles; ++i)
            {
                if (meshPositioningOffsets != null && meshPositioningOffsets.Length > 0)
                {
                    localSpawnPts [i] += meshPositioningOffsets [i % meshPositioningOffsets.Length];
                }
                if (meshPositioningDirections != null && meshPositioningDirections.Length > 0)
                {
                    int idx = i % meshPositioningDirections.Length;
                    localSpawnOrients [i] *= OpenTKHelper.getRotationTo(
                        Vector3.UnitZ, meshPositioningDirections [idx], Vector3.UnitZ);
                }
                Vector3 missileWorldPos = Vector3.Transform(localSpawnPts [i], launcherWorldMat);
                Vector3 missileLocalDir = Vector3.Transform(Vector3.UnitZ, localSpawnOrients [i]);
                Vector3 missileWorldDir = Vector3.Transform(missileLocalDir, launcherOrientation);
                Vector3 missileWorldVel = launcherVel + missileWorldDir * mParams.ejectionVelocity;

                _missiles [i] = mParams.createMissile(
                    missileWorldPos, missileWorldDir, missileWorldVel, this, i);

                #if false
                _missiles [i] = new SSpaceMissileVisualData(
                    missileWorldPos, missileWorldDir, missileWorldVel,
                    this, clusterId: i);
                #endif
            }
        }
Exemplo n.º 3
0
        public SMissileEjectionVisualDriver(SSpaceMissileVisualData missile)
            : base(missile)
        {
            var mParams = missile.parameters as SSpaceMissileVisualParameters;
            var rand    = SSpaceMissilesVisualSimulation.rand;

            _yawVelocity   = (float)rand.NextDouble() * mParams.ejectionMaxRotationVel;
            _pitchVelocity = (float)rand.NextDouble() * mParams.ejectionMaxRotationVel;
        }
Exemplo n.º 4
0
        public SMissileEjectionVisualDriver(SSpaceMissileVisualData missile)
            : base(missile)
        {
            var mParams = missile.parameters as SSpaceMissileVisualParameters;
            var rand    = SSpaceMissilesVisualSimulation.rand;

            yawVelocity = (2f * (float)rand.NextDouble() - 1f)
                          * mParams.ejectionMaxRotationVel;
            pitchVelocity = (2f * (float)rand.NextDouble() - 1f)
                            * mParams.ejectionMaxRotationVel;
            if (missile.velocity.Length > 0f)
            {
                missile.visualDirection = missile.velocity.Normalized();
            }
        }
Exemplo n.º 5
0
        protected void _addMissileRender(SSpaceMissileVisualData missile)
        {
            var missileRuntime = new SSpaceMissileRenderInfo(missile);

            #if MISSILE_SHOW
            _objScene.AddObject(missileRuntime.bodyObj);
            _particlesData.addEmitter(missileRuntime.flameSmokeEmitter);
            #endif
            _missileRuntimes.Add(missileRuntime);

            #if MISSILE_DEBUG
            _objScene.AddObject(missileRuntime.debugRays);
            _screenScene.AddObject(missileRuntime.debugCountdown);
            #endif
        }
Exemplo n.º 6
0
            public SSpaceMissileRenderInfo(SSpaceMissileVisualData missile)
            {
                this.missile = missile;
                var mParams = missile.parameters as SSpaceMissileVisualParameters;

                bodyObj       = new SSObjectMesh(mParams.missileBodyMesh());
                bodyObj.Scale = new Vector3(mParams.missileBodyScale);
                bodyObj.renderState.castsShadow     = false;
                bodyObj.renderState.receivesShadows = false;
                //bodyObj.renderState.visible = false;
                bodyObj.Name = "a missile body";

                #if MISSILE_DEBUG
                debugRays                = new MissileDebugRays(missile);
                debugCountdown           = new SSObject2DSurface_AGGText();
                debugCountdown.Size      = 2f;
                debugCountdown.MainColor = Color4Helper.RandomDebugColor();
                #endif

                flameSmokeEmitter = new SSRadialEmitter();
                flameSmokeEmitter.effectorMask            = (ushort)ParticleEffectorMasks.EjectionSmoke;
                flameSmokeEmitter.life                    = mParams.flameSmokeDuration;
                flameSmokeEmitter.color                   = new Color4(1f, 1f, 1f, 1f);
                flameSmokeEmitter.billboardXY             = true;
                flameSmokeEmitter.particlesPerEmissionMin = mParams.smokePerEmissionMin;
                flameSmokeEmitter.particlesPerEmissionMax = mParams.smokePerEmissionMax;
                flameSmokeEmitter.spriteRectangles        = mParams.smokeSpriteRects;
                //smokeEmitter.phiMin = 0f;
                //smokeEmitter.phiMax = (float)Math.PI/6f;
                flameSmokeEmitter.phiMin             = (float)Math.PI / 3f;
                flameSmokeEmitter.phiMax             = (float)Math.PI / 2f;
                flameSmokeEmitter.orientationMin     = new Vector3(0f, 0f, 0f);
                flameSmokeEmitter.orientationMax     = new Vector3(0f, 0f, 2f * (float)Math.PI);
                flameSmokeEmitter.angularVelocityMin = new Vector3(0f, 0f, -1f);
                flameSmokeEmitter.angularVelocityMax = new Vector3(0f, 0f, +1f);

                flameSmokeEmitter.radiusOffsetMin = 0f;
                flameSmokeEmitter.radiusOffsetMax = 0.1f;

                // positions emitters and mesh
                preRenderUpdate(0f);
            }
Exemplo n.º 7
0
 public SProportionalNavigationPursuitVisualDriver(SSpaceMissileVisualData missile)
     : base(missile)
 {
 }
Exemplo n.º 8
0
 public void removeMissile(SSpaceMissileVisualData missile)
 {
     missile.terminate();
 }
Exemplo n.º 9
0
 public SSpaceMissileRenderInfo addMissileRender(SSpaceMissileVisualData missile)
 {
     _initParamsSpecific(missile.parameters as SSpaceMissileVisualParameters);
     return(_addMissileRender(missile));
 }