Recreating History p12

This commit is contained in:
Alan Mason 2012-09-28 02:17:14 -06:00
parent b17ad3f259
commit 603be44b3d

View file

@ -1,7 +1,7 @@
# Burning Wheel - Spell Burner # Burning Wheel - Spell Burner
# By 2Shirt (Alan Mason) # By 2Shirt (Alan Mason)
# #
# Version 0.12a # Version 0.13a
from tkinter import * from tkinter import *
from tkinter import ttk from tkinter import ttk
from math import ceil, floor, log from math import ceil, floor, log
@ -203,6 +203,25 @@ def roundMath(x):
return floor(x) return floor(x)
class Facet(): class Facet():
def reset(self, *args):
self.actions.set('0')
self.ob.set('0')
self.option.set('')
self.type.set(self.default)
self.optionSelect['values'] = []
self.updateOptions()
def destroy(self, *args):
try:
self.obCombobox.destroy()
except AttributeError:
self.obValueLabel.destroy()
self.typeSelect.destroy()
self.optionSelect.destroy()
self.obLabel.destroy()
self.actionsLabel.destroy()
self.actionsValueLabel.destroy()
def updateOptions(self, *args): def updateOptions(self, *args):
try: try:
self.optionSelect['values'] = getFacetOptions(self.type.get()) self.optionSelect['values'] = getFacetOptions(self.type.get())
@ -279,6 +298,7 @@ class Facet():
return str(self.type.get()) return str(self.type.get())
def __init__(self, frame, row, default=''): def __init__(self, frame, row, default=''):
self.default = default
self.frame = frame self.frame = frame
self.row = row self.row = row
self.actions = StringVar() self.actions = StringVar()
@ -351,11 +371,31 @@ class Distiller():
self.updateStats() self.updateStats()
class MajorisSigil(): class MajorisSigil():
def addSigil(self, *args): def addSigil(self, *args):
self.addButton.destroy() self.addButton.destroy()
self.frame.addMajorisSigil() self.frame.addMajorisSigil()
def destroy(self, *args):
self.addButton.destroy()
self.toggle.destroy()
self.obCombobox.destroy()
self.actionsLabel.destroy()
self.actionsEntry.destroy()
def reset(self, *args):
self.enabled.set(False)
self.ob.set('')
self.obCombobox['values'] = ('')
self.obCombobox.state(['disabled'])
self.actionsEntry.delete(0,'end')
self.actionsEntry.state(['disabled'])
try:
self.addButton.destroy()
except:
pass
self.addButton = ttk.Button(self.frame, text='+', command=self.addSigil, width=3)
self.addButton.grid(column=1, row=self.row)
def toggleSigil(self, *args): def toggleSigil(self, *args):
if self.enabled.get(): if self.enabled.get():
self.ob.set('1') self.ob.set('1')
@ -548,9 +588,7 @@ class WeaponStats():
class App(ttk.Frame): class App(ttk.Frame):
def addExtraFacet(self, *args): def addExtraFacet(self, *args):
if len(self.facets[5:]) == self.extraFacetMaxRows: self.facets.append(Facet(self, self.extrafacetStartRow+len(self.facets[5:])))
self.extraFacetButton.destroy()
self.facets.append(Facet(self, self.extrafacetsMaButartRow+len(self.facets[5:])))
# Update Distiller # Update Distiller
self.distiller3 = Distiller(self, 20, 'Final Distillation', self.distiller3 = Distiller(self, 20, 'Final Distillation',
@ -560,14 +598,38 @@ class App(ttk.Frame):
self.configureGrid() self.configureGrid()
def addMajorisSigil(self, *args): def addMajorisSigil(self, *args):
self.majorisStartRow = self.majorisStartRow + 1
if len(self.majorisSigils) < self.majorisMaxRows: if len(self.majorisSigils) < self.majorisMaxRows:
self.majorisSigils.append(MajorisSigil(self, self.majorisStartRow)) self.majorisSigils.append(MajorisSigil(self, self.majorisStartRow + len(self.majorisSigils)))
self.configureGrid() self.configureGrid()
def configureGrid(self, *args): def configureGrid(self, *args):
try:
self.extraFacetButton.destroy()
except:
pass
if len(self.facets[5:]) < self.extraFacetMaxRows:
self.extraFacetButton = ttk.Button(self, text='+', command=self.addExtraFacet, width=3)
self.extraFacetButton.grid(column=1, row=19)
for child in self.winfo_children(): child.grid_configure(padx=2, pady=2) for child in self.winfo_children(): child.grid_configure(padx=2, pady=2)
def reset(self, *args):
for f in self.facets[0:5]:
f.reset()
for f in self.facets[5:]:
f.destroy()
self.facets = self.facets[0:5]
self.majorisSigils[0].reset()
for m in self.majorisSigils[1:]:
m.destroy()
self.majorisSigils = self.majorisSigils[0:1]
self.capValue.set(False)
self.minorisValue.set(0)
self.compressValue.set(0)
self.extendValue.set(0)
self.updateAll()
self.configureGrid()
def updateAll(self, *args): def updateAll(self, *args):
### Distillations ### ### Distillations ###
self.distiller1.updateStats() self.distiller1.updateStats()
@ -589,9 +651,9 @@ class App(ttk.Frame):
# majoris # majoris
self.majActTotal = 1 self.majActTotal = 1
self.majObTotal = 0 self.majObTotal = 0
for s in self.majorisSigils: for m in self.majorisSigils:
self.majObTotal += s.getOb() self.majObTotal += m.getOb()
self.majActTotal *= s.getMultiplier() self.majActTotal *= m.getMultiplier()
# After Final Distillation # After Final Distillation
self.subTotalAct = roundMath(self.distiller3.getActions()) self.subTotalAct = roundMath(self.distiller3.getActions())
self.subTotalOb = roundMath(self.distiller3.getOb()) self.subTotalOb = roundMath(self.distiller3.getOb())
@ -620,35 +682,36 @@ class App(ttk.Frame):
# Final Spell valid? # Final Spell valid?
self.valid = True self.valid = True
# Find Actions-based limits if self.advanceLimits.get():
self.minEs = max(0, self.numEs - floor((self.postAct - 1)/5)) # Find Actions-based limits
if self.preAct > 0.5: self.minEs = max(0, self.numEs - floor((self.postAct - 1)/5))
self.maxCs = min(10, ceil(log(1/self.preAct,0.5)) + self.numCs) if self.preAct > 0.5:
elif self.preAct == 0.5: self.maxCs = min(10, ceil(log(1/self.preAct,0.5)) + self.numCs)
self.valid = False elif self.preAct == 0.5:
self.maxCs = numCs - 1 self.valid = False
else: #self.preAct < 0.5 self.maxCs = numCs - 1
self.valid = False else: #self.preAct < 0.5
if self.numEs > 0: self.valid = False
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.postAct),2))) if self.numEs > 0:
else: self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.postAct),2)))
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.preAct),2))) else:
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.preAct),2)))
# Find Ob-based limits
if self.preOb < 1: # Find Ob-based limits
self.valid = False if self.preOb < 1:
self.minCs = min(10, self.numCs + abs(self.preOb) + 1) self.valid = False
self.maxEs = max(0, self.numEs - abs(self.preOb) - 1) self.minCs = min(10, self.numCs + abs(self.preOb) + 1)
self.maxMin = max(0, self.numMin - abs(self.preOb) - 1) self.maxEs = max(0, self.numEs - abs(self.preOb) - 1)
#elif self.preOb == 1: self.maxMin = max(0, self.numMin - abs(self.preOb) - 1)
# self.maxEs = min(10, floor(self.preOb/2) + self.numEs) #elif self.preOb == 1:
# self.maxMin = min(10, self.preOb - 1 + self.numMin) # self.maxEs = min(10, floor(self.preOb/2) + self.numEs)
# self.minCs = max(0, self.numCs) # self.maxMin = min(10, self.preOb - 1 + self.numMin)
else: # self.preOb > 1 # self.minCs = max(0, self.numCs)
self.maxEs = min(10, floor((self.preEs)/2)) else: # self.preOb > 1
self.maxMin = min(10, self.preOb - 1 + self.numMin) self.maxEs = min(10, floor((self.preEs)/2))
self.minCs = max(0, min(10, self.numCs - self.preOb + 1)) self.maxMin = min(10, self.preOb - 1 + self.numMin)
self.minCs = max(0, min(10, self.numCs - self.preOb + 1))
# Set limits # Set limits
if self.numCap == 0: if self.numCap == 0:
self.capValue.set(False) self.capValue.set(False)
@ -707,7 +770,7 @@ class App(ttk.Frame):
) )
# Sigils # Sigils
ttk.Label(self, text='Sigils').grid(column=1, row=24) self.sigilsLabel = ttk.Label(self, text='Sigils').grid(column=1, row=24)
# Adjustments - Cap & Minoris Sigil(S) # Adjustments - Cap & Minoris Sigil(S)
self.capCheckbutton = Checkbutton(self, text='Cap', command=self.updateAll, self.capCheckbutton = Checkbutton(self, text='Cap', command=self.updateAll,
@ -774,6 +837,24 @@ class App(ttk.Frame):
def __init__(self, master): def __init__(self, master):
Frame.__init__(self, master) Frame.__init__(self, master)
self.frame = master self.frame = master
# Menu Bar
self.advanceLimits = BooleanVar()
self.advanceLimits.set(True)
menubar = Menu(self.frame)
self.frame['menu'] = menubar
menu_file = Menu(menubar)
menu_settings = Menu(menubar)
menubar.add_cascade(menu=menu_file, label='File')
menubar.add_cascade(menu=menu_settings, label='Settings')
menu_file.add_command(label='New', command=self.reset)
# menu_file.add_command(label='Open...')
menu_file.add_command(label='Close', command=quit)
menu_settings.add_checkbutton(label='Advanced Limiting',
variable=self.advanceLimits, onvalue=True, offvalue=False,
command=self.updateAll
)
self.capValue = BooleanVar() self.capValue = BooleanVar()
self.capValue.set(False) self.capValue.set(False)
self.compressValue = StringVar() self.compressValue = StringVar()
@ -784,7 +865,7 @@ class App(ttk.Frame):
self.minorisValue.set(0) self.minorisValue.set(0)
self.majorisStartRow = 26 self.majorisStartRow = 26
self.majorisMaxRows = 10 self.majorisMaxRows = 10
self.extrafacetsMaButartRow = 11 self.extrafacetStartRow = 11
self.extraFacetMaxRows = 9 self.extraFacetMaxRows = 9
self.facets = [] self.facets = []
self.finalOb = StringVar() self.finalOb = StringVar()
@ -801,6 +882,7 @@ root.title('Spell Burner')
root.iconbitmap("SpellBurner.ico") root.iconbitmap("SpellBurner.ico")
#root.resizable(0, 0) # disable window resizing #root.resizable(0, 0) # disable window resizing
root.resizable(width=FALSE, height=FALSE) # disable window resizing root.resizable(width=FALSE, height=FALSE) # disable window resizing
root.option_add('*tearOff', FALSE)
app = App(root) app = App(root)
app.grid(column=0, row=0, sticky=(N, W, E, S)) app.grid(column=0, row=0, sticky=(N, W, E, S))