Recreating History p12
This commit is contained in:
parent
b17ad3f259
commit
603be44b3d
1 changed files with 123 additions and 41 deletions
164
SpellBurner.py
164
SpellBurner.py
|
|
@ -1,7 +1,7 @@
|
|||
# Burning Wheel - Spell Burner
|
||||
# By 2Shirt (Alan Mason)
|
||||
#
|
||||
# Version 0.12a
|
||||
# Version 0.13a
|
||||
from tkinter import *
|
||||
from tkinter import ttk
|
||||
from math import ceil, floor, log
|
||||
|
|
@ -203,6 +203,25 @@ def roundMath(x):
|
|||
return floor(x)
|
||||
|
||||
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):
|
||||
try:
|
||||
self.optionSelect['values'] = getFacetOptions(self.type.get())
|
||||
|
|
@ -279,6 +298,7 @@ class Facet():
|
|||
return str(self.type.get())
|
||||
|
||||
def __init__(self, frame, row, default=''):
|
||||
self.default = default
|
||||
self.frame = frame
|
||||
self.row = row
|
||||
self.actions = StringVar()
|
||||
|
|
@ -351,11 +371,31 @@ class Distiller():
|
|||
self.updateStats()
|
||||
|
||||
class MajorisSigil():
|
||||
|
||||
def addSigil(self, *args):
|
||||
self.addButton.destroy()
|
||||
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):
|
||||
if self.enabled.get():
|
||||
self.ob.set('1')
|
||||
|
|
@ -548,9 +588,7 @@ class WeaponStats():
|
|||
|
||||
class App(ttk.Frame):
|
||||
def addExtraFacet(self, *args):
|
||||
if len(self.facets[5:]) == self.extraFacetMaxRows:
|
||||
self.extraFacetButton.destroy()
|
||||
self.facets.append(Facet(self, self.extrafacetsMaButartRow+len(self.facets[5:])))
|
||||
self.facets.append(Facet(self, self.extrafacetStartRow+len(self.facets[5:])))
|
||||
|
||||
# Update Distiller
|
||||
self.distiller3 = Distiller(self, 20, 'Final Distillation',
|
||||
|
|
@ -560,14 +598,38 @@ class App(ttk.Frame):
|
|||
self.configureGrid()
|
||||
|
||||
def addMajorisSigil(self, *args):
|
||||
self.majorisStartRow = self.majorisStartRow + 1
|
||||
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()
|
||||
|
||||
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)
|
||||
|
||||
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):
|
||||
### Distillations ###
|
||||
self.distiller1.updateStats()
|
||||
|
|
@ -589,9 +651,9 @@ class App(ttk.Frame):
|
|||
# majoris
|
||||
self.majActTotal = 1
|
||||
self.majObTotal = 0
|
||||
for s in self.majorisSigils:
|
||||
self.majObTotal += s.getOb()
|
||||
self.majActTotal *= s.getMultiplier()
|
||||
for m in self.majorisSigils:
|
||||
self.majObTotal += m.getOb()
|
||||
self.majActTotal *= m.getMultiplier()
|
||||
# After Final Distillation
|
||||
self.subTotalAct = roundMath(self.distiller3.getActions())
|
||||
self.subTotalOb = roundMath(self.distiller3.getOb())
|
||||
|
|
@ -620,35 +682,36 @@ class App(ttk.Frame):
|
|||
# Final Spell valid?
|
||||
self.valid = True
|
||||
|
||||
# Find Actions-based limits
|
||||
self.minEs = max(0, self.numEs - floor((self.postAct - 1)/5))
|
||||
if self.preAct > 0.5:
|
||||
self.maxCs = min(10, ceil(log(1/self.preAct,0.5)) + self.numCs)
|
||||
elif self.preAct == 0.5:
|
||||
self.valid = False
|
||||
self.maxCs = numCs - 1
|
||||
else: #self.preAct < 0.5
|
||||
self.valid = False
|
||||
if self.numEs > 0:
|
||||
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.postAct),2)))
|
||||
else:
|
||||
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.preAct),2)))
|
||||
|
||||
# Find Ob-based limits
|
||||
if self.preOb < 1:
|
||||
self.valid = False
|
||||
self.minCs = min(10, self.numCs + abs(self.preOb) + 1)
|
||||
self.maxEs = max(0, self.numEs - abs(self.preOb) - 1)
|
||||
self.maxMin = max(0, self.numMin - abs(self.preOb) - 1)
|
||||
#elif self.preOb == 1:
|
||||
# self.maxEs = min(10, floor(self.preOb/2) + self.numEs)
|
||||
# self.maxMin = min(10, self.preOb - 1 + self.numMin)
|
||||
# self.minCs = max(0, self.numCs)
|
||||
else: # self.preOb > 1
|
||||
self.maxEs = min(10, floor((self.preEs)/2))
|
||||
self.maxMin = min(10, self.preOb - 1 + self.numMin)
|
||||
self.minCs = max(0, min(10, self.numCs - self.preOb + 1))
|
||||
|
||||
if self.advanceLimits.get():
|
||||
# Find Actions-based limits
|
||||
self.minEs = max(0, self.numEs - floor((self.postAct - 1)/5))
|
||||
if self.preAct > 0.5:
|
||||
self.maxCs = min(10, ceil(log(1/self.preAct,0.5)) + self.numCs)
|
||||
elif self.preAct == 0.5:
|
||||
self.valid = False
|
||||
self.maxCs = numCs - 1
|
||||
else: #self.preAct < 0.5
|
||||
self.valid = False
|
||||
if self.numEs > 0:
|
||||
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.postAct),2)))
|
||||
else:
|
||||
self.maxCs = max(0, self.numCs - ceil(log(1/(2*self.preAct),2)))
|
||||
|
||||
# Find Ob-based limits
|
||||
if self.preOb < 1:
|
||||
self.valid = False
|
||||
self.minCs = min(10, self.numCs + abs(self.preOb) + 1)
|
||||
self.maxEs = max(0, self.numEs - abs(self.preOb) - 1)
|
||||
self.maxMin = max(0, self.numMin - abs(self.preOb) - 1)
|
||||
#elif self.preOb == 1:
|
||||
# self.maxEs = min(10, floor(self.preOb/2) + self.numEs)
|
||||
# self.maxMin = min(10, self.preOb - 1 + self.numMin)
|
||||
# self.minCs = max(0, self.numCs)
|
||||
else: # self.preOb > 1
|
||||
self.maxEs = min(10, floor((self.preEs)/2))
|
||||
self.maxMin = min(10, self.preOb - 1 + self.numMin)
|
||||
self.minCs = max(0, min(10, self.numCs - self.preOb + 1))
|
||||
|
||||
# Set limits
|
||||
if self.numCap == 0:
|
||||
self.capValue.set(False)
|
||||
|
|
@ -707,7 +770,7 @@ class App(ttk.Frame):
|
|||
)
|
||||
|
||||
# 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)
|
||||
self.capCheckbutton = Checkbutton(self, text='Cap', command=self.updateAll,
|
||||
|
|
@ -774,6 +837,24 @@ class App(ttk.Frame):
|
|||
def __init__(self, master):
|
||||
Frame.__init__(self, 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.set(False)
|
||||
self.compressValue = StringVar()
|
||||
|
|
@ -784,7 +865,7 @@ class App(ttk.Frame):
|
|||
self.minorisValue.set(0)
|
||||
self.majorisStartRow = 26
|
||||
self.majorisMaxRows = 10
|
||||
self.extrafacetsMaButartRow = 11
|
||||
self.extrafacetStartRow = 11
|
||||
self.extraFacetMaxRows = 9
|
||||
self.facets = []
|
||||
self.finalOb = StringVar()
|
||||
|
|
@ -801,6 +882,7 @@ root.title('Spell Burner')
|
|||
root.iconbitmap("SpellBurner.ico")
|
||||
#root.resizable(0, 0) # disable window resizing
|
||||
root.resizable(width=FALSE, height=FALSE) # disable window resizing
|
||||
root.option_add('*tearOff', FALSE)
|
||||
|
||||
app = App(root)
|
||||
app.grid(column=0, row=0, sticky=(N, W, E, S))
|
||||
|
|
|
|||
Loading…
Reference in a new issue