169 lines
5.5 KiB
Python
169 lines
5.5 KiB
Python
from cgi import test
|
|
from cmath import pi
|
|
from tkinter import CENTER
|
|
from PIL import Image, ImageDraw, ImageFont, ImagePath
|
|
import textwrap
|
|
import botOptions
|
|
import random
|
|
import math
|
|
import time
|
|
|
|
watermarkFont = ImageFont.truetype('Roboto-Bold.ttf',120)
|
|
textFont = ImageFont.truetype('Roboto-Bold.ttf',23)
|
|
|
|
def generate_bingo(playerName,seed):
|
|
random.seed(seed)
|
|
background = Image.open('background.png')
|
|
midground = Image.open('midground.png')
|
|
draw = ImageDraw.Draw(background)
|
|
#Draw Watermark
|
|
draw.text((500,1000),playerName,font=watermarkFont,fill=(100,0,0),anchor='mb')
|
|
background.paste(midground,(0,0),midground)
|
|
selectedTasks = random.sample(botOptions.alternatives,25)
|
|
for x in range(0,5):
|
|
for y in range(0,5):
|
|
|
|
wrapText = textwrap.fill(text=selectedTasks.pop(),width=13)
|
|
draw.multiline_text((137+(180*x),267+(180*y)),wrapText,font=textFont,fill=(0,0,0,),anchor='mm',align=CENTER)
|
|
return background
|
|
|
|
def generate_gif_test(displayname,tier):
|
|
images = []
|
|
frameCount = 80
|
|
startAngle = random.random()*720
|
|
im = Image.new("RGBA", (582, 582), (44, 47, 51,255))
|
|
wheelGenResult = drawWheel(tier)
|
|
wheel = wheelGenResult[0]
|
|
endAngle = (startAngle+(10*(frameCount-1)))%360
|
|
#print(endAngle)
|
|
targetAngle = 180-endAngle
|
|
#Calculate winning segment
|
|
if endAngle > 180:
|
|
targetAngle = 360 - endAngle + 180
|
|
#print(wheelGenResult)
|
|
#print(targetAngle)
|
|
for n,seg in enumerate(wheelGenResult[1]):
|
|
if seg[0]+seg[1] > targetAngle:
|
|
reward = getTierAwards(tier)[n][2]
|
|
#print(reward)
|
|
break
|
|
|
|
dot = Image.open('dot.png')
|
|
|
|
for n in range(0,frameCount):
|
|
frame = im.copy()
|
|
draw = ImageDraw.Draw(frame)
|
|
|
|
|
|
rotwheel = wheel.rotate(startAngle+(n*10))
|
|
rotwheel.paste(dot,(0,0),dot)
|
|
frame.paste(rotwheel,(0,0),rotwheel)
|
|
images.append(frame)
|
|
c=im.width/2
|
|
#draw.line((c,c)+(c+250*math.sin((endAngle)/180*pi),c+250*math.cos((endAngle)/180*pi)))
|
|
images[0].save(displayname+'.gif',
|
|
save_all=True,
|
|
append_images=images[1:],
|
|
duration=22,
|
|
loop=1)
|
|
return reward
|
|
|
|
def getTierAwards(number):
|
|
#imageIcons
|
|
#Tier one
|
|
tier1 = [
|
|
(0,Image.open('resources/1kweps.png'),"1000 Weapons"),
|
|
(0,Image.open('resources/250kgold.png'),"250k Parish Gold"),
|
|
(0,Image.open('resources/250cat.png'),"250 Catapults"),
|
|
(0,Image.open('resources/100kpitch.png'),"100k Pitch"),
|
|
(0,Image.open('resources/fullbanquet.png'),"2700 Banqueting Goods"),
|
|
(10,Image.open('resources/t2.png'),"T2")
|
|
]
|
|
#Tier two
|
|
tier2 = [
|
|
(0,Image.open('resources/500kgold.png'),"500k Parish Gold"),
|
|
(0,Image.open('resources/500cat.png'),"500 Catapults"),
|
|
(0,Image.open('resources/2kweps.png'),"2000 Weapons"),
|
|
(6,Image.open('resources/t3.png'),"T3")
|
|
]
|
|
#Tier three
|
|
tier3 = [
|
|
(0,Image.open('resources/1mgold.png'),"1MILLION GOLD"),
|
|
(0,Image.open('resources/1kcat.png'),"1000 Catapults"),
|
|
(0,Image.open('resources/3kweps.png'),"3000 Weapons"),
|
|
(0,Image.open('resources/5crowns.png'),"$5 Crown Gift")
|
|
]
|
|
if number >= 3:
|
|
return tier3
|
|
elif number == 2:
|
|
return tier2
|
|
else:
|
|
return tier1
|
|
|
|
|
|
def drawWheel(tier):
|
|
awards = getTierAwards(tier)
|
|
im = Image.new("RGBA", (582, 582), (44, 47, 51,0))
|
|
c = im.width/2
|
|
radius = 290
|
|
segments = []
|
|
|
|
#generate segment sizes
|
|
fairChance = 100
|
|
specials = 0
|
|
circleCheck = 0
|
|
for a in awards:
|
|
if a[0] > 0:
|
|
fairChance -= a[0]
|
|
specials +=1
|
|
|
|
for award in awards:
|
|
#set arclengths
|
|
if award == awards[-1]:
|
|
arc = 360-circleCheck
|
|
circleCheck += arc
|
|
segments.append((arc,award))
|
|
break
|
|
if award[0] == 0:
|
|
arc = int((361*fairChance/100)/(len(awards)-specials))
|
|
circleCheck += arc
|
|
segments.append((arc,award))
|
|
else:
|
|
arc = int(361*award[0]/100)
|
|
circleCheck += arc
|
|
segments.append((arc,award))
|
|
|
|
polygons = []
|
|
iconPositions = []
|
|
sectorAreas = []
|
|
sectorStart = 0
|
|
for seg in segments:
|
|
sectorSize = seg[0]
|
|
polygons.append(drawSegmentVector(sectorStart,sectorSize,c,radius))
|
|
sectorAreas.append((sectorStart,sectorSize))
|
|
iconPositions.append(int(sectorStart+(sectorSize/2)))
|
|
sectorStart += seg[0]
|
|
imdraw = ImageDraw.Draw(im)
|
|
#selectedColors = random.sample(circleColors,len(polygons))
|
|
for polys in polygons:
|
|
imdraw.polygon(polys,fill=random.choice(botOptions.circleColors),outline='black')
|
|
#add icons to center of segment
|
|
for index,iconArc in enumerate(iconPositions):
|
|
icon = awards[index][1]
|
|
rotIcon = icon.rotate(iconArc-180)
|
|
imgSize = icon.size
|
|
|
|
im.paste(rotIcon,(int(c+(radius*0.75)*math.sin((iconArc)/180*pi))-int(imgSize[0]/2),int(c+(radius*0.75)*math.cos((iconArc)/180*pi))-int(imgSize[1]/2)),mask=rotIcon)
|
|
#im.show()
|
|
return((im,sectorAreas))
|
|
|
|
|
|
def drawSegmentVector(arcStart,arcLength,center,radius):
|
|
vectors = []
|
|
vectors.append((center,center)) #Start in center
|
|
for a in range(0,arcLength+1):
|
|
vectors.append((center+radius*math.sin((a+arcStart)/180*pi),center+radius*math.cos((a+arcStart)/180*pi)))
|
|
vectors.append((center,center)) #End in center
|
|
return vectors
|
|
|
|
#generate_gif_test("test",1) |