예제 #1
0
 public void selectObject(SSObject obj)
 {
     foreach (var target in _targets)
     {
         target.isSelected = (target.targetObj == obj);
     }
 }
        public SLaserBurnParticlesObject(SSObject burningObject, int particleCapacity = 100, SSTexture texture = null)
            : base(new SLaserBurnParticleSystem(particleCapacity),
                   SSTexturedQuad.DoubleFaceInstance, _defaultUsageHint)
        {
            _burningObject = burningObject;
            if (_burningObject != null)
            {
                // do this now because render may never get called otherwise due to frustum culling
                // and world mat will never get updated and never rendered
                this.worldMat = _burningObject.worldMat;
            }

            renderState.castsShadow     = false;
            renderState.receivesShadows = false;
            renderState.doBillboarding  = false;
            renderState.depthTest       = true;
            renderState.depthWrite      = false;
            renderState.lighted         = false;

            renderState.alphaBlendingOn = true;
            renderState.blendFactorSrc  = BlendingFactorSrc.SrcAlpha;
            renderState.blendFactorDest = BlendingFactorDest.One;

            // bypass frustum culling so camera updates are sent to activate particle emission
            renderState.frustumCulling = false;

            base.selectable       = false;
            base.simulateOnUpdate = false;
            base.simulateOnRender = false;

            base.colorMaterial = SSColorMaterial.pureAmbient;

            base.textureMaterial = new SSTextureMaterial(null, null, texture, null);
        }
예제 #3
0
        private void exportSoulsList_SelectedIndexChanged(object sender, EventArgs e)
        {
            //UNLEASHED: before we update, see if that last item is checked first so we can update SSObject

            SSObject ssObjTemp  = SSObjects[exportSoulsList.SelectedIndex];
            bool     checkedBox = exportSoulsList.GetItemCheckState(exportSoulsList.SelectedIndex) == CheckState.Checked;

            if (!checkedBox && ssObjTemp.shouldExport)
            {
                if (numOfExportedItems > 0)
                {
                    numOfExportedItems--;
                }
            }
            if (checkedBox && !ssObjTemp.shouldExport)
            {
                numOfExportedItems++;
            }


            ssObjTemp.shouldExport = checkedBox;
            SSObjects[exportSoulsList.SelectedIndex] = ssObjTemp;

            //UNLEASHED: now update the index



            checkBurst1.Checked = SSObjects[exportSoulsList.SelectedIndex].exportBurst1;
            checkBurst2.Checked = SSObjects[exportSoulsList.SelectedIndex].exportBurst2;
            checkBurst3.Checked = SSObjects[exportSoulsList.SelectedIndex].exportBurst3;
            checkBurst1.Text    = "Export Burst 1 (" + SSObjects[exportSoulsList.SelectedIndex].burst1ID.ToString() + ")";
            checkBurst2.Text    = "Export Burst 2 (" + SSObjects[exportSoulsList.SelectedIndex].burst2ID.ToString() + ")";
            checkBurst3.Text    = "Export Burst 3 (" + SSObjects[exportSoulsList.SelectedIndex].burst3ID.ToString() + ")";
        }
예제 #4
0
 public SSpaceMissileObjectTarget(SSObject targetObj)
 {
     this.targetObj = targetObj;
     _prevPos = targetObj.Pos;
     _velocity = Vector3.Zero;
     _acc = Vector3.Zero;
 }
예제 #5
0
        protected string _showDistanceFunc(SSObject target)
        {
            var launcherObj = getLauncherObject();
            var targetPos   = target != null ? target.Pos : launcherObj.Pos;

            return("dist:" + Math.Floor((launcherObj.Pos - targetPos).LengthFast).ToString());
        }
예제 #6
0
                /// <summary>
                ///
                /// (set-at! p-str 4 'x')
                /// </summary>
                public static SSObject SetAt(SSExpression[] exps, SSScope scope)
                {
                    SSObject newval = null;

                    (exps.Length == 3 &&
                     (newval = (exps[2]).Evaluate(scope)) != null
                    ).OrThrows("Expect a container, an integer and a new NSObject");

                    var nv   = exps[1].Evaluate(scope);
                    var cont = exps[0].Evaluate(scope);

                    if (cont is SSList)
                    {
                        ((SSList)cont).Val[(SSInteger)nv] = newval;
                    }
                    else if (cont is SSString)
                    {
                        var b = new StringBuilder((SSString)cont);
                        b[(SSInteger)nv] = (SSChar)newval;
                        cont.Replace(b.ToString());
                    }
                    else if (cont is SSDict)
                    {
                        ((SSDict)cont).Val[nv] = newval;
                    }

                    return(newval);
                }
예제 #7
0
 protected void _showExplosionCommon(SSObject attachTo, SExplosionParameters eParams,
     Vector3 position, Vector3 velocity, float intensity, float simInterval = float.NaN)
 {
     SExplosionRenderer renderer = null;
     foreach (var existing in _renderers) {
         if (existing.particleSystem.numElements == 0) {
             // recycle existing renderers...
             renderer = existing;
             renderer.attachTo = attachTo;
             if (attachTo == null) {
                 renderer.worldMat = Matrix4.Identity;
             } else {
                 renderer.worldMat = attachTo.worldMat;
             }
             renderer.parameters = eParams;
             break;
         }
     }
     if (renderer == null) {
         // have to allocate a new renderer
         renderer = new SExplosionRenderer (_particleCapacity, eParams);
         renderer.attachTo = attachTo;
         _renderScene.AddObject(renderer);
         _renderers.Add(renderer);
     }
     if (!float.IsNaN(simInterval)) {
         renderer.particleSystem.simulationStep = simInterval;
     }
     renderer.showExplosion(position, intensity, velocity);
 }
예제 #8
0
 public SSpaceMissileObjectTarget(SSObject targetObj)
 {
     this.targetObj = targetObj;
     _prevPos       = targetObj.Pos;
     _velocity      = Vector3.Zero;
     _acc           = Vector3.Zero;
 }
예제 #9
0
        public SLaser addLaser(SLaserParameters laserParams, 
		   		     		   SSObject srcObject, SSObject dstObject)
        {
            if (_2dEffectRenderer.textureMaterial == null) {
                _2dEffectRenderer.textureMaterial = new SSTextureMaterial (laserParams.emissionSpritesTexture);
            }

            var newLaser = new SLaser (laserParams);
            //newLaser.intensityEnvelope.sustainDuration = sustainDuration;
            newLaser.sourceObject = srcObject;
            newLaser.targetObject = dstObject;

            var newLaserRuntime = new LaserRuntimeInfo (newLaser, _beamScene3d, _occDiskScene, _2dEffectRenderer);
            _laserRuntimes.Add (newLaserRuntime);

            if (laserParams.doLaserBurn) {
                _laserBurnParticles.particleSystem.addHitSpots(newLaser);
            }

            // debug hacks
            //newLaser.sourceObject = newLaserRuntime.beamRuntimes[0].emissionBillboard;
            //newLaser.sourceTxfm = Matrix4.Identity;

            return newLaser;
        }
예제 #10
0
        public SLaserBurnParticlesObject(SSObject burningObject, int particleCapacity = 100, SSTexture texture = null)
            : base(new SLaserBurnParticleSystem (particleCapacity), 
                   SSTexturedQuad.doubleFaceInstance, _defaultUsageHint)
        {
            _burningObject = burningObject;
            if (_burningObject != null) {
                // do this now because render may never get called otherwise due to frustum culling
                // and world mat will never get updated and never rendered
                this.worldMat = _burningObject.worldMat;
            }

            renderState.castsShadow = false;
            renderState.receivesShadows = false;
            renderState.doBillboarding = false;
            renderState.depthTest = true;
            renderState.depthWrite = false;
            renderState.lighted = false;

            renderState.alphaBlendingOn = true;
            renderState.blendFactorSrcRGB = renderState.blendFactorSrcAlpha = BlendingFactorSrc.SrcAlpha;
            renderState.blendFactorDestRGB = renderState.blendFactorDestAlpha = BlendingFactorDest.One;

            // bypass frustum culling so camera updates are sent to activate particle emission
            renderState.frustumCulling = false;

            base.selectable = false;
            base.simulateOnUpdate = false;
            base.simulateOnRender = false;

            base.colorMaterial = SSColorMaterial.pureAmbient;

            base.textureMaterial = new SSTextureMaterial(null, null, texture, null);
        }
예제 #11
0
        public SLaserBurnParticlesObject(SSObject burningObject, int particleCapacity = 100, SSTexture texture = null)
            : base(new SLaserBurnParticleSystem(particleCapacity),
                   SSTexturedQuad.DoubleFaceInstance, _defaultUsageHint)
        {
            _burningObject = burningObject;

            renderState.castsShadow     = false;
            renderState.receivesShadows = false;
            renderState.doBillboarding  = false;
            renderState.depthTest       = true;
            renderState.depthWrite      = false;
            renderState.lighted         = false;

            renderState.alphaBlendingOn = true;
            renderState.blendFactorSrc  = BlendingFactorSrc.SrcAlpha;
            renderState.blendFactorDest = BlendingFactorDest.One;

            // bypass frustum culling so camera updates are sent to activate particle emission
            renderState.frustumCulling = false;

            base.selectable       = false;
            base.simulateOnUpdate = false;
            base.simulateOnRender = false;

            base.AmbientMatColor   = new Color4(1f, 1f, 1f, 1f);
            base.DiffuseMatColor   = new Color4(0f, 0f, 0f, 0f);
            base.EmissionMatColor  = new Color4(0f, 0f, 0f, 0f);
            base.SpecularMatColor  = new Color4(0f, 0f, 0f, 0f);
            base.ShininessMatColor = 0f;

            base.textureMaterial = new SSTextureMaterial(null, null, texture, null);
        }
예제 #12
0
        protected virtual void mouseDownHandler(object sender, MouseButtonEventArgs e)
        {
            if (!base.Focused)
            {
                return;
            }

            this.mouseButtonDown = true;

            // cast ray for mouse click
            var     clientRect = new System.Drawing.Size(ClientRectangle.Width, ClientRectangle.Height);
            Vector2 mouseLoc   = new Vector2(e.X, e.Y);

            SSRay ray = OpenTKHelper.MouseToWorldRay(
                this.main3dScene.renderConfig.projectionMatrix, this.main3dScene.renderConfig.invCameraViewMatrix, clientRect, mouseLoc);

            // Console.WriteLine("mouse ({0},{1}) unproject to ray ({2})",e.X,e.Y,ray);
            // scene.addObject(new SSObjectRay(ray));

            float    nearestMain, nearestAlpha;
            SSObject selectedObjMain  = main3dScene.Intersect(ref ray, out nearestMain);
            SSObject selectedObjAlpha = alpha3dScene.Intersect(ref ray, out nearestAlpha);

            selectedObject = nearestMain < nearestAlpha ? selectedObjMain : selectedObjAlpha;

            updateTextDisplay();
        }
예제 #13
0
        private void checkBurst3_CheckedChanged(object sender, EventArgs e)
        {
            SSObject ssObjTemp = SSObjects[exportSoulsList.SelectedIndex];

            ssObjTemp.exportBurst3 = checkBurst3.Checked;
            SSObjects[exportSoulsList.SelectedIndex] = ssObjTemp;
        }
예제 #14
0
            public SSObject FindInTop(String name)
            {
                SSObject obj = null;

                VariableTable.TryGetValue(name, out obj);
                return(obj);
                //return VariableTable.ContainsKey(name) ? VariableTable[name] : null;
            }
예제 #15
0
 public override bool Replace(SSObject other)
 {
     if (other is SSFile)
     {
         this.Val = (other as SSFile).Val;
         return(true);
     }
     return(false);
 }
예제 #16
0
 public override bool Replace(SSObject other)
 {
     if (other is SSChar)
     {
         this.Val = ((SSChar)other).Val;
         return(true);
     }
     return(false);
 }
 public void Remove(SSObject obj)
 {
     lock (_collection)
     {
         obj.IsSelected = false;
         _collection.Remove(obj);
     }
     CollectionModified?.Invoke(this, null);
 }
 public void Add(SSObject obj)
 {
     lock (_collection)
     {
         obj.IsSelected = true;
         _collection.Add(obj);
     }
     CollectionModified?.Invoke(this, null);
 }
예제 #19
0
        protected override void Initialize()
        {
            SSObject model = SolutionObjectData.GetSolutionItems();

            this.Container.RegisterType <IRenderedViewModel, RenderedViewModel>(new InjectionFactory(c => new RenderedViewModel(model)));
            this.Container.RegisterType <IMainControlViewModel, MainControlViewModel>();
            this.Container.RegisterType <ISSObjectViewModel, SSObjectViewModel>();
            this.Container.RegisterType <IObjectTreeViewModel, ObjectTreeViewModel>(new InjectionFactory(c => new ObjectTreeViewModel(model)));
        }
예제 #20
0
        public void removeTargets(SSObject target)
        {
            var toRemove = _targets.FindAll((t) => t.targetObj == target);

            foreach (var ts in toRemove)
            {
                ts.prepareForDelete();
                _targets.Remove(ts);
            }
        }
예제 #21
0
        public void UpdateSolutionItems()
        {
            SSObject ssObjects = SolutionObjectData.GetSolutionItems();

            rootItem             = new SSObjectViewModel(ssObjects);
            this.solutionObjects = new ReadOnlyCollection <ISSObjectViewModel>(
                new SSObjectViewModel[]
            {
                rootItem
            });
        }
예제 #22
0
        public ObjectTreeViewModel(SSObject ssObjects)
        {
            rootItem             = new SSObjectViewModel(ssObjects);
            this.solutionObjects = new ReadOnlyCollection <ISSObjectViewModel>(
                new SSObjectViewModel[]
            {
                rootItem
            });

            this.MessengerInstance.Register <ObjectTreeUpdated>(this, this.ObjectTreeUpdated);
        }
예제 #23
0
 public bool isSelected(SSObject targetObj)
 {
     foreach (var ts in _targets)
     {
         if (ts.targetObj == targetObj)
         {
             return(ts.isSelected);
         }
     }
     return(false);
 }
예제 #24
0
        private SSObjectViewModel(SSObject item, SSObjectViewModel parent)
        {
            this.item   = item;
            this.parent = parent;

            items = new ReadOnlyCollection <SSObjectViewModel>(
                (from thing in item.Items
                 select new SSObjectViewModel(thing, this))
                .ToList <SSObjectViewModel>());

            this.IsExpanded = true;
        }
예제 #25
0
        public void setupInput()
        {
            // hook mouse drag input...
            this.MouseDown += (object sender, MouseButtonEventArgs e) => {
                this.mouseButtonDown = true;

                // cast ray for mouse click
                var     clientRect = new System.Drawing.Size(ClientRectangle.Width, ClientRectangle.Height);
                Vector2 mouseLoc   = new Vector2(e.X, e.Y);

                SSRay ray = OpenTKHelper.MouseToWorldRay(
                    this.scene.ProjectionMatrix, this.scene.InvCameraViewMatrix, clientRect, mouseLoc);

                // Console.WriteLine("mouse ({0},{1}) unproject to ray ({2})",e.X,e.Y,ray);
                // scene.addObject(new SSObjectRay(ray));

                selectedObject = scene.Intersect(ref ray);
            };
            this.MouseUp += (object sender, MouseButtonEventArgs e) => {
                this.mouseButtonDown = false;
            };
            this.MouseMove += (object sender, MouseMoveEventArgs e) => {
                if (this.mouseButtonDown)
                {
                    // Console.WriteLine("mouse dragged: {0},{1}",e.XDelta,e.YDelta);
                    this.scene.ActiveCamera.MouseDeltaOrient(e.XDelta, e.YDelta);
                    // this.activeModel.MouseDeltaOrient(e.XDelta,e.YDelta);
                }
            };
            this.MouseWheel += (object sender, MouseWheelEventArgs e) => {
                // Console.WriteLine("mousewheel {0} {1}",e.Delta,e.DeltaPrecise);
                SSCameraThirdPerson ctp = scene.ActiveCamera as SSCameraThirdPerson;
                if (ctp != null)
                {
                    ctp.followDistance += -e.DeltaPrecise;
                }
            };

            this.KeyPress += (object sender, KeyPressEventArgs e) => {
                switch (e.KeyChar)
                {
                case 'w':
                    scene.DrawWireFrameMode = SSRenderConfig.NextWireFrameMode(scene.DrawWireFrameMode);
                    updateWireframeDisplayText(scene.DrawWireFrameMode);

                    // if we need single-pass wireframes, set the GLSL uniform variable
                    shaderPgm.Activate();
                    shaderPgm.u_ShowWireframes = (scene.DrawWireFrameMode == WireframeMode.GLSL_SinglePass);
                    break;
                }
            };
        }
예제 #26
0
 public SSObject Define(String name, SSObject value)
 {
     try
     {
         this.VariableTable.Add(name, value);
         return(value);
     }
     catch (Exception)
     {
         Output.WriteLine("Redefinition of symbol {0} value {1}".Fmt(name, VariableTable[name]));
         return(SSBool.False);
     }
 }
예제 #27
0
 public override String ToString()
 {
     return(String.Format("(func ({0}) {1})",
                          " ".Join(this.Parameters.Select(p =>
     {
         SSObject value = null;
         if ((value = this.Scope.FindInTop(p.Value)) != null)
         {
             return p + ":" + value;
         }
         return p.Value;
     })), this.Body));
 }
예제 #28
0
        public TargetSpecific addTarget(
            Color4 color,
            FetchTextFunc fetchTextBelow = null,
            FetchTextFunc fetchTextAbove = null,
            SSObject target = null)
        {
            var newTarget = new TargetSpecific (_main3dScene, _hud2dScene);
            newTarget.target = target;
            newTarget.color = color;
            newTarget.fetchTextBelow = fetchTextBelow ?? _defaultFetchText;
            newTarget.fetchTextAbove = fetchTextAbove ?? _defaultFetchText;

            return newTarget;
        }
예제 #29
0
                public static SSObject While(SSExpression[] exps, SSScope scope)
                {
                    (exps.Length == 2).OrThrows("expect two parameters");
                    SSObject ret = null;

                    while ((SSBool)exps[0].Evaluate(scope))
                    {
                        ret = exps[1].Evaluate(scope);
                        if (ret == SSSignal.Break)
                        {
                            break;
                        }
                    }
                    return(ret);
                }
예제 #30
0
                public static SSObject Loop(SSExpression[] exps, SSScope scope)
                {
                    (exps.Length == 2).OrThrows("expect two parameters");
                    int      num = exps[0].Evaluate(scope) as SSInteger;
                    SSObject ret = null;

                    while (num-- != 0)
                    {
                        ret = exps[1].Evaluate(scope);
                        if (ret == SSSignal.Break)
                        {
                            break;
                        }
                    }
                    return(ret);
                }
예제 #31
0
        public TargetSpecific addTarget(
            FetchColorFunc fetchColor    = null,
            FetchTextFunc fetchTextBelow = null,
            FetchTextFunc fetchTextAbove = null,
            SSObject target = null)
        {
            var newTarget = new TargetSpecific(_main3dScene, _hud2dScene);

            newTarget.targetObj      = target;
            newTarget.fetchColor     = fetchColor ?? _defaultFetchColor;
            newTarget.fetchTextBelow = fetchTextBelow ?? _defaultFetchText;
            newTarget.fetchTextAbove = fetchTextAbove ?? _defaultFetchText;

            _targets.Add(newTarget);

            return(newTarget);
        }
예제 #32
0
            public SSObject Find(String name)
            {
                //Func<SSExpression[], SSScope, SSObject> func;
                //BUILTIN_FUNCTIONS.TryGetValue(name, out func);
                //if (func != null)
                //    return func;
                SSObject obj     = null;
                SSScope  current = this;

                while (current != null)
                {
                    if (current.VariableTable.TryGetValue(name, out obj))
                    {
                        return(obj);
                    }
                    current = current.Parent;
                }
                throw new Exception(name + " is undefined.");
            }
예제 #33
0
        public SLaser addLaser(SLaserParameters laserParams,
                               SSObject srcObject, SSObject dstObject,
                               SLaser.TargetVelFunc targetVelFunc = null)
        {
            if (_2dEffectRenderer.textureMaterial == null)
            {
                _2dEffectRenderer.textureMaterial = new SSTextureMaterial(laserParams.emissionSpritesTexture());
            }

            var newLaser = new SLaser(laserParams, targetVelFunc);

            newLaser.sourceObject = srcObject;
            newLaser.targetObject = dstObject;

            var newLaserRuntime = new LaserRuntimeInfo(newLaser, _beamScene3d, _occDiskScene, _2dEffectRenderer);

            _laserRuntimes.Add(newLaserRuntime);

            if (laserParams.doLaserBurn)
            {
                SLaserBurnParticlesObject burnRenderer;
                bool ok = _laserBurnParticleRenderers.TryGetValue(dstObject, out burnRenderer);
                if (!ok)
                {
                    burnRenderer                 = new SLaserBurnParticlesObject(dstObject, _maxBurnParticlesPerObject, null);
                    burnRenderer.Name            = "laser manager's laser burn particle system renderer";
                    burnRenderer.textureMaterial = new SSTextureMaterial(laserParams.laserBurnParticlesTexture());
                    //_laserBurnParticles.renderMode = SSInstancedMeshRenderer.RenderMode.GpuInstancing;
                    burnRenderer.simulateOnUpdate = false;
                    burnRenderer.simulateOnRender = true;
                    _beamScene3d.AddObject(burnRenderer);
                    _laserBurnParticleRenderers [dstObject] = burnRenderer;
                }
                burnRenderer.particleSystem.addHitSpots(newLaser);
            }


            // debug hacks
            //newLaser.sourceObject = newLaserRuntime.beamRuntimes[0].emissionBillboard;
            //newLaser.sourceTxfm = Matrix4.Identity;

            return(newLaser);
        }
        protected virtual void setupEnvironment()
        {
            // add skybox cube
            var mesh = SSAssetManager.GetInstance <SSMesh_wfOBJ>("skybox/skybox.obj");

            skyboxCube = new SSObjectMesh(mesh);
            skyboxCube.renderState.depthTest  = true;
            skyboxCube.renderState.depthWrite = true;
            skyboxCube.renderState.lighted    = false;
            skyboxCube.selectable             = false;
            environmentScene.AddObject(skyboxCube);

            // add stars
            skyboxStars            = new SStarfieldObject(1600);
            skyboxStars.selectable = false;
            environmentScene.AddObject(skyboxStars);

            #if true
            // setup a sun billboard object and a sun flare spriter renderer
            {
                var sunDiskMesh = new SSMeshDisk();
                sunDisk = new SSObjectOcclusionQueuery(sunDiskMesh);
                sunDisk.renderState.doBillboarding = true;
                sunDisk.MainColor = new Color4(1f, 1f, 0.8f, 1f);
                sunDisk.Scale     = new Vector3(25f);
                sunDisk.renderState.matchScaleToScreenPixels = true;
                sunDisk.renderState.depthFunc      = DepthFunction.Lequal;
                sunDisk.renderState.frustumCulling = false;
                sunDisk.renderState.lighted        = false;
                sunDisk.renderState.castsShadow    = false;
                sunDiskScene.AddObject(sunDisk);

                var sunFlare = new SSSunFlareRenderer(sunDiskScene, sunDisk);
                sunFlare.renderState.depthTest  = false;
                sunFlare.renderState.depthWrite = false;
                sunFlare.Name = "sun flare renderer";
                sunFlareScene.AddObject(sunFlare);
            }
            #endif
        }
예제 #35
0
        protected void _showExplosionCommon(SSObject attachTo, SExplosionParameters eParams,
                                            Vector3 position, Vector3 velocity, float intensity, float simInterval = float.NaN)
        {
            SExplosionRenderer renderer = null;

            foreach (var existing in _renderers)
            {
                if (existing.particleSystem.numElements == 0)
                {
                    // recycle existing renderers...
                    renderer          = existing;
                    renderer.attachTo = attachTo;
                    if (attachTo == null)
                    {
                        renderer.worldMat = Matrix4.Identity;
                    }
                    else
                    {
                        renderer.worldMat = attachTo.worldMat;
                    }
                    renderer.parameters = eParams;
                    break;
                }
            }
            if (renderer == null)
            {
                // have to allocate a new renderer
                renderer          = new SExplosionRenderer(_particleCapacity, eParams);
                renderer.attachTo = attachTo;
                _renderScene.AddObject(renderer);
                _renderers.Add(renderer);
            }
            if (!float.IsNaN(simInterval))
            {
                renderer.particleSystem.simulationStep = simInterval;
            }
            renderer.showExplosion(position, intensity, velocity);
        }
예제 #36
0
        public SLaser addLaser(SLaserParameters laserParams, 
		   		     		   SSObject srcObject, SSObject dstObject,
                               SLaser.TargetVelFunc targetVelFunc = null)
        {
            if (_2dEffectRenderer.textureMaterial == null) {
                _2dEffectRenderer.textureMaterial = new SSTextureMaterial (laserParams.emissionSpritesTexture());
            }

            var newLaser = new SLaser (laserParams, targetVelFunc);
            newLaser.sourceObject = srcObject;
            newLaser.targetObject = dstObject;

            var newLaserRuntime = new LaserRuntimeInfo (newLaser, _beamScene3d, _occDiskScene, _2dEffectRenderer);
            _laserRuntimes.Add (newLaserRuntime);

            if (laserParams.doLaserBurn) {
                SLaserBurnParticlesObject burnRenderer;
                bool ok = _laserBurnParticleRenderers.TryGetValue(dstObject, out burnRenderer);
                if (!ok) {
                    burnRenderer = new SLaserBurnParticlesObject (dstObject, _maxBurnParticlesPerObject, null);
                    burnRenderer.Name = "laser manager's laser burn particle system renderer";
                    burnRenderer.textureMaterial = new SSTextureMaterial(laserParams.laserBurnParticlesTexture());
                    //_laserBurnParticles.renderMode = SSInstancedMeshRenderer.RenderMode.GpuInstancing;
                    burnRenderer.simulateOnUpdate = false;
                    burnRenderer.simulateOnRender = true;
                    _beamScene3d.AddObject(burnRenderer);
                    _laserBurnParticleRenderers [dstObject] = burnRenderer;
                }
                burnRenderer.particleSystem.addHitSpots(newLaser);
            }

            // debug hacks
            //newLaser.sourceObject = newLaserRuntime.beamRuntimes[0].emissionBillboard;
            //newLaser.sourceTxfm = Matrix4.Identity;

            return newLaser;
        }
예제 #37
0
 public void showExplosionAttached(SExplosionParameters eParams, float intensity,
     SSObject attachTo, Vector3 localPos, float simInterval = float.NaN)
 {
     _showExplosionCommon(attachTo, eParams, localPos, Vector3.Zero, intensity, simInterval);
 }
        protected Vector3 _neutralViewYLocal; // "Y"

        #endregion Fields

        #region Constructors

        public SSSimpleObjectTrackingJoint(SSObjectMesh hostObject, SSObject target = null)
        {
            _hostObject = hostObject;
            targetObject = target;
        }
예제 #39
0
 public void removeTargets(SSObject target)
 {
     _targets.RemoveAll((t) => (t.target == target));
 }