Skip to content

Instantly share code, notes, and snippets.

@DataKinds
Created December 6, 2015 05:09
Show Gist options
  • Save DataKinds/7625919bf6cc76bcff2f to your computer and use it in GitHub Desktop.
Save DataKinds/7625919bf6cc76bcff2f to your computer and use it in GitHub Desktop.
OSD for WASD, space, and shift for Sinarun (or similarly controlled games)
from ctypes import *
import pygame
res = (620, 400)
keySize = (100, 100)
keyMargin = 20
spaceSize = (res[0] - keyMargin * 2, 100)
backgroundColor = (0, 0, 0)
activeColor = (255, 255, 255)
deactiveColor = (128, 128, 128)
keysToCheck = [
{
"name": "W",
"rect": pygame.Rect(
(
(res[0] - keySize[0])/2, #top
keyMargin #left
),keySize), #size
"keyCode": 0x57
},
{
"name": "A",
"rect": pygame.Rect(
(
(res[0] - keySize[0])/2 - keySize[0] - keyMargin,
keySize[1] + keyMargin * 2
),keySize),
"keyCode": 0x41
},
{
"name": "S",
"rect": pygame.Rect(
(
(res[0] - keySize[0])/2,
keySize[1] + keyMargin * 2
),keySize),
"keyCode": 0x53
},
{
"name": "D",
"rect": pygame.Rect(
(
(res[0] - keySize[0])/2 + keySize[0] + keyMargin,
keySize[1] + keyMargin * 2
),keySize),
"keyCode": 0x44
},
{
"name": "Space",
"rect": pygame.Rect(
(
(res[0] - spaceSize[0])/2,
keySize[1] * 2 + keyMargin * 3 + 20
),spaceSize),
"keyCode": 0x20
},
{
"name": "Shift",
"rect": pygame.Rect(
(
(res[0] - keySize[0])/2 - (keySize[0] + keyMargin) * 2,
keySize[1] + keyMargin * 2
),keySize),
"keyCode": 0xA0
}
]
# http://stackoverflow.com/questions/2591483/getting-a-specific-bit-value-in-a-byte-string
def getBit(byteval, idx):
return ((byteval & (1 << idx)) != 0)
def isKeyDown(key):
return (getBit(windll.user32.GetKeyState(key), 8))
if __name__ == "__main__":
pygame.init()
screen = pygame.display.set_mode(res)
clock = pygame.time.Clock()
quitOSD = False
while not quitOSD:
for e in pygame.event.get():
if e.type == pygame.QUIT:
quitOSD = True
screen.fill((0, 0, 0))
for keyT in keysToCheck:
if isKeyDown(keyT["keyCode"]):
color = activeColor
else:
color = deactiveColor
pygame.draw.rect(screen, color, keyT["rect"])
pygame.display.flip()
clock.tick(30)
pygame.quit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment