예제 #1
0
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            this._owner = (LevelEditorForm)Owner;

            IEnumerable <LevelObject> objects =
                _owner.m_Level.m_LevelObjects.Values.Where(obj => k_MovableLevelObjectTypes.Contains(obj.m_Type));

            try
            {
                foreach (LevelObject obj in objects)
                {
                    if (chkOffsetAll.Checked)
                    {
                        obj.Position.X += Helper.ParseFloat(txtOffsetX.Text);
                        obj.Position.Y += Helper.ParseFloat(txtOffsetY.Text);
                        obj.Position.Z += Helper.ParseFloat(txtOffsetZ.Text);
                    }
                    if (chkScaleAll.Checked)
                    {
                        obj.Position.X *= Helper.ParseFloat(txtScaleX.Text);
                        obj.Position.Y *= Helper.ParseFloat(txtScaleY.Text);
                        obj.Position.Z *= Helper.ParseFloat(txtScaleZ.Text);
                    }
                    obj.GenerateProperties();
                }
                for (int area = 0; area < Level.k_MaxNumAreas; area++)
                {
                    _owner.RefreshObjects(area);
                }
            }
            catch { MessageBox.Show("Please enter a valid value in the format x.xxxxxx"); }
        }
예제 #2
0
        private void OpenLevel(int levelid)
        {
            if ((levelid < 0) || (levelid >= 52))
            {
                return;
            }

            foreach (LevelEditorForm lvledit in Program.m_LevelEditors)
            {
                if (lvledit.m_LevelID == levelid)
                {
                    lvledit.Focus();
                    return;
                }
            }

            // try
            {
                LevelEditorForm newedit = new LevelEditorForm(Program.m_ROM, levelid);
                newedit.Show();
                Program.m_LevelEditors.Add(newedit);
            }

            /*catch (Exception ex)
             * {
             *  MessageBox.Show("The following error occured while opening the level:\n" + ex.Message,
             *      Program.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
             * }*/
        }
예제 #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            this._owner = (LevelEditorForm)Owner;

            int[] movableTypes = new int[] { 0, 5, 1, 10, 9, 2, 4, 6, 7 };
            IEnumerable <LevelObject> objects = _owner.m_LevelObjects.Values.Where(obj => movableTypes.Contains(obj.m_Type));

            try
            {
                foreach (LevelObject obj in objects)
                {
                    if (chkOffsetAll.Checked)
                    {
                        obj.Position.X += float.Parse(txtOffsetX.Text);
                        obj.Position.Y += float.Parse(txtOffsetY.Text);
                        obj.Position.Z += float.Parse(txtOffsetZ.Text);
                    }
                    if (chkScaleAll.Checked)
                    {
                        obj.Position.X *= float.Parse(txtScaleX.Text);
                        obj.Position.Y *= float.Parse(txtScaleY.Text);
                        obj.Position.Z *= float.Parse(txtScaleZ.Text);
                    }
                    obj.GenerateProperties();
                }
                for (int i = 0; i < 8; i++)
                {
                    _owner.RefreshObjects(i);
                }
            }
            catch { MessageBox.Show("Please enter a valid value in the format x.xxxxxx"); }
        }
        public static void Main()
        {
            //init form
            LevelEditorPanel.init();
            LevelEditorForm.init();
            TickerSystem.init();

            //start the thread
            Application.Run(LevelEditorForm.levelEditorForm);
        } //endmain
예제 #5
0
        public LevelDisplaySettingsForm(LevelEditorForm parent)
        {
            InitializeComponent();

            m_Parent = parent;
            checkTextures.Checked      = m_Parent.LevelModelDisplayFlags.RenderTextures;
            checkVtxColors.Checked     = m_Parent.LevelModelDisplayFlags.RenderVertexColours;
            checkWireframe.Checked     = m_Parent.LevelModelDisplayFlags.RenderWireframe;
            checkPolylistTypes.Checked = m_Parent.LevelModelDisplayFlags.RenderPolyListType;
        }
예제 #6
0
 public LevelDisplaySettingsForm(LevelEditorForm parent)
 {
     InitializeComponent();
     m_parent = parent;
     checkTextures.Checked      = m_parent.m_levelModelDisplayFlags[0];
     checkVtxColors.Checked     = m_parent.m_levelModelDisplayFlags[1];
     checkWireframe.Checked     = m_parent.m_levelModelDisplayFlags[2];
     checkPolylistTypes.Checked = m_parent.m_levelModelDisplayFlags[3];
     valFarClipping.Value       = m_parent.GetFarClipping();
     valFOV.Value = m_parent.GetFOVangle();
 }
예제 #7
0
        public RawEditorForm(LevelEditorForm levelEditor)
        {
            m_parent          = levelEditor;
            m_displayInBinary = false;
            InitializeComponent();

            //parameter 1
            m_parameter1Ctrl = new RawUshortEdit(0, valueInput, m_displayInBinary)
            {
                ValueChanged = SendValueToLevelForm
            };
            m_parameter1Ctrl.MouseDown += DeselectOthers;
            m_parameter1Ctrl.Tag        = "Parameter 1";

            //parameter 2
            m_parameter2Ctrl = new RawUshortEdit(0, valueInput, m_displayInBinary)
            {
                ValueChanged = SendValueToLevelForm
            };
            m_parameter2Ctrl.MouseDown += DeselectOthers;
            m_parameter2Ctrl.Tag        = "Parameter 2";

            //parameter 3
            m_parameter3Ctrl = new RawUshortEdit(0, valueInput, m_displayInBinary)
            {
                ValueChanged = SendValueToLevelForm
            };
            m_parameter3Ctrl.MouseDown += DeselectOthers;
            m_parameter3Ctrl.Tag        = "Parameter 3";

            //parameter 4
            m_parameter4Ctrl = new RawUshortEdit(0, valueInput, m_displayInBinary)
            {
                ValueChanged = SendValueToLevelForm
            };
            m_parameter4Ctrl.MouseDown += DeselectOthers;
            m_parameter4Ctrl.Tag        = "Parameter 2";

            //parameter 5
            m_parameter5Ctrl = new RawUshortEdit(0, valueInput, m_displayInBinary)
            {
                ValueChanged = SendValueToLevelForm
            };
            m_parameter5Ctrl.MouseDown += DeselectOthers;
            m_parameter5Ctrl.Tag        = "Parameter 3";

            //Noting
            m_NothingCtrl = new Label()
            {
                Text = "No Raw Editing available for this Object", Width = 300
            };
        }
예제 #8
0
        public TextureAnimationForm(LevelEditorForm _owner)
        {
            InitializeComponent();
            this._owner = _owner;

            for (int i = 0; i < _owner.m_NumAreas; i++)
            {
                lbxArea.Items.Add("" + i);
            }
            lbxArea.SelectedIndex = 0;//Make sure an area is selected

            reloadData();
        }
예제 #9
0
        public CLPS_Form(LevelEditorForm _owner)
        {
            InitializeComponent();

            this._owner = _owner;

            for (int i = 0; i < 52; i++)
            {
                cbxLevels.Items.Add(i + " - " + Strings.LevelNames[i]);
            }

            loadGlobalCLPSTypes();

            loadCLPSData();
        }
예제 #10
0
        public DL_Editor(LevelEditorForm lf)
        {
            InitializeComponent();

            this.availableTree.Nodes.Clear();
            ROMFileSelect.LoadFileList(this.availableTree);
            this.lf   = lf;
            no        = new NitroOverlay(Program.m_ROM, (uint)(103 + lf.m_LevelID));
            tableAddr = no.Read32(0x30);

            uint count = no.Read16(tableAddr);

            for (uint i = 0; i < count; i++)
            {
                currentTree.Nodes.Add(Program.m_ROM.GetFileNameFromID(Program.m_ROM.GetFileIDFromInternalID(no.Read16(i * 2 + tableAddr + 2))));
            }
        }
예제 #11
0
        private void MinimapEditor_Load(object sender, EventArgs e)
        {
            LevelEditorForm _owner = (LevelEditorForm)Owner;

            this._owner = _owner;

            m_NumAreas = _owner.m_NumAreas;
            m_CurArea  = 0;

            m_TileMapFiles = new NitroFile[m_NumAreas];

            txtCoordScale.Text = "" + ((_owner.m_LevelSettings.MinimapCoordinateScale) / 1000f);

            int i, pos = tsMinimapEditor.Items.IndexOf(tslBeforeAreaBtns) + 1;

            for (i = 0; i < m_NumAreas; i++, pos++)
            {
                ToolStripButton btn = new ToolStripButton(i.ToString(), null, new EventHandler(btnAreaXX_Click));
                btn.Tag = i;
                tsMinimapEditor.Items.Insert(pos, btn);
            }

            ((ToolStripButton)tsMinimapEditor.Items[pos - i]).Checked = true;

            for (int j = 1024; j >= 0; j -= 8)
            {
                dmnWidth.Items.Add(j);
                dmnHeight.Items.Add(j);
            }

            for (int j = 15; j >= 0; j--)
            {
                dmnPaletteRow.Items.Add(j);
            }

            txtZoom.Text = "" + m_Zoom;

            LoadMinimapFiles();

            RedrawMinimap(m_IsUsingTileMap, m_SizeX, m_SizeY, m_BPP);
        }
예제 #12
0
        public RawEditorForm(LevelEditorForm levelEditor)
        {
            m_parent          = levelEditor;
            m_displayInBinary = false;
            InitializeComponent();

            for (int i = 0; i < m_ParameterControls.Length; i++)
            {
                m_ParameterControls[i] = new RawUshortEdit(0, valueInput, m_displayInBinary)
                {
                    ValueChanged = SendValueToLevelForm
                };
                m_ParameterControls[i].MouseDown += DeselectOthers;
                m_ParameterControls[i].Tag        = "Parameter " + (i + 1);
            }

            //Noting
            m_NothingCtrl = new Label()
            {
                Text = "No Raw Editing available for this Object", Width = 300
            };
        }
예제 #13
0
        /// <summary>
        /// Update objects.
        /// </summary>
        private void UpdateObjects()
        {
            //Make sure initialized.
            if (!Initialized)
            {
                return;
            }

            //Add objects if needed.
            while (Slaves.Count < numCoins.Value)
            {
                Slaves.Add(LE.AddObject(LevelEditorForm.IsSimpleObject(Obj.ID) ? LevelObject.Type.SIMPLE : LevelObject.Type.STANDARD, Obj.ID, Obj.m_Layer, Obj.m_Area));
                if (Obj.Parameters != null)
                {
                    Array.Copy(Obj.Parameters, Slaves.Last().Parameters, Obj.Parameters.Length);
                }
                if (Slaves.Last().m_Type == LevelObject.Type.STANDARD)
                {
                    (Slaves.Last() as StandardObject).YRotation = (Obj as StandardObject).YRotation;
                }
                Slaves.Last().GenerateProperties();
            }

            //Remove objects if needed.
            while (Slaves.Count > numCoins.Value)
            {
                LE.RemoveObject(Slaves.Last());
                Slaves.Remove(Slaves.Last());
            }

            //Line.
            if (formationType.SelectedIndex == 0)
            {
                //Get the total length.
                double dist = (double)distance.Value;
                double len  = (Slaves.Count - 1) * dist;

                //Get the starting position.
                Vector3 dir = -new Vector3((float)(Math.Cos(HA) * Math.Cos(VA)), (float)Math.Sin(VA), (float)(Math.Sin(HA) * Math.Cos(VA)));
                dir.Normalize();
                Vector3 start = Center - dir * (float)len / 2;

                //Set objects.
                for (int i = 0; i < Slaves.Count; i++)
                {
                    Slaves[i].Position = start + Scale(dist * i, dir);
                }
            }

            //Ring.
            else
            {
                //Get distance.
                float dist = (float)distance.Value;

                //Delta angle change.
                double da = Math.PI * 2 / Slaves.Count;

                //Get starting angles.
                double ang = 0;

                //Figure out orthonormal basis.
                Vector3 a = new Vector3((float)(Math.Cos(HA) * Math.Cos(VA)), (float)Math.Sin(VA), (float)(Math.Sin(HA) * Math.Cos(VA)));
                Vector3 b = Vector3.Cross(a, Vector3.UnitY);
                a.Normalize();
                b.Normalize();

                //Set objects.
                for (int i = 0; i < Slaves.Count; i++)
                {
                    Slaves[i].Position = Center + (float)(dist * Math.Cos(ang)) * a + (float)(dist * Math.Sin(ang)) * b;
                    ang += da;
                }
            }

            //Refresh.
            LE.RefreshObjects(Obj.m_Layer);
        }
예제 #14
0
 /// <summary>
 /// Create a new coin formation placer.
 /// </summary>
 /// <param name="le">Level editor form.</param>
 public FormationForm(LevelEditorForm le)
 {
     InitializeComponent();
     this.FormClosing += OnClosing;
     LE = le;
 }
        //---CONSTRUCTOR---
        public BetterTextureAnimationEditor(LevelEditorForm parent)
        {
            //setup GUI
            InitializeComponent();
            typeof(Panel).InvokeMember("DoubleBuffered",
                                       BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
                                       null, textureView, new object[] { true });
            typeof(Panel).InvokeMember("DoubleBuffered",
                                       BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
                                       null, timelinePanel, new object[] { true });
            InitTimer();
            textureView.MouseWheel     += textureView_MouseWheel;
            numScaling.Tag              = 1;
            valueSettingPanel2.Location = valueSettingPanel1.Location;
            valueSettingPanel1.BringToFront();

            //set private values
            m_parent         = parent;
            m_BMD            = m_parent.m_LevelModel;
            m_previewTexture = new Bitmap(64, 64);

            m_animId     = 0;
            m_animations = new List <LevelTexAnim>();

            //load Animations
            m_unsavedEntries = new Dictionary <string, LevelTexAnim.Def> [m_BMD.m_ModelChunks.Length];
            m_entries        = new Dictionary <string, LevelTexAnim.Def>();
            int i = 0;

            foreach (BMD.ModelChunk chunk in m_BMD.m_ModelChunks)
            {
                LevelTexAnim animForArea = m_parent.m_Level.m_TexAnims[i];
                TreeNode     chunkNode   = tvMaterials.Nodes.Add(chunk.m_Name, "Area " + i + " (" + m_parent.m_Level.m_TexAnims[i].m_NumFrames + " frames)");
                chunkNode.Tag = i;

                m_unsavedEntries[i] = new Dictionary <string, LevelTexAnim.Def>();
                m_animations.Add(animForArea);
                List <LevelTexAnim.Def> newEntries = new List <LevelTexAnim.Def>();

                foreach (LevelTexAnim.Def entry in animForArea.m_Defs)
                {
                    LevelTexAnim.Def newEntry = new LevelTexAnim.Def()
                    {
                        m_DefaultScale       = entry.m_DefaultScale,
                        m_MaterialName       = entry.m_MaterialName,
                        m_TranslationXValues = new List <float>(entry.m_TranslationXValues),
                        m_TranslationYValues = new List <float>(entry.m_TranslationYValues),
                        m_RotationValues     = new List <float>(entry.m_RotationValues),
                        m_ScaleValues        = new List <float>(entry.m_ScaleValues),
                    };

                    m_entries.Add(entry.m_MaterialName, newEntry);
                }

                if (animForArea.m_NumFrames > 0)
                {
                    //populate AnimationNode
                    int i2 = 0;
                    foreach (BMD.MaterialGroup matGroup in chunk.m_MatGroups)
                    {
                        if (matGroup.m_Texture != null)
                        {
                            bool hasAnimation = false;
                            foreach (LevelTexAnim.Def entry in m_animations[i].m_Defs)
                            {
                                if (entry.m_MaterialName == matGroup.m_Name)
                                {
                                    hasAnimation = true;
                                }
                            }
                            TreeNode matGroupNode = chunkNode.Nodes.Add(matGroup.m_Name, matGroup.m_Name + (hasAnimation ? "[ANIMATED]" : ""));
                            matGroupNode.Tag = i2;
                        }
                        i2++;
                    }
                }
                i++;
            }
        }