static ParticleForm SetUpForms(Device gd, MatLib matLib, StuffKeeper sk) { ParticleForm partForm = new ParticleForm(matLib, sk); //save positions partForm.DataBindings.Add(new System.Windows.Forms.Binding("Location", Settings.Default, "ParticleFormPos", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); partForm.Visible = true; return(partForm); }
internal ParticleEditor(GraphicsDevice gd, ParticleForm pf, MatLib mats) { mGD = gd; mPF = pf; mMats = mats; mPB = new ParticleBoss(gd.GD, mats); pf.eCreate += OnCreate; pf.eItemNuked += OnEmitterNuked; pf.eValueChanged += OnValueChanged; pf.eSelectionChanged += OnEmitterSelChanged; pf.eCopyEmitterToClipBoard += OnCopyEmitterToClipBoard; pf.ePasteEmitterFromClipBoard += OnPasteEmitterFromClipBoard; pf.eTextureChanged += OnTextureChanged; }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); GraphicsDevice gd = new GraphicsDevice("Particle Editing Tool", FeatureLevel.Level_11_0, 0.1f, 3000f); //save renderform position gd.RendForm.DataBindings.Add(new System.Windows.Forms.Binding("Location", Settings.Default, "MainWindowPos", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); gd.RendForm.Location = Settings.Default.MainWindowPos; //used to have a hard coded path here for #debug //but now can just use launch.json to provide it string rootDir = "."; SharedForms.ShaderCompileHelper.mTitle = "Compiling Shaders..."; StuffKeeper sk = new StuffKeeper(); sk.eCompileNeeded += SharedForms.ShaderCompileHelper.CompileNeededHandler; sk.eCompileDone += SharedForms.ShaderCompileHelper.CompileDoneHandler; sk.Init(gd, rootDir); MatLib matLib = new MatLib(gd, sk); CommonPrims cprims = new CommonPrims(gd, sk); matLib.InitCelShading(1); matLib.GenerateCelTexturePreset(gd.GD, gd.GD.FeatureLevel == FeatureLevel.Level_9_3, false, 0); matLib.SetCelTexture(0); PlayerSteering pSteering = SetUpSteering(); Input inp = SetUpInput(); Random rand = new Random(); ParticleForm partForm = SetUpForms(gd.GD, matLib, sk); ParticleEditor partEdit = new ParticleEditor(gd, partForm, matLib); bool bMouseLookOn = false; EventHandler actHandler = new EventHandler( delegate(object s, EventArgs ea) { inp.ClearInputs(); }); EventHandler <EventArgs> deActHandler = new EventHandler <EventArgs>( delegate(object s, EventArgs ea) { gd.SetCapture(false); bMouseLookOn = false; }); gd.RendForm.Activated += actHandler; gd.RendForm.AppDeactivated += deActHandler; Vector3 pos = Vector3.One * 5f; Vector3 lightDir = -Vector3.UnitY; long lastTime = Stopwatch.GetTimestamp(); long freq = Stopwatch.Frequency; RenderLoop.Run(gd.RendForm, () => { if (!gd.RendForm.Focused) { Thread.Sleep(33); } gd.CheckResize(); if (bMouseLookOn && gd.RendForm.Focused) { gd.ResetCursorPos(); } //Clear views gd.ClearViews(); long timeNow = Stopwatch.GetTimestamp(); long delta = timeNow - lastTime; float secDelta = Math.Min((float)delta / freq, 0.1f); int msDelta = Math.Max((int)(secDelta * 1000f), 1); List <Input.InputAction> actions = UpdateInput(inp, gd, secDelta, ref bMouseLookOn); if (!gd.RendForm.Focused) { actions.Clear(); bMouseLookOn = false; gd.SetCapture(false); inp.UnMapAxisAction(Input.MoveAxis.MouseYAxis); inp.UnMapAxisAction(Input.MoveAxis.MouseXAxis); } Vector3 moveDelta = pSteering.Update(pos, gd.GCam.Forward, gd.GCam.Left, gd.GCam.Up, actions); moveDelta *= 300f; pos -= moveDelta; gd.GCam.Update(pos, pSteering.Pitch, pSteering.Yaw, pSteering.Roll); matLib.UpdateWVP(Matrix.Identity, gd.GCam.View, gd.GCam.Projection, gd.GCam.Position); cprims.Update(gd.GCam, lightDir); cprims.DrawAxis(gd.DC); partEdit.Update(msDelta); partEdit.Draw(); gd.Present(); lastTime = timeNow; }, true); //true here is slow but needed for winforms events matLib.FreeAll(); Settings.Default.Save(); gd.RendForm.Activated -= actHandler; gd.RendForm.AppDeactivated -= deActHandler; cprims.FreeAll(); inp.FreeAll(); matLib.FreeAll(); sk.eCompileDone -= SharedForms.ShaderCompileHelper.CompileDoneHandler; sk.eCompileNeeded -= SharedForms.ShaderCompileHelper.CompileNeededHandler; sk.FreeAll(); //Release all resources gd.ReleaseAll(); }