roc_samples/roc_test.py
cecilkorik 12cb7128f7 split everything in roc_samples out of the main roc project
refactored as needed to make roc work as a shared library, without any stupid import hacks
2017-05-08 23:49:09 -07:00

175 lines
3.8 KiB
Python
Executable file

#import roc
import os
import sys
import roc
import pygame
from OpenGL.GL import *
from py3dutil import vect, quat
from roc import models
from roc import fonts
from roc import gametimer
from roc.platform import *
from roc import pipeline
import time
import collections
import random
import math
class partycle(object):
def __init__(self, x, y, xd, yd, rot, rotd, color):
self.x = x
self.y = y
self.xd = xd
self.yd = yd
self.rot = rot
self.rotd = rotd
self.color = color
@classmethod
def random(cls):
x, y = [((random.random() * 2.0) - 1.0) * 10.0 for _ in range(2)]
xd, yd = [((random.random() * 2.0) - 1.0) * 4.0 for _ in range(2)]
hue = random.random()
m1 = 1.0
h1 = hue * 6.0
s1 = 1.0 - abs((h1 % 2.0) - 1.0)
if h1 < 1.0:
r, g, b = 1.0, s1, 0.0
elif h1 < 2.0:
r, g, b = s1, 1.0, 0.0
elif h1 < 3.0:
r, g, b = 0.0, 1.0, s1
elif h1 < 4.0:
r, g, b = 0.0, s1, 1.0
elif h1 < 5.0:
r, g, b = s1, 0.0, 1.0
elif h1 < 6.0:
r, g, b = 1.0, 0.0, s1
rot = random.random() * 90.0
rotd = ((random.random() * 2.0) - 1.0) * 3.0
rv = cls(x, y, xd, yd, rot, rotd, (r, g, b, 1.0))
return rv
def movestep(self):
self.x += self.xd
self.y += self.yd
self.xd *= 0.985
self.yd *= 0.985
self.rot += self.rotd
class test_engine(roc.roc_engine.base_engine):
def __init__(self):
self.font = models.mgr.fontlib["micross20"]
self.text1 = models.TextModel("micross20", "#$% 0123 ,,,, Hello world!\xa8\xa8\xa8F", (1.0, 1.0, 0.5, 1.0))
self.string = ""
self.move = 199.0
self.moveinc = 1.0
self.particles = collections.deque()
self.particles.append(partycle.random())
self.gtime = gametimer.GameTimer()
self.gtime.start_loop()
def frame(self, events):
self.gtime.next_frame()
#print "*** Starting frame"
# pink triangle
glDisable(GL_BLEND)
glDisable(GL_TEXTURE_2D)
glBegin(GL_TRIANGLE_STRIP)
glNormal3f(0.0, 0.0, 1.0)
glTexCoord2f(0.0, 0.0)
glColor4f(1.0, 0.0, 0.5, 0.0)
glVertex3f( 20.0, 50.0, 1.0)
glVertex3f( 20.0, 600.0, 1.0)
glVertex3f( 400.0, 50.0, 1.0)
glEnd()
# yellow square
glBegin(GL_TRIANGLE_STRIP)
glNormal3f(0.0, 0.0, 1.0)
glTexCoord2f(0.0, 0.0)
glColor4f(0.0, 0.2, 0.5, 0.8)
glVertex3f( 150.0, 20.0, -50.0)
glVertex3f( 150.0, 400.0, -50.0)
glVertex3f( 360.0, 20.0, -50.0)
glVertex3f( 360.0, 400.0, -50.0)
glEnd()
glEnable(GL_BLEND)
glEnable(GL_TEXTURE_2D)
glColor4f(1.0, 1.0, 1.0, 1.0)
# texture test
mdl = models.mgr.create("m_test")
glPushMatrix()
glTranslate(100.0, 300.0, -5.0)
mdl.render()
glPopMatrix()
# font test
glPushMatrix()
glTranslate(200.0, 200.0, 5.0)
self.text1.render()
glPopMatrix()
for x in range(self.gtime.num_frames(10)):
self.move = self.move + self.moveinc
if self.move > 300.0:
self.moveinc = -1.0
elif self.move < 200.0:
self.moveinc = 1.0
for party in self.particles:
party.movestep()
if self.moveinc > 0.0:
party = partycle.random()
self.particles.append(party)
#print party.color
else:
self.particles.popleft()
glPushMatrix()
glTranslate(self.move, 250.0, 5.0)
"""
if len(self.string) > 61:
self.string = ""
for x in xrange(self.gtime.num_frames(1000)):
self.string = self.string + str(len(self.string) % 10)
"""
for x in range(self.gtime.num_frames(100)):
self.string = str(round(self.gtime.get_fps(), 1))
#print len(self.gtime.g_framelist)
self.font.render(self.string)
glPopMatrix()
# texture test
mdl2 = models.mgr.create("m_particle")
mdl2.layers[0].color = None
#print mdl2.layers[0].mesh
for party in self.particles:
glPushMatrix()
glTranslate(600.0 + party.x, 350.0 + party.y, 6.0)
glRotate(party.rot, 0.0, 0.0, 1.0)
glColor4f(*party.color)
mdl2.render()
glPopMatrix()
roc.init2d()
roc.set_engine(test_engine())
roc.main()