forked from Cavemanon/SnootGame
colors muted
This commit is contained in:
100
game/src/cg_gallery.rpy
Normal file
100
game/src/cg_gallery.rpy
Normal file
@ -0,0 +1,100 @@
|
||||
init python:
|
||||
|
||||
# CONST PARAMS
|
||||
GALLERY_COLS = 3
|
||||
GALLERY_CGS_PER_PAGE = 6
|
||||
PREFERRED_WIDTH = 432 #px (1920 * 0.225)
|
||||
PREFERRED_HEIGHT = 243 #px (1080 * 0.225)
|
||||
DEFAULT_WIDTH_SCALE_RATIO = round(float(PREFERRED_WIDTH) / float(1920), 4)
|
||||
DEFAULT_HEIGHT_SCALE_RATIO = round(float(PREFERRED_HEIGHT) / float(1080), 4)
|
||||
NOT_UNLOCKED_COVER = im.FactorScale("gui/gallery/unlocked_cg_button_cover.png", DEFAULT_WIDTH_SCALE_RATIO, DEFAULT_HEIGHT_SCALE_RATIO)
|
||||
ACCEPTED_EXTENSIONS = ["jpg", "png"]
|
||||
CG_PATHS = "images/cgs/"
|
||||
|
||||
# GALLERY OBJECT
|
||||
# Handles unlockables via ren'py
|
||||
g = Gallery()
|
||||
g.transition = dissolve
|
||||
g.locked_button = NOT_UNLOCKED_COVER
|
||||
|
||||
# GALLERY ITEMS
|
||||
# Data structure that holds the data for each cg and button
|
||||
# item is the key in the Gallery
|
||||
# ext is the file extension
|
||||
# { item: string; cg: Displayable; ext: string }[]
|
||||
galleryItems = []
|
||||
|
||||
# Make a scaled cg button
|
||||
# (cg: string; ext: string; w: float; h: float; unlocked?: boolean): Displayable
|
||||
def cg(fname, ext, w, h):
|
||||
scaleFactor = getBoxNormalizerRatio(w, h)
|
||||
return im.FactorScale(CG_PATHS + fname + "." + ext, scaleFactor["x"], scaleFactor["y"], False)
|
||||
|
||||
# Create an object in g:Gallery, add to galleryItems
|
||||
# (imageName: string; ext: string; w: float; h: float) -> None
|
||||
def addGalleryItem(imageName, ext, w, h):
|
||||
g.button(imageName)
|
||||
g.image(imageName)
|
||||
|
||||
horizontalPan = Pan((w - 1920, h - 1080), (0, h - 1080), 30.0)
|
||||
verticalPan = Pan((w - 1920, h - 1080), (w - 1920, 0), 30.0)
|
||||
g.transform(horizontalPan if w > h else verticalPan) #TODO: niceify
|
||||
|
||||
str = "renpy.seen_image('"+imageName+"')"
|
||||
g.condition(str)
|
||||
|
||||
galleryItems.append({
|
||||
"item": imageName,
|
||||
"cg": cg(imageName, ext, w, h),
|
||||
"ext": ext
|
||||
})
|
||||
return
|
||||
|
||||
# Reads /images/cgs dir for all image files
|
||||
# Populates g:Gallery and galleryItems
|
||||
# Appends extra spaces at the end
|
||||
# () -> None
|
||||
def loadGallery():
|
||||
|
||||
list_img = renpy.list_images()
|
||||
|
||||
# Add each image to the gallery
|
||||
for str in list_img:
|
||||
_str = CG_PATHS+str+"."+ACCEPTED_EXTENSIONS[0]
|
||||
if renpy.loadable(_str): #brute force
|
||||
image = renpy.image_size(Image(_str))
|
||||
addGalleryItem(str, ACCEPTED_EXTENSIONS[0], image[0], image[1])
|
||||
return
|
||||
|
||||
|
||||
# Returns what params to call im.FactorScale with for cg button size
|
||||
# Basically the delta diff dimensions
|
||||
# (w: int; h: int) -> { x: float; y: float }
|
||||
def getBoxNormalizerRatio(w, h):
|
||||
x = round(float(PREFERRED_WIDTH) / float(w), 4)
|
||||
y = round(float(PREFERRED_HEIGHT) / float(h), 4)
|
||||
|
||||
return { "x": x, "y": y }
|
||||
|
||||
# Call to loading the gallery
|
||||
loadGallery()
|
||||
|
||||
## CG Gallery screen ########################################################
|
||||
## A screen that shows the image gallery
|
||||
screen cg_gallery():
|
||||
python:
|
||||
items = len(galleryItems)
|
||||
galleryRows = (items / GALLERY_COLS) + 1
|
||||
extraSpaces = GALLERY_COLS - (items % GALLERY_COLS)
|
||||
tag menu
|
||||
use game_menu(_("Gallery"), scroll="viewport"):
|
||||
grid GALLERY_COLS galleryRows:
|
||||
spacing 8
|
||||
for item in galleryItems:
|
||||
# vbox:
|
||||
# text item["item"] size 8
|
||||
add g.make_button(item["item"], item["cg"], xalign = 0.5, yalign = 0.5)
|
||||
# Add empty items to fill grid after last cg button
|
||||
for i in range(0, extraSpaces):
|
||||
null height 20
|
||||
|
Reference in New Issue
Block a user