Beispiel #1
0
        // This rotates the thing

        /*public void Rotate(float newangle)
         * {
         *      BeforePropsChange();
         *
         *      // Change angle
         *      this.anglerad = newangle;
         *      //this.anglebuild = Angle2D.RealToBuild(newangle);
         *
         *      General.Map.IsChanged = true;
         * }*/

        // This rotates the thing

        /*public void Rotate(int newangle)
         * {
         *      BeforePropsChange();
         *
         *      // Change angle
         *      this.anglerad = Angle2D.DegToRad(newangle);
         *      //this.anglebuild = newangle;
         *
         *      General.Map.IsChanged = true;
         * }*/

        // This updates all properties
        // NOTE: This does not update sector! (call DetermineSector)
        internal void Update(BuildSprite src)
        {
            // Apply changes
            this.flags        = new Dictionary <string, bool>(src.Flags, StringComparer.Ordinal);
            this.tileindex    = src.TileIndex;
            this.shade        = src.Shade;
            this.paletteindex = src.PaletteIndex;

            this.clipdistance = src.ClipDistance;
            this.repeatx      = src.RepeatX;
            this.repeaty      = src.RepeatY;
            this.offsetx      = src.OffsetX;
            this.offsety      = src.OffsetY;
            this.status       = src.Status;
            this.anglerad     = Angle2D.BuildToRad(src.Angle);

            this.owner    = src.Owner;
            this.Velocity = new Vector3D(src.VelX, src.VelY, src.VelZ);

            this.hitag = src.HiTag;
            this.lotag = src.LoTag;
            this.extra = src.Extra;

            this.Move(src.X, src.Y, src.Z);
            this.sector = src.Sector;
        }
Beispiel #2
0
        // This sets up the form to edit the given things
        public void Setup(ICollection <Thing> sprites)
        {
            // Keep this list
            this.sprites = sprites;
            if (sprites.Count > 1)
            {
                this.Text = "Edit sprites (" + sprites.Count + ")";
            }

            // Use the first sprite as a reference
            BuildSprite first = new BuildSprite(General.GetFirst(sprites));
            Dictionary <string, int> intflags = new Dictionary <string, int>();

            foreach (var group in General.Map.Config.SpriteFlags)
            {
                intflags[group.Key] = (first.Flags.ContainsKey(group.Key) && first.Flags[group.Key] ? 1 : 0);
            }

            // Go for all sprites to compare properties
            foreach (Thing s in sprites)
            {
                // Type
                if (first.TileIndex != s.TileIndex)
                {
                    first.TileIndex = VALUE_MISMATCH;
                }

                // Flags
                foreach (string flagname in General.Map.Config.SpriteFlags.Keys)
                {
                    int flag = (s.IsFlagSet(flagname) ? 1 : 0);
                    if (flag != intflags[flagname])
                    {
                        intflags[flagname] = VALUE_MISMATCH;
                    }
                }

                // Properties
                if (first.OffsetX != s.OffsetX)
                {
                    first.OffsetX = VALUE_MISMATCH;
                }
                if (first.OffsetY != s.OffsetY)
                {
                    first.OffsetY = VALUE_MISMATCH;
                }
                if (first.RepeatX != s.RepeatX)
                {
                    first.RepeatX = VALUE_MISMATCH;
                }
                if (first.RepeatY != s.RepeatY)
                {
                    first.RepeatY = VALUE_MISMATCH;
                }

                if (first.Shade != s.Shade)
                {
                    first.Shade = VALUE_MISMATCH;
                }
                if (first.PaletteIndex != s.PaletteIndex)
                {
                    first.PaletteIndex = VALUE_MISMATCH;
                }
                if (first.ClipDistance != s.ClipDistance)
                {
                    first.ClipDistance = VALUE_MISMATCH;
                }
                if (first.Owner != s.Owner)
                {
                    first.Owner = VALUE_MISMATCH;
                }

                // Properties
                if (first.X != (int)s.Position.x)
                {
                    first.X = VALUE_MISMATCH;
                }
                if (first.Y != (int)s.Position.y)
                {
                    first.Y = VALUE_MISMATCH;
                }
                if (first.Z != (int)s.Position.z)
                {
                    first.Z = VALUE_MISMATCH;
                }
                if (first.VelX != (int)s.Velocity.x)
                {
                    first.VelX = VALUE_MISMATCH;
                }
                if (first.VelY != (int)s.Velocity.y)
                {
                    first.VelY = VALUE_MISMATCH;
                }
                if (first.VelZ != (int)s.Velocity.z)
                {
                    first.VelZ = VALUE_MISMATCH;
                }

                // Angle
                if (first.Angle != s.AngleDeg)
                {
                    first.Angle = VALUE_MISMATCH;
                }

                // Identification
                if (first.HiTag != s.HiTag)
                {
                    first.HiTag = VALUE_MISMATCH;
                }
                if (first.LoTag != s.LoTag)
                {
                    first.LoTag = VALUE_MISMATCH;
                }
                if (first.Extra != s.Extra)
                {
                    first.Extra = VALUE_MISMATCH;
                }
            }

            // Update interface
            preventchanges = true;
            this.SuspendLayout();

            // Set type
            if (first.TileIndex != VALUE_MISMATCH)
            {
                spritetype.SelectType(first.TileIndex);
                tex.TextureName = first.TileIndex.ToString();
            }
            else
            {
                tex.TextureName = "";
            }

            // Flags
            foreach (CheckBox c in flags.Checkboxes)
            {
                switch (intflags[c.Tag.ToString()])
                {
                case 1:
                    c.Checked = true;
                    break;

                case VALUE_MISMATCH:
                    c.ThreeState = true;
                    c.CheckState = CheckState.Indeterminate;
                    break;
                }
            }

            // Properties
            if (first.OffsetX != VALUE_MISMATCH)
            {
                offsetx.Text = first.OffsetX.ToString();
            }
            if (first.OffsetY != VALUE_MISMATCH)
            {
                offsety.Text = first.OffsetY.ToString();
            }
            if (first.RepeatX != VALUE_MISMATCH)
            {
                repeatx.Text = first.RepeatX.ToString();
            }
            if (first.RepeatY != VALUE_MISMATCH)
            {
                repeaty.Text = first.RepeatY.ToString();
            }

            if (first.Shade != VALUE_MISMATCH)
            {
                shade.Text = first.Shade.ToString();
            }
            if (first.PaletteIndex != VALUE_MISMATCH)
            {
                palette.Text = first.PaletteIndex.ToString();
            }
            if (first.ClipDistance != VALUE_MISMATCH)
            {
                clipdistance.Text = first.ClipDistance.ToString();
            }
            if (first.Owner != VALUE_MISMATCH)
            {
                owner.Text = first.Owner.ToString();
            }

            // Position
            if (first.X != VALUE_MISMATCH)
            {
                posx.Text = first.X.ToString();
            }
            if (first.Y != VALUE_MISMATCH)
            {
                posy.Text = (-first.Y).ToString();
            }
            if (first.Z != VALUE_MISMATCH)
            {
                posz.Text = first.Z.ToString();
            }
            if (first.VelX != VALUE_MISMATCH)
            {
                velx.Text = first.VelX.ToString();
            }
            if (first.VelY != VALUE_MISMATCH)
            {
                vely.Text = first.VelY.ToString();
            }
            if (first.VelZ != VALUE_MISMATCH)
            {
                velz.Text = first.VelZ.ToString();
            }

            // Angle
            if (first.Angle != VALUE_MISMATCH)
            {
                angle.Text         = first.Angle.ToString();
                anglecontrol.Value = first.Angle;
            }
            else
            {
                anglecontrol.Value = AngleControl.NO_ANGLE;
            }

            // Identification
            //TODO: handlers
            if (first.HiTag != VALUE_MISMATCH)
            {
                hitag.Text = first.HiTag.ToString();
            }
            if (first.LoTag != VALUE_MISMATCH)
            {
                lotag.Text = first.LoTag.ToString();
            }
            if (first.Extra != VALUE_MISMATCH)
            {
                extra.Text = first.Extra.ToString();
            }

            this.ResumeLayout();
            preventchanges = false;
        }