Initial commit
This commit is contained in:
113
main.py
Executable file
113
main.py
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
from collections import deque
|
||||
|
||||
import pygame
|
||||
from pygame.locals import USEREVENT
|
||||
import psutil
|
||||
|
||||
from bitmap import Bitmap
|
||||
|
||||
FPS = 30
|
||||
FULLSCREEN = False
|
||||
|
||||
WIDTH = 1280
|
||||
HEIGHT = 800
|
||||
SCALE_WIDTH = 1064
|
||||
SCALE_HEIGHT = 798
|
||||
|
||||
pygame.init()
|
||||
if FULLSCREEN:
|
||||
pygame.mouse.set_visible(False)
|
||||
screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.FULLSCREEN)
|
||||
else:
|
||||
screen = pygame.display.set_mode((WIDTH, HEIGHT))
|
||||
screen_rect = screen.get_rect()
|
||||
pygame.display.set_caption('Mark J. Ferrari tribute')
|
||||
clock = pygame.time.Clock()
|
||||
font = pygame.font.SysFont('bitstreamverasansmono', 14)
|
||||
UPDATE_STATS = USEREVENT + 1
|
||||
pygame.time.set_timer(UPDATE_STATS, 1000)
|
||||
|
||||
# Load scenes
|
||||
filenames = os.listdir('scenes/')
|
||||
filenames.sort()
|
||||
scenes = deque([f'scenes/{filename}' for filename in filenames
|
||||
if filename != 'TESTRAMP.json'])
|
||||
bitmap = Bitmap(scenes[0])
|
||||
bitmap_rect = bitmap.surface.get_rect()
|
||||
bitmap_rect.center = screen_rect.center
|
||||
pygame.display.set_caption(f'Mark J. Ferrari tribute - {bitmap.filename}')
|
||||
|
||||
showpalette = False
|
||||
cycling = True
|
||||
running = True
|
||||
cpu_percent = psutil.cpu_percent()
|
||||
mem_percent = psutil.virtual_memory().percent
|
||||
|
||||
while running:
|
||||
# Events
|
||||
for event in pygame.event.get():
|
||||
|
||||
if event.type == pygame.QUIT:
|
||||
running = False
|
||||
elif event.type == UPDATE_STATS:
|
||||
if showpalette:
|
||||
cpu_percent = psutil.cpu_percent()
|
||||
mem_percent = psutil.virtual_memory().percent
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_SPACE:
|
||||
cycling = not cycling
|
||||
elif event.key == pygame.K_LEFT:
|
||||
scenes.rotate(1)
|
||||
bitmap = Bitmap(scenes[0])
|
||||
pygame.display.set_caption(
|
||||
f'Living Worlds - {bitmap.filename}')
|
||||
elif event.key == pygame.K_RIGHT:
|
||||
scenes.rotate(-1)
|
||||
bitmap = Bitmap(scenes[0])
|
||||
pygame.display.set_caption(
|
||||
f'Living Worlds - {bitmap.filename}')
|
||||
elif event.key == pygame.K_p:
|
||||
showpalette = not showpalette
|
||||
else:
|
||||
running = False
|
||||
|
||||
# Update
|
||||
if cycling:
|
||||
bitmap.palette.cycle()
|
||||
bitmap.surface.set_palette(bitmap.palette.colors)
|
||||
|
||||
# Render
|
||||
screen.fill(pygame.Color('black'))
|
||||
if FULLSCREEN:
|
||||
# Scale preserving aspect ratio and center
|
||||
screen.blit(
|
||||
pygame.transform.scale(bitmap.surface,
|
||||
(SCALE_WIDTH, SCALE_HEIGHT)),
|
||||
((WIDTH - SCALE_WIDTH) / 2, 0)
|
||||
)
|
||||
else:
|
||||
screen.blit(bitmap.surface, bitmap_rect)
|
||||
|
||||
if showpalette:
|
||||
# Palette
|
||||
bitmap.palette.surface.set_palette(bitmap.palette.colors)
|
||||
screen.blit(bitmap.palette.surface, (690, 35))
|
||||
|
||||
# System stats
|
||||
fps = int(clock.get_fps())
|
||||
stats_str = (f"fps: {fps} "
|
||||
f"cpu: {cpu_percent}% mem: {mem_percent}%")
|
||||
stats = font.render(stats_str, True, pygame.Color('white'),
|
||||
pygame.Color('black'))
|
||||
stats_rect = stats.get_rect()
|
||||
screen.blit(stats, (screen_rect.width - stats_rect.width - 50, 5))
|
||||
|
||||
pygame.display.flip()
|
||||
|
||||
# Cap framerate
|
||||
clock.tick(FPS)
|
||||
|
||||
pygame.quit()
|
||||
Reference in New Issue
Block a user