From: <ave...@us...> - 2007-04-01 12:10:24
|
Revision: 4565 http://gemrb.svn.sourceforge.net/gemrb/?rev=4565&view=rev Author: avenger_teambg Date: 2007-04-01 05:10:15 -0700 (Sun, 01 Apr 2007) Log Message: ----------- improved pst floatmenu (item use) Modified Paths: -------------- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py Modified: gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py =================================================================== --- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-01 11:53:33 UTC (rev 4564) +++ gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-01 12:10:15 UTC (rev 4565) @@ -9,12 +9,12 @@ # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # $Id$ @@ -38,8 +38,20 @@ float_menu_mode = MENU_MODE_SINGLE float_menu_index = 0 +float_menu_selected = -1 +def UseItem (): + pc = GemRB.GameGetFirstSelectedPC () + if float_menu_selected>=0: + GemRB.UseItem (pc, float_menu_selected+20, 0) + return +def UseWeapon (): + pc = GemRB.GameGetFirstSelectedPC () + #if float_menu_selected>=0: + #GemRB.UseItem (pc, float_menu_selected+9, 0) + return + def OpenFloatMenuWindow (): global FloatMenuWindow global float_menu_mode, float_menu_index @@ -55,9 +67,13 @@ GemRB.SetVar ("FloatWindow", -1) SetSelectionChangeMultiHandler (None) GemRB.UnhideGUI () + if float_menu_mode == MENU_MODE_ITEMS: + UseItem() + elif float_menu_mode == MENU_MODE_WEAPONS: + UseWeapon() return - + ActionLevel = 0 if not GemRB.GameGetFirstSelectedPC (): GemRB.UnhideGUI () return @@ -134,10 +150,7 @@ for i in range (15, 20): Button = GemRB.GetControl (Window, i) GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_ALIGN_RIGHT | IE_GUI_BUTTON_ALIGN_BOTTOM, OP_OR) - #GemRB.SetButtonFont (Window, Button, 'NUMBER') - #GemRB.SetVarAssoc (Window, Button, 'ItemButton', i) - # BAMs: # AMALLSTP - 41655 # AMATTCK - 41654 @@ -250,22 +263,31 @@ def UpdateFloatMenuItem (pc, i, weapons): Window = FloatMenuWindow + #no float menu index needed for weapons or quick items if weapons: - slot_item = GemRB.GetSlotItem (pc, 9 + i + float_menu_index) + slot_item = GemRB.GetSlotItem (pc, 9 + i) else: - slot_item = GemRB.GetSlotItem (pc, 20 + i + float_menu_index) + slot_item = GemRB.GetSlotItem (pc, 20 + i) Button = GemRB.GetControl (Window, 15 + i) - GemRB.SetButtonSprites (Window, Button, 'AMGENS', 0, 0, 1, 2, 3) + #the selected state is in another bam, sucks, we have to do everything manually + if i == float_menu_selected: + GemRB.SetButtonSprites (Window, Button, 'AMHILITE', 0, 0, 1, 0, 0) + else: + GemRB.SetButtonSprites (Window, Button, 'AMGENS', 0, 0, 1, 0, 0) + # Weapons - the last action is 'Guard' #if slot_item and slottype: if slot_item: item = GemRB.GetItem (slot_item['ItemResRef']) identified = slot_item['Flags'] & IE_INV_ITEM_IDENTIFIED + if not identified: + GemRB.SetItemIcon (Window, Button, '') + GemRB.SetText (Window, Button, '') + GemRB.SetTooltip (Window, Button, '') + return - - #GemRB.SetButtonSprites (Window, Button, 'IVSLOT', 0, 0, 0, 0, 0) GemRB.SetItemIcon (Window, Button, slot_item['ItemResRef']) if item['StackAmount'] > 1: GemRB.SetText (Window, Button, str (slot_item['Usages0'])) @@ -276,12 +298,43 @@ else: GemRB.SetTooltip (Window, Button, item['ItemNameIdentified']) GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_NO_IMAGE, OP_NAND) + if weapons: + GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectWeapon") + else: + GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectItem") + GemRB.SetVarAssoc (Window, Button, 'ItemButton', i) + return + + GemRB.SetItemIcon (Window, Button, '') + GemRB.SetText (Window, Button, '') + GemRB.SetTooltip (Window, Button, '') + return + +def SelectItem (): + global float_menu_selected + + Window = FloatMenuWindow + Button = GemRB.GetVar ('ItemButton') + #simulating radiobutton+checkbox hybrid + if float_menu_selected == Button: + float_menu_selected = -1 else: + float_menu_selected = Button + UpdateFloatMenuWindow() + return - GemRB.SetItemIcon (Window, Button, '') - GemRB.SetText (Window, Button, '') - GemRB.SetTooltip (Window, Button, '') +def SelectWeapon (): + global float_menu_selected + Window = FloatMenuWindow + Button = GemRB.GetVar ('ItemButton') + #simulating radiobutton+checkbox hybrid + if float_menu_selected == Button: + float_menu_selected = -1 + else: + float_menu_selected = Button + UpdateFloatMenuWindow() + return def UpdateFloatMenuSpell (pc, i, innate): Window = FloatMenuWindow @@ -350,41 +403,48 @@ # NOTE: it invokes FloatMenuSelectAnotherPC() through selection change handler def FloatMenuSelectAnotherPC (): - global float_menu_mode, float_menu_index + global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_SINGLE float_menu_index = 0 + float_menu_selected = -1 UpdateFloatMenuWindow () def FloatMenuSelectDialog (): + global float_menu_selected GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_TALK) + float_menu_selected = -1 UpdateFloatMenuWindow () def FloatMenuSelectWeapons (): - global float_menu_mode, float_menu_index + global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_WEAPONS float_menu_index = 0 + float_menu_selected = -1 # FIXME: Force attack mode GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_ATTACK) UpdateFloatMenuWindow () def FloatMenuSelectItems (): - global float_menu_mode, float_menu_index + global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_ITEMS float_menu_index = 0 + float_menu_selected = -1 UpdateFloatMenuWindow () def FloatMenuSelectSpells (): - global float_menu_mode, float_menu_index + global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_SPELLS float_menu_index = 0 + float_menu_selected = -1 GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_CAST) UpdateFloatMenuWindow () def FloatMenuSelectAbilities (): - global float_menu_mode, float_menu_index + global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_ABILITIES float_menu_index = 0 + float_menu_selected = -1 UpdateFloatMenuWindow () This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-19 20:34:25
|
Revision: 4604 http://gemrb.svn.sourceforge.net/gemrb/?rev=4604&view=rev Author: avenger_teambg Date: 2007-04-19 13:34:21 -0700 (Thu, 19 Apr 2007) Log Message: ----------- improved the floating menu Modified Paths: -------------- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py Modified: gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py =================================================================== --- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-18 21:04:57 UTC (rev 4603) +++ gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-19 20:34:21 UTC (rev 4604) @@ -38,24 +38,30 @@ float_menu_mode = MENU_MODE_SINGLE float_menu_index = 0 -float_menu_selected = -1 +float_menu_selected = None +type = None +def UseSpell (): + pc = GemRB.GameGetFirstSelectedPC () + slot = float_menu_selected+float_menu_index + print "spell", type, slot + GemRB.SpellCast (pc, 1<<type, slot) + return + def UseItem (): pc = GemRB.GameGetFirstSelectedPC () - if float_menu_selected>=0: - GemRB.UseItem (pc, float_menu_selected+20, 0) + GemRB.UseItem (pc, float_menu_selected+20, 0) return def UseWeapon (): pc = GemRB.GameGetFirstSelectedPC () - #if float_menu_selected>=0: - #GemRB.UseItem (pc, float_menu_selected+9, 0) + GemRB.SetEquippedQuickSlot (pc, float_menu_selected) return def OpenFloatMenuWindow (): global FloatMenuWindow global float_menu_mode, float_menu_index - + GemRB.HideGUI () if FloatMenuWindow: @@ -67,10 +73,19 @@ GemRB.SetVar ("FloatWindow", -1) SetSelectionChangeMultiHandler (None) GemRB.UnhideGUI () + + if float_menu_selected==None: + GemRB.GameControlSetTargetMode (TARGET_MODE_ALL) + return + if float_menu_mode == MENU_MODE_ITEMS: UseItem() elif float_menu_mode == MENU_MODE_WEAPONS: UseWeapon() + elif float_menu_mode == MENU_MODE_SPELLS: + UseSpell() + elif float_menu_mode == MENU_MODE_ABILITIES: + UseSpell() return ActionLevel = 0 @@ -125,7 +140,7 @@ GemRB.SetTooltip (Window, Button, 8199) GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_DRAGGABLE, OP_OR) GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_DRAG, "FloatMenuDrag") - + Button = GemRB.GetControl (Window, 12) GemRB.SetTooltip (Window, Button, 8199) GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_DRAGGABLE, OP_OR) @@ -164,7 +179,7 @@ #AMSPLL - 4709 #AMSTAT - 4707 #AMTLK - 41653 - + #AMPANN #AMPDKK #AMPFFG @@ -189,18 +204,21 @@ SetSelectionChangeMultiHandler (FloatMenuSelectAnotherPC) UpdateFloatMenuWindow () - + GemRB.UnhideGUI () def UpdateFloatMenuWindow (): Window = FloatMenuWindow - + pc = GemRB.GameGetFirstSelectedPC () Button = GemRB.GetControl (Window, 0) - #GemRB.SetButtonFlags(Window, Button, IE_GUI_BUTTON_NO_IMAGE | IE_GUI_BUTTON_PICTURE, OP_SET) GemRB.SetButtonSprites (Window, Button, GetActorPortrait (pc, 'FMENU'), 0, 0, 1, 2, 3) + Button = GemRB.GetControl (Window, 13) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_LOCKED) + Button = GemRB.GetControl (Window, 14) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_LOCKED) if float_menu_mode == MENU_MODE_SINGLE: for i in range (5): @@ -217,11 +235,27 @@ for i in range (5): UpdateFloatMenuItem (pc, i, 0) elif float_menu_mode == MENU_MODE_SPELLS: + # spells + RefreshSpellList(pc, False) + if float_menu_index: + Button = GemRB.GetControl (Window, 13) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_ENABLED) + if float_menu_index+3<len(spell_list): + Button = GemRB.GetControl (Window, 14) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_ENABLED) for i in range (5): - UpdateFloatMenuSpell (pc, i, False) + UpdateFloatMenuSpell (pc, i) elif float_menu_mode == MENU_MODE_ABILITIES: + # abilities + RefreshSpellList(pc, True) + if float_menu_index: + Button = GemRB.GetControl (Window, 13) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_ENABLED) + if float_menu_index+3<len(spell_list): + Button = GemRB.GetControl (Window, 14) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_ENABLED) for i in range (5): - UpdateFloatMenuSpell (pc, i, True) + UpdateFloatMenuSpell (pc, i) def UpdateFloatMenuSingleAction (i): Window = FloatMenuWindow @@ -235,7 +269,7 @@ # Inventory screen # Statistics screen # Mage Spell Book / Priest Scroll - + Button = GemRB.GetControl (Window, 15 + i) GemRB.SetButtonSprites (Window, Button, butts[i][0], 0, 0, 1, 2, 3) @@ -260,7 +294,37 @@ GemRB.SetTooltip (Window, Button, butts[i][1]) GemRB.SetText (Window, Button, '') +def RefreshSpellList(pc, innate): + global spell_hash, spell_list, type + if innate: + type = IE_SPELL_TYPE_INNATE + else: + Table = GemRB.LoadTable ("clskills") + if (GemRB.GetTableValue (Table, GemRB.GetPlayerStat( pc, IE_CLASS), 1)=="*"): + type = IE_SPELL_TYPE_WIZARD + else: + type = IE_SPELL_TYPE_PRIEST + + # FIXME: ugly, should be in Spellbook.cpp + spell_hash = {} + spell_list = [] + #level==0 is level #1 + for level in range (9): + mem_cnt = GemRB.GetMemorizedSpellsCount (pc, type, level) + for j in range (mem_cnt): + ms = GemRB.GetMemorizedSpell (pc, type, level, j) + + # Spell was already used up + if not ms['Flags']: continue + + if spell_hash.has_key (ms['SpellResRef']): + spell_hash[ms['SpellResRef']] = spell_hash[ms['SpellResRef']] + 1 + else: + spell_hash[ms['SpellResRef']] = 1 + spell_list.append( ms['SpellResRef'] ) + return + def UpdateFloatMenuItem (pc, i, weapons): Window = FloatMenuWindow #no float menu index needed for weapons or quick items @@ -277,7 +341,7 @@ GemRB.SetButtonSprites (Window, Button, 'AMGENS', 0, 0, 1, 0, 0) # Weapons - the last action is 'Guard' - + #if slot_item and slottype: if slot_item: item = GemRB.GetItem (slot_item['ItemResRef']) @@ -298,10 +362,7 @@ else: GemRB.SetTooltip (Window, Button, item['ItemNameIdentified']) GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_NO_IMAGE, OP_NAND) - if weapons: - GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectWeapon") - else: - GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectItem") + GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectItem") GemRB.SetVarAssoc (Window, Button, 'ItemButton', i) return @@ -317,82 +378,39 @@ Button = GemRB.GetVar ('ItemButton') #simulating radiobutton+checkbox hybrid if float_menu_selected == Button: - float_menu_selected = -1 + float_menu_selected = None else: - float_menu_selected = Button + float_menu_selected = Button+float_menu_index UpdateFloatMenuWindow() return -def SelectWeapon (): - global float_menu_selected - +def UpdateFloatMenuSpell (pc, i): Window = FloatMenuWindow - Button = GemRB.GetVar ('ItemButton') - #simulating radiobutton+checkbox hybrid - if float_menu_selected == Button: - float_menu_selected = -1 - else: - float_menu_selected = Button - UpdateFloatMenuWindow() - return -def UpdateFloatMenuSpell (pc, i, innate): - Window = FloatMenuWindow - if innate: - type = IE_SPELL_TYPE_INNATE + Button = GemRB.GetControl (Window, 15 + i) + GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_NO_IMAGE, OP_NAND) + if i == float_menu_selected: + GemRB.SetButtonBAM (Window, Button, 'AMHILITE', 0, 0) else: - Table = GemRB.LoadTable ("clskills") - if (GemRB.GetTableValue (Table, GemRB.GetPlayerStat( pc, IE_CLASS), 1)=="*"): - type = IE_SPELL_TYPE_WIZARD - else: - type = IE_SPELL_TYPE_PRIEST + GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_PICTURE, OP_NAND) - # FIXME: ugly, should be in Spellbook.cpp - spell_hash = {} - spell_list = [] - for level in range (1, 10): - mem_cnt = GemRB.GetMemorizedSpellsCount (pc, type, level) - for j in range (mem_cnt): - ms = GemRB.GetMemorizedSpell (pc, type, level, j) - - # Spell was already used up - if not ms['Flags']: continue - - if spell_hash.has_key (ms['SpellResRef']): - spell_hash[ms['SpellResRef']] = spell_hash[ms['SpellResRef']] + 1 - else: - spell_hash[ms['SpellResRef']] = 1 - spell_list.append( ms['SpellResRef'] ) - - - Button = GemRB.GetControl (Window, 15 + i) - GemRB.SetButtonSprites (Window, Button, 'AMGENS', 0, 0, 1, 2, 3) - - if i + float_menu_index < len (spell_list): SpellResRef = spell_list[i + float_menu_index] - GemRB.SetSpellIcon (Window, Button, '') # clear item sprites GemRB.SetSpellIcon (Window, Button, SpellResRef) GemRB.SetText (Window, Button, "%d" %spell_hash[SpellResRef]) - - # GemRB.SetEvent (Window, Icon, IE_GUI_BUTTON_ON_PRESS, "OpenPriestSpellUnmemorizeWindow") - #else: - # GemRB.SetEvent (Window, Icon, IE_GUI_BUTTON_ON_PRESS, "OnPriestUnmemorizeSpell") - #GemRB.SetEvent (Window, Icon, IE_GUI_BUTTON_ON_RIGHT_PRESS, "OpenPriestSpellInfoWindow") + spell = GemRB.GetSpell (SpellResRef) GemRB.SetTooltip (Window, Button, spell['SpellName']) - #PriestMemorizedSpellList.append (ms['SpellResRef']) - #GemRB.SetVarAssoc (Window, Icon, "SpellButton", i) - #GemRB.EnableButtonBorder (Window, Icon, 0, ms['Flags'] == 0) - GemRB.SetButtonFlags (Window, Button, IE_GUI_BUTTON_NO_IMAGE, OP_NAND) + GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "SelectItem") + GemRB.SetVarAssoc (Window, Button, 'ItemButton', i) + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_ENABLED) else: GemRB.SetSpellIcon (Window, Button, '') GemRB.SetText (Window, Button, '') GemRB.SetTooltip (Window, Button, '') + GemRB.SetButtonState (Window, Button, IE_GUI_BUTTON_DISABLED) + return - - - def FloatMenuSelectNextPC (): sel = GemRB.GameGetFirstSelectedPC () if sel == 0: @@ -406,21 +424,21 @@ global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_SINGLE float_menu_index = 0 - float_menu_selected = -1 + float_menu_selected = None UpdateFloatMenuWindow () def FloatMenuSelectDialog (): global float_menu_selected GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_TALK) - float_menu_selected = -1 + float_menu_selected = None UpdateFloatMenuWindow () def FloatMenuSelectWeapons (): global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_WEAPONS float_menu_index = 0 - float_menu_selected = -1 + float_menu_selected = None # FIXME: Force attack mode GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_ATTACK) UpdateFloatMenuWindow () @@ -429,14 +447,14 @@ global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_ITEMS float_menu_index = 0 - float_menu_selected = -1 + float_menu_selected = None UpdateFloatMenuWindow () def FloatMenuSelectSpells (): global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_SPELLS float_menu_index = 0 - float_menu_selected = -1 + float_menu_selected = None GemRB.GameControlSetTargetMode (TARGET_MODE_ALL | TARGET_MODE_CAST) UpdateFloatMenuWindow () @@ -444,21 +462,23 @@ global float_menu_mode, float_menu_index, float_menu_selected float_menu_mode = MENU_MODE_ABILITIES float_menu_index = 0 - float_menu_selected = -1 + float_menu_selected = None UpdateFloatMenuWindow () def FloatMenuPreviousItem (): - global float_menu_index + global float_menu_index, float_menu_selected if float_menu_index > 0: float_menu_index = float_menu_index - 1 - print "P", float_menu_index + if float_menu_selected!=None: + float_menu_selected = float_menu_selected + 1 UpdateFloatMenuWindow () def FloatMenuNextItem (): - global float_menu_index + global float_menu_index, float_menu_selected float_menu_index = float_menu_index + 1 - print "N", float_menu_index + if float_menu_selected!=None: + float_menu_selected = float_menu_selected - 1 UpdateFloatMenuWindow () This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-22 17:03:15
|
Revision: 4606 http://gemrb.svn.sourceforge.net/gemrb/?rev=4606&view=rev Author: avenger_teambg Date: 2007-04-22 10:03:13 -0700 (Sun, 22 Apr 2007) Log Message: ----------- fixed a small bug in spell selection Modified Paths: -------------- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py Modified: gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py =================================================================== --- gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-22 17:02:17 UTC (rev 4605) +++ gemrb/trunk/gemrb/GUIScripts/pst/FloatMenuWindow.py 2007-04-22 17:03:13 UTC (rev 4606) @@ -380,7 +380,7 @@ if float_menu_selected == Button: float_menu_selected = None else: - float_menu_selected = Button+float_menu_index + float_menu_selected = Button UpdateFloatMenuWindow() return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |