Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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();
        }