-- Smart Object Radial Menu Sizing Script -- Author: Jeff The Intern -- Created: 8/7/08 -- Revision History -- 08/07/2008 J.McNab - New script -- 10/09/2008 P.Ferland - Added logic to min/max sizes to prevent getting "stuck" at an invalid size -- 10/23/2008 P.Ferland - Fixed bug in sizing logic. Now clamps to min and max scales -- 10/29/2008 P.Ferland - Restricted scaling to "reasonable" values and added UI cue -- Constants -- Absolute min/max values --MIN_SPRITE_SCALE = 0.001 --MAX_SPRITE_SCALE = 256.0 -- Reasonable min/max values MIN_SPRITE_SCALE = 0.1 MAX_SPRITE_SCALE = 10.0 -- Properties Define Properties() IncludeScript('13197:21') -- ui_library script_description = 'Re-Sizeable (Radial Menu)' end Trigger attach() SendTo(self, 'radial_menu_register', 0, self, 'Increase Size', string.format('/event self_grow %d', self.id), ui_library.add.normal, ui_library.add.hover, ui_library.add.press, 200, 1) SendTo(self, 'radial_menu_register', 0, self, 'Decrease Size', string.format('/event self_shrink %d', self.id), ui_library.delete.normal, ui_library.delete.hover, ui_library.delete.press, 401, 1) end Trigger detach() SendTo(self, 'radial_menu_unregister', 0, self, 'Increase Size') SendTo(self, 'radial_menu_unregister', 0, self, 'Decrease Size') end Trigger self_grow(caller) local new_scale = 0 local max_size = 0 new_scale = self.spriteScaleX * 1.1 if (new_scale > MAX_SPRITE_SCALE) then new_scale = MAX_SPRITE_SCALE max_size = 1 end self.spriteScaleX = new_scale new_scale = self.spriteScaleY * 1.1 if (new_scale > MAX_SPRITE_SCALE) then new_scale = MAX_SPRITE_SCALE max_size = 1 end self.spriteScaleY = new_scale if (max_size ~= 0) then scale_out_of_range(self, 'Maximum size... cannot grow!') end if(HasScriptById(self, '8282:16') == 1) then PlayCharacterAnim(self, 'idle', self.dir) end end Trigger self_shrink(caller) local new_scale = 0 local min_size = 0 new_scale = self.spriteScaleX * 0.9 if (new_scale < MIN_SPRITE_SCALE) then new_scale = MIN_SPRITE_SCALE min_size = 1 end self.spriteScaleX = new_scale new_scale = self.spriteScaleY * 0.9 if (new_scale < MIN_SPRITE_SCALE) then new_scale = MIN_SPRITE_SCALE min_size = 1 end self.spriteScaleY = new_scale if (min_size ~= 0) then scale_out_of_range(self, 'Minimum size... cannot shrink!') end if(HasScriptById(self, '8282:16') == 1) then PlayCharacterAnim(self, 'idle', self.dir) end end Trigger clear_warning_window(ui_id) local window = UiFindWindow(ui_id, 'out_of_range_win') if (window ~= 0) then UiDelete(window) end end function scale_out_of_range(self, message) local out_of_range_win = ui_default_window(0, 'out_of_range_win', -125, 5, 250, 30, 1) local message_label = UiMultiLabel(out_of_range_win, 'message_label', 0, 0, 230, 30, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0) UiText(message_label, '' .. message .. '') UiAttachObject(self, out_of_range_win) UiVisible(out_of_range_win, 1) SendTo(self, 'clear_warning_window', 2000, out_of_range_win) end