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); }
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() + ")"; }
public SSpaceMissileObjectTarget(SSObject targetObj) { this.targetObj = targetObj; _prevPos = targetObj.Pos; _velocity = Vector3.Zero; _acc = Vector3.Zero; }
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()); }
/// <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); }
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); }
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; }
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); }
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); }
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(); }
private void checkBurst3_CheckedChanged(object sender, EventArgs e) { SSObject ssObjTemp = SSObjects[exportSoulsList.SelectedIndex]; ssObjTemp.exportBurst3 = checkBurst3.Checked; SSObjects[exportSoulsList.SelectedIndex] = ssObjTemp; }
public SSObject FindInTop(String name) { SSObject obj = null; VariableTable.TryGetValue(name, out obj); return(obj); //return VariableTable.ContainsKey(name) ? VariableTable[name] : null; }
public override bool Replace(SSObject other) { if (other is SSFile) { this.Val = (other as SSFile).Val; return(true); } return(false); }
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); }
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))); }
public void removeTargets(SSObject target) { var toRemove = _targets.FindAll((t) => t.targetObj == target); foreach (var ts in toRemove) { ts.prepareForDelete(); _targets.Remove(ts); } }
public void UpdateSolutionItems() { SSObject ssObjects = SolutionObjectData.GetSolutionItems(); rootItem = new SSObjectViewModel(ssObjects); this.solutionObjects = new ReadOnlyCollection <ISSObjectViewModel>( new SSObjectViewModel[] { rootItem }); }
public ObjectTreeViewModel(SSObject ssObjects) { rootItem = new SSObjectViewModel(ssObjects); this.solutionObjects = new ReadOnlyCollection <ISSObjectViewModel>( new SSObjectViewModel[] { rootItem }); this.MessengerInstance.Register <ObjectTreeUpdated>(this, this.ObjectTreeUpdated); }
public bool isSelected(SSObject targetObj) { foreach (var ts in _targets) { if (ts.targetObj == targetObj) { return(ts.isSelected); } } return(false); }
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; }
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; } }; }
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); } }
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)); }
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; }
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); }
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); }
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); }
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."); }
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 }
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); }
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; }
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; }
public void removeTargets(SSObject target) { _targets.RemoveAll((t) => (t.target == target)); }