Advertisement
joshgreatuk

help lol

Jun 3rd, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.12 KB | None | 0 0
  1. #Imports
  2.  
  3. import pyglet
  4. from pyglet.window import key
  5. from pyglet.gl import *
  6. import xml.etree.ElementTree as ET
  7. import math
  8. import time
  9. from pyglet.gl.glu import gluLookAt
  10. from pyglet.window import mouse
  11. import os
  12.  
  13. #Constants
  14.  
  15. pack = "track pack 1"
  16. track = "bronzestone"
  17. movespeed = 10
  18. carpack = "f1pack"
  19. car = "F1red"
  20. carcfg = "F1"
  21.  
  22. #Variables
  23.  
  24. points = []
  25. objects = []
  26. global offsetx
  27. offsetx = 0
  28. global offsety
  29. offsety = 0
  30. global scalex
  31. scalex = 1
  32. global scaley
  33. scaley = 1
  34. global cartest
  35. cartest = False
  36. global editor
  37. editor = True
  38. global start
  39. start = []
  40. global specs
  41. specs = []
  42. gears = []
  43. global game_objects
  44. game_objects = []
  45. global camx
  46. camx = 0
  47. global camy
  48. camy = 0
  49. global event_stack_size
  50. event_stack_size = 0
  51. global lastox
  52. global lastoy
  53. lastox = 0
  54. lastoy = 0
  55. global packlabel,tracklabel,editselectedlabel,tileimgbox,edittilerot,edittilesel,editload
  56. global tileprev1,tileprev2
  57. global tilesel, invtiles
  58. invtiles = []
  59. global tilesel
  60. tilesel = "track pack 1/start1.png"
  61. global camposx,camposy
  62. camposx,camposy = 0,0
  63. global tilerot
  64. tilerot = 0
  65. global flist
  66. flist = []
  67.  
  68. #Init
  69.  
  70. window = pyglet.window.Window(800,600)
  71. batch = pyglet.graphics.Batch()
  72. editorbatch = pyglet.graphics.Batch()
  73. editortextbatch = pyglet.graphics.Batch()
  74. headerbatch = pyglet.graphics.Batch()
  75. textbatch = pyglet.graphics.Batch()
  76. key_handler = key.KeyStateHandler()
  77. window.push_handlers(key_handler)
  78. pyglet.resource.path = ["resources"]
  79. pyglet.resource.reindex()
  80. counter = pyglet.window.FPSDisplay(window=window)
  81.  
  82. #Classes
  83.  
  84. class Tile(pyglet.sprite.Sprite):
  85.     def __init__(self,*args,**kwargs):
  86.         super(Tile,self).__init__(*args,**kwargs)
  87.         self.event_handlers = []
  88.  
  89.     def myround(x, base=64):
  90.         return (x+63)//base*base
  91.  
  92.     @window.event
  93.     def on_mouse_motion(x,y,dx,dy):
  94.         for obj in invtiles:
  95.             obj.delete
  96.             invtiles.remove(obj)
  97.         global camposx,camposy
  98.         global tilesel
  99.         dir = "tracks/"+tilesel
  100.         fakeimg = pyglet.resource.image(dir)
  101.         fakeobj = pyglet.sprite.Sprite(img=fakeimg, x=Tile.myround(x-camposx)-64, y=Tile.myround(y-camposy)-64, batch=batch)
  102.         fakeobj.z = 3
  103.         fakeobj.opacity = 64
  104.         invtiles.append(fakeobj)
  105.         print(dir)
  106.  
  107. class Object(pyglet.sprite.Sprite):
  108.     def __init__(self,*args,**kwargs):
  109.         super(Object,self).__init__(*args,**kwargs)
  110.         self.velocity_x, self.velocity_y = 0.0, 0.0
  111.         self.event_handlers = []
  112.  
  113.     def update(self,dt):
  114.         self.x -= self.velocity_x * dt
  115.         self.y -= self.velocity_y * dt
  116.  
  117. class Player(Object):
  118.  
  119.     global imgpath
  120.     imgpath = "cars/"+carpack+"/"+car+".png"
  121.  
  122.     def __init__(self,*args,**kwargs):
  123.         global imgpath
  124.         super(Player,self).__init__(img=pyglet.resource.image(imgpath),*args,**kwargs)
  125.         global startrotation
  126.         self.z = 2
  127.         cfgpath = "Resources/cars/"+carpack+"/"+carcfg+".xml"
  128.         config = ET.parse(cfgpath)
  129.         global specs
  130.         for elem in config.iter(tag='spec'):
  131.             specs.append(elem.text)
  132.         for elem in config.iter(tag='gear'):
  133.             gears.append(elem.text)
  134.         self.key_handler = key.KeyStateHandler()
  135.         self.event_handlers = [self,self.key_handler]
  136.         self.rotate_speed = int(specs[2]) / 5
  137.         self.force_x = 0
  138.         self.force_y = 0
  139.         self.gear = 1
  140.         self.angularVelocity = 0
  141.         self.drag = 0.9
  142.         self.angularDrag = 0.9
  143.  
  144.     def update(self,dt):
  145.         super(Player,self).update(dt)
  146.         self.velocity_x *= self.drag
  147.         self.velocity_y *= self.drag
  148.         self.rotation += self.angularVelocity
  149.         self.angularVelocity *= self.angularDrag
  150.         if self.key_handler[key.UP]:
  151.             self.velocity_y -= math.sin(self.rotation) * int(specs[2])
  152.             self.velocity_x -= math.cos(self.rotation) * int(specs[2])
  153.         elif self.key_handler[key.DOWN]:
  154.             self.velocity_y += math.sin(self.rotation) * int(specs[5])
  155.             self.velocity_x += math.cos(self.rotation) * int(specs[5])
  156.         if self.key_handler[key.LEFT]:
  157.             self.angularVelocity -= int(specs[3])
  158.         elif self.key_handler[key.RIGHT]:
  159.             self.angularVelocity += int(specs[3])
  160.  
  161.     def on_key_press(self,symbol,modifiers):
  162.         if symbol == key.LSHIFT:
  163.             self.gear += 1
  164.         elif symbol == key.LCTRL:
  165.             self.gear -= 1
  166.  
  167. #Functions
  168.  
  169. def centre(text):
  170.     return math.floor(800 - len(text))/2
  171.  
  172. def myround(x, base=64):
  173.     return (x+63)//base*base
  174.  
  175. @window.event
  176. def on_mouse_release(x,y,button,modifiers):
  177.     global tilesel, game_objects, camposx,camposy
  178.     if button == pyglet.window.mouse.LEFT:
  179.         dir = "tracks/"+tilesel
  180.         img = pyglet.resource.image(dir)
  181.         obj = pyglet.sprite.Sprite(img=img, x=myround(x-camposx)-64, y=myround(y-camposy)-64, batch=batch)
  182.         obj.z = 3
  183.         game_objects.append(obj)
  184.     if button == pyglet.window.mouse.RIGHT:
  185.         x += camposx
  186.         y += camposy
  187.         for obj in game_objects:
  188.             x1 = obj.x
  189.             y1 = obj.y
  190.             x2 = obj.image.width + obj.x
  191.             y2 = obj.image.height +  obj.y
  192.             if x >= x1 and x <= x2 and y >= y1 and y <= y2:
  193.                 obj.delete()
  194.                 game_objects.remove(obj)
  195.  
  196. def refreshtrack():
  197.     window.clear()
  198.     for obj in objects:
  199.         obj.delete
  200.     init()
  201.  
  202. def init():
  203.     global objects, game_objects
  204.     grassimg = pyglet.resource.image("grass.png")
  205.     tileimg = pyglet.resource.image("tile.png")
  206.     pointx = -1024
  207.     pointy = 8128
  208.     batch.draw()
  209.     for i in range(100):
  210.         for j in range(100):
  211.             grass = pyglet.sprite.Sprite(img=grassimg,x=pointx,y=pointy,batch=batch)
  212.             grass.z = -1
  213.             objects.append(grass)
  214.             pointx += 128
  215.         pointy -= 128
  216.         pointx = -1024
  217.     pointx = -1024
  218.     pointy = 8128
  219.     for i in range(200):
  220.         for j in range(200):
  221.             global tile
  222.             tile = Tile(img=tileimg,x=pointx,y=pointy,batch=batch)
  223.             tile.z = 0
  224.             objects.append(tile)
  225.             pointx += 64
  226.         pointy -= 64
  227.         pointx = -1024
  228.     batch.draw()
  229.     global event_stack_size
  230.     while event_stack_size > 0:
  231.         window.pop_handlers()
  232.         event_stack_size -= 1
  233.     path = "Resources/tracks/"+pack+"/"+track+".xml"
  234.     config = ET.parse(path)
  235.     for elem in config.iter(tag='point'):
  236.         points.append(elem.text)
  237.     for i in range(len(points)):
  238.         point = points[i].split(":")
  239.         dir = "tracks/"+pack+"/"+point[0]
  240.         pointimg = pyglet.resource.image(dir)
  241.         pointx = int(point[1]) * 64
  242.         pointy = int(point[2]) * 64
  243.         object = pyglet.sprite.Sprite(img=pointimg,x=pointx,y=pointy,batch=batch)
  244.         object.update(rotation=int(point[4]))
  245.         object.z = 1
  246.         game_objects.append(object)
  247.     for elem in config.iter(tag='start'):
  248.         start.append(elem.text)
  249.     global startx
  250.     global starty
  251.     global startrotation
  252.     startx = start[0]
  253.     starty = start[1]
  254.     startrotation = start[2]
  255.     headerimg = pyglet.resource.image("header.png")
  256.     global header
  257.     header  = pyglet.sprite.Sprite(img=headerimg,x=0,y=536,batch=headerbatch)
  258.     header.z = 4
  259.     footerimg = pyglet.resource.image("footer.png")
  260.     global footer
  261.     footer = pyglet.sprite.Sprite(img=footerimg,x=100,y=25,batch=editorbatch)
  262.     footer.z = 4
  263.     global packlabel,tracklabel,editselectedlabel,tilepicbox,edittilerot,edittilesel
  264.     global tileprev1, tileprev2
  265.     packtext = "pack : "+pack
  266.     tracktext = "track : "+track
  267.     packlabel = pyglet.text.Label(text=packtext,x=10,y=575,batch=textbatch)
  268.     tracklabel = pyglet.text.Label(text=tracktext,x=10,y=550,batch=textbatch)
  269.     packlabel.z = 5
  270.     tracklabel.z = 5
  271.     global flist
  272.     cwd = os.getcwd()
  273.     dir = cwd + "/Resources/tracks/" + pack
  274.     for file in os.listdir(dir):
  275.         if file.endswith(".png"):
  276.             flist.append(file)
  277.     global tilesel
  278.     global selection, prevsel, nextsel
  279.     selection = 1
  280.     prevsel = 0
  281.     nextsel = 2
  282.     dir = "tracks/"+pack+"/"+flist[selection]
  283.     tilesel = pack+"/"+flist[selection]
  284.     selection1 = "selection : "+tilesel.partition("/")[-1]
  285.     editselectedlabel = pyglet.text.Label(text=selection1,x=110,y=130,batch=editortextbatch)
  286.     editselectedlabel.z = 5
  287.     global tilepicbox
  288.     tilepicbox = pyglet.sprite.Sprite(img=tileimg,x=180,y=35,batch=editortextbatch)
  289.     global tilerot
  290.     tilerotation = "rotation : "+str(tilerot)
  291.     edittilerot = pyglet.text.Label(text=tilerotation,x=110,y=110,batch=editortextbatch)
  292.     edittilesel = pyglet.sprite.Sprite(img=pyglet.resource.image(dir),x=181,y=36,batch=editortextbatch)
  293.     edittilesel.scale_x = 64 / edittilesel.width
  294.     edittilesel.scale_y = 64 / edittilesel.height
  295.     dir1 = "tracks/"+pack+"/"+flist[-1]
  296.     dir2 = "tracks/"+pack+"/"+flist[1]
  297.     tileprev1 = pyglet.sprite.Sprite(img=pyglet.resource.image(dir1),x=111,y=36,batch=editortextbatch)
  298.     tileprev2 = pyglet.sprite.Sprite(img=pyglet.resource.image(dir2),x=251,y=36,batch=editortextbatch)
  299.     tileprev1.scale_x = 64 / tileprev1.width
  300.     tileprev1.scale_y = 64 / tileprev1.height
  301.     tileprev2.scale_x = 64 / tileprev2.width
  302.     tileprev2.scale_y = 64 / tileprev2.height
  303.  
  304. @window.event
  305. def on_draw():
  306.     global offsetx,offsety
  307.     global scalex,scaley
  308.     global camposx,camposy
  309.     global specs
  310.     global cartest,editor
  311.     camposx += offsetx
  312.     camposy += offsety
  313.     packlabel.x -= offsetx
  314.     packlabel.y -= offsety
  315.     tracklabel.x -= offsetx
  316.     tracklabel.y -= offsety
  317.     header.x -= offsetx
  318.     header.y -= offsety
  319.     glScalef(scalex,scaley,0)
  320.     glTranslatef(round(offsetx),round(offsety),3)
  321.     batch.draw()
  322.     headerbatch.draw()
  323.     textbatch.draw()
  324.     counter.draw()
  325.     if editor == True:
  326.         footer.x -= offsetx
  327.         footer.y -= offsety
  328.         editselectedlabel.x -= offsetx
  329.         editselectedlabel.y -= offsety
  330.         tilepicbox.x -= offsetx
  331.         tilepicbox.y -= offsety
  332.         edittilesel.x -= offsetx
  333.         edittilesel.y -= offsety
  334.         edittilerot.x -= offsetx
  335.         edittilerot.y -= offsety
  336.         tileprev1.x -= offsetx
  337.         tileprev1.y -= offsety
  338.         tileprev2.x -= offsetx
  339.         tileprev2.y -= offsety
  340.         editorbatch.draw()
  341.         editortextbatch.draw()
  342.     if cartest == True:
  343.         player.draw()
  344.     offsetx = 0
  345.     offsety = 0
  346.     scalex = 1
  347.     scaley = 1
  348.  
  349. def update(dt):
  350.     if key_handler[key.R]:
  351.         refreshtrack()
  352.     global cartest
  353.     if cartest == False:
  354.         global offsetx
  355.         global offsety
  356.         global scalex
  357.         global scaley
  358.         if key_handler[key.UP]:
  359.             offsety -= movespeed
  360.         if key_handler[key.DOWN]:
  361.             offsety += movespeed
  362.         if key_handler[key.LEFT]:
  363.             offsetx += movespeed
  364.         if key_handler[key.RIGHT]:
  365.             offsetx -= movespeed
  366.         if key_handler[key.T]:
  367.             cartest = True
  368.             print(cartest)
  369.             global startx
  370.             global starty
  371.             global startrotation
  372.             global player
  373.             player = Player(x=int(startx),y=int(starty))
  374.             game_objects.append(player)
  375.             for obj in game_objects:
  376.                 for handler in obj.event_handlers:
  377.                     window.push_handlers(handler)
  378.                     global event_stack_size
  379.                     event_stack_size += 1
  380.  
  381. @window.event
  382. def on_key_press(symbol,modifiers):
  383.     global flist
  384.     global selection,prevsel,nextsel
  385.     global pack
  386.     global tilesel
  387.     if symbol == key.O:
  388.         if prevsel != 0:
  389.             selection -= 1
  390.             prevsel -= 1
  391.             nextsel -= 1
  392.             dir = "tracks/"+pack+"/"+flist[selection]
  393.             dir1 = "tracks/"+pack+"/"+flist[prevsel]
  394.             dir2 = "tracks/"+pack+"/"+flist[nextsel]
  395.             print("prevsel : ",prevsel)
  396.             print("selection : ",selection)
  397.             print("nextsel : ",nextsel)
  398.             edittilesel.scale_x = 1
  399.             edittilesel.scale_y = 1
  400.             tileprev1.scale_x = 1
  401.             tileprev1.scale_y = 1
  402.             tileprev2.scale_x = 1
  403.             tileprev2.scale_y = 1
  404.             edittilesel.image = pyglet.resource.image(dir)
  405.             tileprev1.image = pyglet.resource.image(dir1)
  406.             tileprev2.image = pyglet.resource.image(dir2)
  407.             edittilesel.scale_x = 64 / edittilesel.width
  408.             edittilesel.scale_y = 64 / edittilesel.height
  409.             tileprev1.scale_x = 64 / tileprev1.width
  410.             tileprev1.scale_y = 64 / tileprev1.height
  411.             tileprev2.scale_x = 64 / tileprev2.width
  412.             tileprev2.scale_y = 64 / tileprev2.height
  413.             tilesel = pack + "/" + flist[selection]
  414.     if symbol == key.P:
  415.         if nextsel != len(flist)-1:
  416.             selection += 1
  417.             prevsel += 1
  418.             nextsel += 1
  419.             dir = "tracks/"+pack+"/"+flist[selection]
  420.             dir1 = "tracks/"+pack+"/"+flist[prevsel]
  421.             dir2 = "tracks/"+pack+"/"+flist[nextsel]
  422.             print("prevsel : ",prevsel)
  423.             print("selection : ",selection)
  424.             print("nextsel : ",nextsel)
  425.             edittilesel.scale_x = 1
  426.             edittilesel.scale_y = 1
  427.             tileprev1.scale_x = 1
  428.             tileprev1.scale_y = 1
  429.             tileprev2.scale_x = 1
  430.             tileprev2.scale_y = 1
  431.             edittilesel.image = pyglet.resource.image(dir)
  432.             tileprev1.image = pyglet.resource.image(dir1)
  433.             tileprev2.image = pyglet.resource.image(dir2)
  434.             edittilesel.scale_x = 64 / edittilesel.width
  435.             edittilesel.scale_y = 64 / edittilesel.height
  436.             tileprev1.scale_x = 64 / tileprev1.width
  437.             tileprev1.scale_y = 64 / tileprev1.height
  438.             tileprev2.scale_x = 64 / tileprev2.width
  439.             tileprev2.scale_y = 64 / tileprev2.height
  440.             tilesel = pack + "/" + flist[selection]
  441.             print(tilesel)
  442.  
  443. #Start Game
  444.  
  445. if __name__ == "__main__":
  446.     init()
  447.     pyglet.clock.schedule_interval(update,1/120.0)
  448.     pyglet.app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement