// 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; }
// 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; }