From 5043e871a62c2c0d7d75065a7ec13284446bba51 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Thu, 2 Apr 2015 13:07:32 -0600 Subject: [PATCH 01/37] Create mc.py --- mc.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 mc.py diff --git a/mc.py b/mc.py new file mode 100644 index 00000000..69f1b8e2 --- /dev/null +++ b/mc.py @@ -0,0 +1,4 @@ +import main + +def world(): + main.Model.__init__() From 96d8a532ed3039af2b00cf8adf2b7b71ff33d985 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Thu, 2 Apr 2015 16:32:54 -0600 Subject: [PATCH 02/37] Update mc.py --- mc.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mc.py b/mc.py index 69f1b8e2..968d63da 100644 --- a/mc.py +++ b/mc.py @@ -1,4 +1,6 @@ import main -def world(): - main.Model.__init__() +print main.SECTOR_SIZE + +#def world(): + #main.Model.__init__() From 6f75b2386cef75c4df9294e8cf9fbe34cb50c9fb Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Thu, 2 Apr 2015 17:10:52 -0600 Subject: [PATCH 03/37] Update mc.py --- mc.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mc.py b/mc.py index 968d63da..a952ff50 100644 --- a/mc.py +++ b/mc.py @@ -1,6 +1,3 @@ import main -print main.SECTOR_SIZE - -#def world(): - #main.Model.__init__() +main.main() From c1659fe0e127052c718477279ab33876c04cf516 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Thu, 2 Apr 2015 18:27:28 -0600 Subject: [PATCH 04/37] Update mc.py --- mc.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mc.py b/mc.py index a952ff50..b4258544 100644 --- a/mc.py +++ b/mc.py @@ -1,3 +1,15 @@ import main main.main() + +""" +class World: + + def set_block(x, y, z, texture): + t = (x, y, z) + + textureToPass = main.GRASS + if isinstance(texture, str): + if texture = "GRASS": + +""" From f1203eaa013c1e0f5cabe58b5186ff603efa6030 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 3 Apr 2015 12:08:41 -0600 Subject: [PATCH 05/37] Update mc.py --- mc.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mc.py b/mc.py index b4258544..dee039c8 100644 --- a/mc.py +++ b/mc.py @@ -7,9 +7,14 @@ class World: def set_block(x, y, z, texture): t = (x, y, z) - - textureToPass = main.GRASS + texture.upper() if isinstance(texture, str): - if texture = "GRASS": - + if texture = "SAND": + textureToPass = main.SAND + elif texture = "BRICK": + textureToPass = main.BRICK + elif texture = "STONE": + textureToPass = main.STONE + else: + textureToPass = main.GRASS """ From f84b9441234ebeecbcd1283cebd30da021e321ef Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 3 Apr 2015 12:22:31 -0600 Subject: [PATCH 06/37] Update mc.py --- mc.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mc.py b/mc.py index dee039c8..cc02c14a 100644 --- a/mc.py +++ b/mc.py @@ -3,10 +3,14 @@ main.main() """ -class World: +class World(Model): + + def __init__(self): + super.__init__ def set_block(x, y, z, texture): t = (x, y, z) + Model.remove_block(t) texture.upper() if isinstance(texture, str): if texture = "SAND": From de1af3090e7a0d39ab6673f3aa4050782475705c Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 3 Apr 2015 15:30:27 -0600 Subject: [PATCH 07/37] Update mc.py --- mc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mc.py b/mc.py index cc02c14a..3f13e8a0 100644 --- a/mc.py +++ b/mc.py @@ -3,10 +3,10 @@ main.main() """ -class World(Model): +class World(Window): def __init__(self): - super.__init__ + super() def set_block(x, y, z, texture): t = (x, y, z) From 820fd41dec56f7d527fd074f9b5b85e3f859482e Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 3 Apr 2015 21:53:41 -0600 Subject: [PATCH 08/37] Update mc.py --- mc.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mc.py b/mc.py index 3f13e8a0..e3986186 100644 --- a/mc.py +++ b/mc.py @@ -9,16 +9,19 @@ def __init__(self): super() def set_block(x, y, z, texture): - t = (x, y, z) + t = x, y, z Model.remove_block(t) texture.upper() - if isinstance(texture, str): - if texture = "SAND": + if isinstance(texture, (basestring, int, float, long)): + if texture = "SAND" or texture == 1: textureToPass = main.SAND - elif texture = "BRICK": + elif texture = "BRICK" or texture == 2: textureToPass = main.BRICK - elif texture = "STONE": + elif texture = "STONE" or texture == 3: textureToPass = main.STONE else: textureToPass = main.GRASS + if isinstance(texture, tuple): + textureToPass = texture + Model.add_block(t, textureToPass) """ From 4ca740ec146ef8967a62116c11cf5cd2fa4eeaf8 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 17 Apr 2015 12:45:22 -0600 Subject: [PATCH 09/37] Remove Model.remove_block as Model.add_block does this already --- mc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mc.py b/mc.py index e3986186..23bf9831 100644 --- a/mc.py +++ b/mc.py @@ -10,7 +10,6 @@ def __init__(self): def set_block(x, y, z, texture): t = x, y, z - Model.remove_block(t) texture.upper() if isinstance(texture, (basestring, int, float, long)): if texture = "SAND" or texture == 1: From 586d733d5377b6a8ca9cc958c69f1162f56b9cde Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 17 Apr 2015 13:07:29 -0600 Subject: [PATCH 10/37] Update mc.py --- mc.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/mc.py b/mc.py index 23bf9831..2dd6c10f 100644 --- a/mc.py +++ b/mc.py @@ -4,23 +4,41 @@ """ class World(Window): - - def __init__(self): - super() - def set_block(x, y, z, texture): + def add_block(x, y, z, texture): t = x, y, z - texture.upper() + textureToPass = texture if isinstance(texture, (basestring, int, float, long)): - if texture = "SAND" or texture == 1: + if isinstance(texture, basestring): + texture.upper() + if texture == "SAND" or texture == 1: textureToPass = main.SAND - elif texture = "BRICK" or texture == 2: + elif texture == "BRICK" or texture == 2: textureToPass = main.BRICK - elif texture = "STONE" or texture == 3: + elif texture == "STONE" or texture == 3: textureToPass = main.STONE else: textureToPass = main.GRASS - if isinstance(texture, tuple): - textureToPass = texture + #if isinstance(texture, tuple): + #textureToPass = texture Model.add_block(t, textureToPass) + + def remove_block(x, y, z): + t = x, y, z + Modle.remove_block(t) + + def set_block(x, y, z, texture): + add_block(x, y, z, texture) + + def setFlying(fly): + World.flying = fly + + #def setStrafe(forwardBack, leftRight): + #World.strafe = [forwardBack, leftRight] + + def setPosition(x, y, z): + World.position = (x, y, z) + + def setRotation(xz, ra): + World.rotation = (xz, ra) """ From fedfc70012b9bf3683dade955a855646de453bb0 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 18 Apr 2015 19:47:44 -0600 Subject: [PATCH 11/37] Update mc.py, create .gitignore, test.py --- .gitignore | 2 ++ mc.py | 8 ++++---- test.py | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e6458330 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +*.pyc \ No newline at end of file diff --git a/mc.py b/mc.py index 2dd6c10f..2cbed304 100644 --- a/mc.py +++ b/mc.py @@ -1,9 +1,9 @@ import main -main.main() +#main.main() -""" -class World(Window): +#""" +class World(main.Window): def add_block(x, y, z, texture): t = x, y, z @@ -41,4 +41,4 @@ def setPosition(x, y, z): def setRotation(xz, ra): World.rotation = (xz, ra) -""" +#""" diff --git a/test.py b/test.py new file mode 100644 index 00000000..a4339767 --- /dev/null +++ b/test.py @@ -0,0 +1,5 @@ +import mc +import time + +world = mc.World() +time.sleep(20) From cc31d883214fb0d8b12edb30b4fca6d8d6fb720f Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 18 Apr 2015 20:23:46 -0600 Subject: [PATCH 12/37] Update .gitignore, main.py, mc.py --- .gitignore | 1 + main.py | 6 ++++++ mc.py | 15 +++++++-------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index e6458330..f1e08aab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *~ +*# *.pyc \ No newline at end of file diff --git a/main.py b/main.py index 6f962e33..de851465 100644 --- a/main.py +++ b/main.py @@ -889,6 +889,12 @@ def main(): setup() pyglet.app.run() +def main(window): + if isinstance (window, Window): + window.set_exclusive_mouse(True) + setup() + pyglet.app.run() + if __name__ == '__main__': main() diff --git a/mc.py b/mc.py index 2cbed304..c050d543 100644 --- a/mc.py +++ b/mc.py @@ -1,10 +1,8 @@ import main +import pyglet -#main.main() - -#""" class World(main.Window): - + def add_block(x, y, z, texture): t = x, y, z textureToPass = texture @@ -19,13 +17,11 @@ def add_block(x, y, z, texture): textureToPass = main.STONE else: textureToPass = main.GRASS - #if isinstance(texture, tuple): - #textureToPass = texture Model.add_block(t, textureToPass) def remove_block(x, y, z): t = x, y, z - Modle.remove_block(t) + Model.remove_block(t) def set_block(x, y, z, texture): add_block(x, y, z, texture) @@ -41,4 +37,7 @@ def setPosition(x, y, z): def setRotation(xz, ra): World.rotation = (xz, ra) -#""" + +def run(w): + if isinstance(w, (Window, World)): + main.main(w) From 2bc315ce281cc942b0c6c72d65c542384839da2f Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 18 Apr 2015 20:31:27 -0600 Subject: [PATCH 13/37] Update mc.py, test.py --- mc.py | 2 +- test.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mc.py b/mc.py index c050d543..64b67bd0 100644 --- a/mc.py +++ b/mc.py @@ -39,5 +39,5 @@ def setRotation(xz, ra): World.rotation = (xz, ra) def run(w): - if isinstance(w, (Window, World)): + if isinstance(w, (main.Window)): main.main(w) diff --git a/test.py b/test.py index a4339767..cd617a73 100644 --- a/test.py +++ b/test.py @@ -1,5 +1,4 @@ import mc -import time world = mc.World() -time.sleep(20) +mc.run(world) From c186ea933604cfbc385fc2f2df84ae37f9b4de70 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 18 Apr 2015 20:40:59 -0600 Subject: [PATCH 14/37] Update mc.py --- mc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mc.py b/mc.py index 64b67bd0..02105e42 100644 --- a/mc.py +++ b/mc.py @@ -1,5 +1,4 @@ import main -import pyglet class World(main.Window): From 810e944df6699a057889247eba211334e3003a7d Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 18 Apr 2015 20:46:48 -0600 Subject: [PATCH 15/37] Update mc.py --- mc.py | 59 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/mc.py b/mc.py index 02105e42..30f5391d 100644 --- a/mc.py +++ b/mc.py @@ -2,40 +2,43 @@ class World(main.Window): - def add_block(x, y, z, texture): - t = x, y, z - textureToPass = texture - if isinstance(texture, (basestring, int, float, long)): - if isinstance(texture, basestring): - texture.upper() - if texture == "SAND" or texture == 1: - textureToPass = main.SAND - elif texture == "BRICK" or texture == 2: - textureToPass = main.BRICK - elif texture == "STONE" or texture == 3: - textureToPass = main.STONE - else: - textureToPass = main.GRASS - Model.add_block(t, textureToPass) + def function_to_make_code_work(): + a = 0 + + #def add_block(x, y, z, texture): + #t = x, y, z + #textureToPass = texture + #if isinstance(texture, (basestring, int, float, long)): + #if isinstance(texture, basestring): + #texture.upper() + #if texture == "SAND" or texture == 1: + #textureToPass = main.SAND + #elif texture == "BRICK" or texture == 2: + #textureToPass = main.BRICK + #elif texture == "STONE" or texture == 3: + #textureToPass = main.STONE + #else: + #textureToPass = main.GRASS + #Model.add_block(t, textureToPass) - def remove_block(x, y, z): - t = x, y, z - Model.remove_block(t) + #def remove_block(x, y, z): + #t = x, y, z + #Model.remove_block(t) - def set_block(x, y, z, texture): - add_block(x, y, z, texture) + #def set_block(x, y, z, texture): + #add_block(x, y, z, texture) - def setFlying(fly): - World.flying = fly + #def setFlying(fly): + #World.flying = fly - #def setStrafe(forwardBack, leftRight): - #World.strafe = [forwardBack, leftRight] + ##def setStrafe(forwardBack, leftRight): + ##World.strafe = [forwardBack, leftRight] - def setPosition(x, y, z): - World.position = (x, y, z) + #def setPosition(x, y, z): + #World.position = (x, y, z) - def setRotation(xz, ra): - World.rotation = (xz, ra) + #def setRotation(xz, ra): + #World.rotation = (xz, ra) def run(w): if isinstance(w, (main.Window)): From 873bb02834064be87e0b46677077998dbb6c585c Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sun, 19 Apr 2015 19:56:45 -0600 Subject: [PATCH 16/37] Update main.py, mc. py --- main.py | 2 +- mc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index de851465..40820004 100644 --- a/main.py +++ b/main.py @@ -889,7 +889,7 @@ def main(): setup() pyglet.app.run() -def main(window): +def mainWindow(window): if isinstance (window, Window): window.set_exclusive_mouse(True) setup() diff --git a/mc.py b/mc.py index 30f5391d..433acaae 100644 --- a/mc.py +++ b/mc.py @@ -42,4 +42,4 @@ def function_to_make_code_work(): def run(w): if isinstance(w, (main.Window)): - main.main(w) + main.mainWindow(w) From a2ae2f27e24010e3e0a1ce0d2f80c7b9e7cbe1de Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Mon, 20 Apr 2015 12:05:07 -0600 Subject: [PATCH 17/37] Update mc.py --- mc.py | 59 ++++++++++++++++++++++++++++------------------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/mc.py b/mc.py index 433acaae..ad63e367 100644 --- a/mc.py +++ b/mc.py @@ -2,43 +2,40 @@ class World(main.Window): - def function_to_make_code_work(): - a = 0 - - #def add_block(x, y, z, texture): - #t = x, y, z - #textureToPass = texture - #if isinstance(texture, (basestring, int, float, long)): - #if isinstance(texture, basestring): - #texture.upper() - #if texture == "SAND" or texture == 1: - #textureToPass = main.SAND - #elif texture == "BRICK" or texture == 2: - #textureToPass = main.BRICK - #elif texture == "STONE" or texture == 3: - #textureToPass = main.STONE - #else: - #textureToPass = main.GRASS - #Model.add_block(t, textureToPass) + def add_block(x, y, z, texture): + t = x, y, z + textureToPass = texture + if isinstance(texture, (basestring, int, float, long)): + if isinstance(texture, basestring): + texture.upper() + if texture == "SAND" or texture == 1: + textureToPass = main.SAND + elif texture == "BRICK" or texture == 2: + textureToPass = main.BRICK + elif texture == "STONE" or texture == 3: + textureToPass = main.STONE + else: + textureToPass = main.GRASS + Model.add_block(t, textureToPass) - #def remove_block(x, y, z): - #t = x, y, z - #Model.remove_block(t) + def remove_block(x, y, z): + t = x, y, z + Model.remove_block(t) - #def set_block(x, y, z, texture): - #add_block(x, y, z, texture) + def set_block(x, y, z, texture): + add_block(x, y, z, texture) - #def setFlying(fly): - #World.flying = fly + def setFlying(fly): + World.flying = fly - ##def setStrafe(forwardBack, leftRight): - ##World.strafe = [forwardBack, leftRight] + #def setStrafe(forwardBack, leftRight): + #World.strafe = [forwardBack, leftRight] - #def setPosition(x, y, z): - #World.position = (x, y, z) + def setPosition(x, y, z): + World.position = (x, y, z) - #def setRotation(xz, ra): - #World.rotation = (xz, ra) + def setRotation(xz, ra): + World.rotation = (xz, ra) def run(w): if isinstance(w, (main.Window)): From f7f3119bf7c903e704429790c9f3a7965de6b5d4 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Mon, 20 Apr 2015 12:07:54 -0600 Subject: [PATCH 18/37] Update main.py --- main.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.py b/main.py index 40820004..008c2388 100644 --- a/main.py +++ b/main.py @@ -842,6 +842,12 @@ def draw_reticle(self): """ glColor3d(0, 0, 0) self.reticle.draw(GL_LINES) + + def getModel(self): + """ Return the model obejct associated with the Window + + """ + return self.model def setup_fog(): From 0801254de5cc1c02e6297b4550a4e60f49d11948 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Mon, 20 Apr 2015 12:09:12 -0600 Subject: [PATCH 19/37] Update main.py --- main.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/main.py b/main.py index 008c2388..4200db14 100644 --- a/main.py +++ b/main.py @@ -842,13 +842,6 @@ def draw_reticle(self): """ glColor3d(0, 0, 0) self.reticle.draw(GL_LINES) - - def getModel(self): - """ Return the model obejct associated with the Window - - """ - return self.model - def setup_fog(): """ Configure the OpenGL fog properties. From a31cd67acea780b575be6aa540d750673102abd3 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Mon, 20 Apr 2015 12:12:35 -0600 Subject: [PATCH 20/37] Update mc.py --- mc.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mc.py b/mc.py index ad63e367..d51deaed 100644 --- a/mc.py +++ b/mc.py @@ -1,6 +1,8 @@ import main class World(main.Window): + + def add_block(x, y, z, texture): t = x, y, z @@ -16,11 +18,11 @@ def add_block(x, y, z, texture): textureToPass = main.STONE else: textureToPass = main.GRASS - Model.add_block(t, textureToPass) + model.add_block(t, textureToPass) def remove_block(x, y, z): t = x, y, z - Model.remove_block(t) + model.remove_block(t) def set_block(x, y, z, texture): add_block(x, y, z, texture) From 0a81857396574f27a61d132ef703a5cdac6f5923 Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Mon, 20 Apr 2015 12:15:48 -0600 Subject: [PATCH 21/37] Update mc.py --- mc.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/mc.py b/mc.py index d51deaed..b822efbe 100644 --- a/mc.py +++ b/mc.py @@ -1,8 +1,6 @@ import main class World(main.Window): - - def add_block(x, y, z, texture): t = x, y, z @@ -18,27 +16,27 @@ def add_block(x, y, z, texture): textureToPass = main.STONE else: textureToPass = main.GRASS - model.add_block(t, textureToPass) + super.model.add_block(t, textureToPass) def remove_block(x, y, z): t = x, y, z - model.remove_block(t) + super.model.remove_block(t) def set_block(x, y, z, texture): add_block(x, y, z, texture) def setFlying(fly): - World.flying = fly + super.flying = fly #def setStrafe(forwardBack, leftRight): #World.strafe = [forwardBack, leftRight] def setPosition(x, y, z): - World.position = (x, y, z) + super.position = (x, y, z) def setRotation(xz, ra): - World.rotation = (xz, ra) + super.rotation = (xz, ra) -def run(w): - if isinstance(w, (main.Window)): - main.mainWindow(w) +def run(world): + if isinstance(world, (main.Window)): + main.mainWindow(world) From 288bcf2ce49c840a9b5f3003b7ca842d0e705cd9 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Thu, 23 Apr 2015 20:56:03 -0600 Subject: [PATCH 22/37] New methods in main.Window, add mc.py, test.py --- main.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++------ mc.py | 40 ++++++++++++++++++++++++++++++++++++++++ test.py | 4 ++++ 3 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 mc.py create mode 100644 test.py diff --git a/main.py b/main.py index 6f962e33..d5b42f81 100644 --- a/main.py +++ b/main.py @@ -149,6 +149,9 @@ def __init__(self): self._initialize() + def initialize(self): + self._initialize() + def _initialize(self): """ Initialize the world by placing all the blocks. @@ -430,6 +433,20 @@ class Window(pyglet.window.Window): def __init__(self, *args, **kwargs): super(Window, self).__init__(*args, **kwargs) + self.walking_speed = WALKING_SPEED + + self.flying_speed = FLYING_SPEED + + self.gravity = GRAVITY + + self.max_jump_height = MAX_JUMP_HEIGHT + + self.jump_speed = JUMP_SPEED + + self.terminal_velocity = TERMINAL_VELOCITY + + self.player_height = PLAYER_HEIGHT + # Whether or not the window exclusively captures the mouse. self.exclusive = False @@ -495,6 +512,29 @@ def set_exclusive_mouse(self, exclusive): """ super(Window, self).set_exclusive_mouse(exclusive) self.exclusive = exclusive + + def set_walking_speed(self, speed): + self.walking_speed = speed + + def set_flying_speed(self, speed): + self.flying_speed = speed + + def set_gravity(self, g): + self.gravity = g + self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) + + def set_max_jump_height(self, height): + self.max_jump_height = height + self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) + + def set_jump_speed(self, speed): + self.jump_speed = speed + + def set_terminal_velocity(self, velocity): + self.terminal_velocity = velocity + + def set_player_height(self, height): + self.player_height = height def get_sight_vector(self): """ Returns the current line of sight vector indicating the direction @@ -585,7 +625,7 @@ def _update(self, dt): """ # walking - speed = FLYING_SPEED if self.flying else WALKING_SPEED + speed = self.flying_speed if self.flying else self.walking_speed d = dt * speed # distance covered this tick. dx, dy, dz = self.get_motion_vector() # New position in space, before accounting for gravity. @@ -595,12 +635,12 @@ def _update(self, dt): # Update your vertical speed: if you are falling, speed up until you # hit terminal velocity; if you are jumping, slow down until you # start falling. - self.dy -= dt * GRAVITY - self.dy = max(self.dy, -TERMINAL_VELOCITY) + self.dy -= dt * self.gravity + self.dy = max(self.dy, -(self.terminal_velocity)) dy += self.dy * dt # collisions x, y, z = self.position - x, y, z = self.collide((x + dx, y + dy, z + dz), PLAYER_HEIGHT) + x, y, z = self.collide((x + dx, y + dy, z + dz), self.player_height) self.position = (x, y, z) def collide(self, position, height): @@ -722,7 +762,7 @@ def on_key_press(self, symbol, modifiers): self.strafe[1] += 1 elif symbol == key.SPACE: if self.dy == 0: - self.dy = JUMP_SPEED + self.dy = self.jump_speed elif symbol == key.ESCAPE: self.set_exclusive_mouse(False) elif symbol == key.TAB: @@ -843,7 +883,6 @@ def draw_reticle(self): glColor3d(0, 0, 0) self.reticle.draw(GL_LINES) - def setup_fog(): """ Configure the OpenGL fog properties. @@ -889,6 +928,12 @@ def main(): setup() pyglet.app.run() +def main_window(window): + if isinstance (window, Window): + window.set_exclusive_mouse(True) + setup() + pyglet.app.run() + if __name__ == '__main__': main() diff --git a/mc.py b/mc.py new file mode 100644 index 00000000..da0a1aa8 --- /dev/null +++ b/mc.py @@ -0,0 +1,40 @@ +import main + +GRASS = main.GRASS +SAND = main.SAND +BRICK = main.BRICK +STONE = main.STONE + +class World (main.Window): + + def __init__(self): + main.Window.__init__(self, width=800, height=600, caption='Pyglet', resizable=True) + + def add_block(self, x, y, z, texture): + position = (x, y - 1, z) + if isinstance(texture, (str, int, float, long)): + if isinstance(texture, str): + texture = texture.upper() + if texture == "SAND" or texture == 1: + texture = SAND + elif texture == "BRICK" or texture == 2: + texture = BRICK + elif texture == "STONE" or texture == 3: + texture = STONE + else: + texture = GRASS + self.model.add_block(position, texture) + + def remove_block(self, x, y, z): + position = (x, y - 1, z) + self.model.remove_block(position) + + def set_block(self, x, y, z, texture): + self.add_block(x, y, z, texture) + +def run(world): + if isinstance(world, main.Window): + main.main_window(world) + +def normal_world(): + main.main() diff --git a/test.py b/test.py new file mode 100644 index 00000000..cd617a73 --- /dev/null +++ b/test.py @@ -0,0 +1,4 @@ +import mc + +world = mc.World() +mc.run(world) From d620df98e8c440c2a1a9789b63afad583f38fbd2 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Thu, 23 Apr 2015 20:57:32 -0600 Subject: [PATCH 23/37] Add .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..25134b3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*# +*~ +*.pyc \ No newline at end of file From 314702b012e9e9a120a1788db8f92aa16adc93da Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Thu, 23 Apr 2015 21:13:11 -0600 Subject: [PATCH 24/37] Remove public initialize function in Model that I had added --- main.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/main.py b/main.py index d5b42f81..a7ec6d9a 100644 --- a/main.py +++ b/main.py @@ -149,9 +149,6 @@ def __init__(self): self._initialize() - def initialize(self): - self._initialize() - def _initialize(self): """ Initialize the world by placing all the blocks. From 533895bd6c27174aeb7b2d3a6ebe5751fd05df4f Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Fri, 24 Apr 2015 07:21:09 -0600 Subject: [PATCH 25/37] Update test.py --- test.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test.py b/test.py index cd617a73..fb92c54a 100644 --- a/test.py +++ b/test.py @@ -1,4 +1,6 @@ import mc -world = mc.World() -mc.run(world) +mc.normal_world() + +#world = mc.World() +#mc.run(world) From 4deac376b4ea733a47d20d73228cb99048a355d6 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Fri, 24 Apr 2015 10:03:50 -0600 Subject: [PATCH 26/37] Return world in main_window method --- main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main.py b/main.py index a7ec6d9a..7c7661fb 100644 --- a/main.py +++ b/main.py @@ -930,6 +930,7 @@ def main_window(window): window.set_exclusive_mouse(True) setup() pyglet.app.run() + return window if __name__ == '__main__': From 8750d35cdfd47c82b6f64848bec8ab4eae7846a7 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sat, 25 Apr 2015 20:22:34 -0600 Subject: [PATCH 27/37] Update main.py, mc.py, test.py --- main.py | 1 - mc.py | 4 +++- test.py | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index 7c7661fb..a7ec6d9a 100644 --- a/main.py +++ b/main.py @@ -930,7 +930,6 @@ def main_window(window): window.set_exclusive_mouse(True) setup() pyglet.app.run() - return window if __name__ == '__main__': diff --git a/mc.py b/mc.py index da0a1aa8..dd38979c 100644 --- a/mc.py +++ b/mc.py @@ -37,4 +37,6 @@ def run(world): main.main_window(world) def normal_world(): - main.main() + w = World() + main.main_window(w) + return w diff --git a/test.py b/test.py index fb92c54a..783389b8 100644 --- a/test.py +++ b/test.py @@ -1,6 +1,8 @@ import mc -mc.normal_world() - -#world = mc.World() -#mc.run(world) +world = mc.normal_world() +print(world.max_jump_height) +print(world.jump_speed) +world.set_max_jump_height(10) +print(world.max_jump_height) +print(world.jump_speed) From 41602f00f53a84cf344f6aef5d2c9886b1a6a6b1 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Sun, 26 Apr 2015 12:53:20 -0600 Subject: [PATCH 28/37] Update mc.py, test.py --- mc.py | 4 +--- test.py | 7 +------ 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/mc.py b/mc.py index dd38979c..4436010c 100644 --- a/mc.py +++ b/mc.py @@ -37,6 +37,4 @@ def run(world): main.main_window(world) def normal_world(): - w = World() - main.main_window(w) - return w + main.main() \ No newline at end of file diff --git a/test.py b/test.py index 783389b8..4e24d843 100644 --- a/test.py +++ b/test.py @@ -1,8 +1,3 @@ import mc -world = mc.normal_world() -print(world.max_jump_height) -print(world.jump_speed) -world.set_max_jump_height(10) -print(world.max_jump_height) -print(world.jump_speed) +mc.normal_world() From cc643a880fcbb87f84c9a65ca37399a3c1d9c17a Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Mon, 27 Apr 2015 19:52:12 -0600 Subject: [PATCH 29/37] Update test.py --- test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test.py b/test.py index 4e24d843..c59f3c25 100644 --- a/test.py +++ b/test.py @@ -1,3 +1,5 @@ import mc mc.normal_world() +#world = mc.World() +#mc.run(world) From 7e4f106eda38d57e9534dae3ca9a134d003f45cb Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Sat, 23 May 2015 18:56:52 -0600 Subject: [PATCH 30/37] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 564d4076..4cedf62d 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ use / configure to setup a world and run it. Something along these lines... The API could contain functionality for the following: -- Easily configurable parameters like gravity, jump velocity, walking speed, etc. +- Easily configurable parameters like gravity, jump velocity, walking speed, etc. :white_check_mark: - Hooks for terrain generation. ## How to Run From 82ea746b47fa316936c379c70940152428778301 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Tue, 13 Oct 2015 13:23:02 -0600 Subject: [PATCH 31/37] Add texture_original --- texture_original.png | Bin 0 -> 5257 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 texture_original.png diff --git a/texture_original.png b/texture_original.png new file mode 100644 index 0000000000000000000000000000000000000000..9d05a7e2db1eecfe427228730ba1a9d7f5e38515 GIT binary patch literal 5257 zcmc&%X;4#Hln&B>+Ks5FfGnZgMqEKeKm>w{sJMV4iwJ}WB1%}qhzQvfT2>({Aj%d+ zk)4EHgb-0Kl&s|9KS3b`Zi>jVgB>&fBYuDFW5Z)=7c+0RX_3bq*(vx!n7*nBx)T zO%0E=1oyl-96xX(A#LBq%?87X$_y~OJjTOx(%D(92;p-oESJWfB5d^k;-e`c_+_oG3epmvP?ye$U`TBmJXWrg2m$8 zZ5Xm;1Pvx#D6J7(fijHt@1Fr6oZF{10oDMH0sw3O2~!^c_yuqu09f_?|JwNf@XP-( z;Qx&uOY*o;APBZg62_+=ope~NYuk*mz007}L|^vW>}YNZ?k@Ic%RAtU2_z@Fw<=!) zEAz!?Y-7X_@b5I4!r>PXjW>zWHkP1G%*m&d5O+6M75Md&)Sfr~#zx&r@I5xVOqZ)D zJZWb^w6}W++$ddE(PnN-%mdQHNGKhMj~*^fI?*{G_Ly+bN@bvN7{ej67(hUCE$4cgjbyf2q( z`h^`6_|&1i@$fc~I`eFXky1l-^|u|u2d7S*it%=Jtzin0NMuy(%uE6!8-zSEM79y= zg#L@Y%B1KauLdy-6d)fY*{0t^^_0oIC~SGJaFe9!pm1~mVUO2#3mr(_x`)UJzN;L80sTL9Zm@?35kNrH<_dY)w${?=ES-SlJRUU|plKSbks0Eq_t| zpwsD_NmI~G_V)IjASZ#?MsL@?ednxcQWVCnf9?)GDJdyZ@q0ZyZZ)}2COMUk0htBn z8w^CFDAYczp*fAs6@dh7QqH;C$wy)jMSu?OmYd<+K_L$LDQaq}$_=&U=0h=xN1EQ@ zU#eUanwx&^V6=CBj=&Z6N6>l;??IYx2XPibp^|e8%AR*^wV5K3=md5oj5g*Mdkzsn zG~ecTSkH7x`Fn9rOsOlb0B6QX(=dkXPSGS<&QWPb-JrFdz>cr(=Oj5AhkVw&onj!8 zRzNL6gEsJcUve&Q-=iHfX8Jbs0bQhG!JRCGM&l4mh_yY5As zql}3fNFB2`>bR@_Or`B3@v@1}C{gJyniF}K@vd|n%8L4htOO5EZzIwlsB9s7N$v4_e|1Sc&{Sv=>h-!N zKCN3I9z}GW!feW-3dAje2-A8Dj5TUG{x4Bp3;S&XeQlD2U6j0#w8mrfxKqgU`p;64k!|mO;xsZUpM5vK*L+})V9p|dtUMxKWBK{>XJ9+V#w?!~_w?!0t=~yaiSYh`t$`-{Gejm6^vYHKl3&1*^QnCqX54=Tkq!uqtBx~cpCG> zLP?&PYFTBLg_3xYDs!B=+1DtWj%RtKrDlILJyK8;A3RbWi-%InTeyBUGGq!3n&H>N z-*|a?GRhh?CYNtHmRvkC*ckeZ7F0DTtZ^0duGHB{*FMA_>ektnjRCY zBdmj<`Ckj7k*v%>J=SPG)JoaK&g%*8%VfA}H^2H2JJ%6fHYKX*Jkm-rXrrfPRfm*K zCd(9N^k?2YMGDS|*0kOh_%RxASch>U&a|`|^xy~dhBvK3Z_W=D86-Ex7Wh;N6dK6+ z{wmWZF^mnWnKX9&NrDZhDrOlKf9eAL20ws&2VG#L@qS=oXHA-QoNmeQe9e#C=tjevJH@K#8(ra; zMsnWGN7P*b_E#ppg<$Rol&x|oHq?O|z?gMnqY4R7Fy#kVB*hEAy_jCx>YK2<9QI#o zexq28B@pW%x-&DVAzs#lcfH7>Zl+Yn>?g zF=FLO=-QI~<(f`VN$Oqla3pW*{x0fD0aAiYyqf7baQ2&8E_H=;-HhImmO@*0N_2HZ z&3$bNFtaW@d<|KT%4n}wYCUam1l3MCsweClX$FbDAw{~EuGnc}&x2w2=BXByR{*Ou ztg&`gbs^U5zC}d)dZC1|SA<0dTRC%!-?A;5-g@N(`_vIix~Rl{iWV~lUadkw)FVE7 z`gLH~3vT;EBlAIZ_<_tDMzde?t#z@r%b{icEAHu?RO7BxI$3Z-KH>7B=Y`Iomw4zg zMP-I$> z8=U2e6S2_jLGsAm4h*(mNAhBd4V63t`rMF()el=<*Z6`!u%p|2uq6o5n7OPjc5B?7 zu?uCl?CaamE8}*}dR>w3g6hMJ##ZIrB$}nQ|MH{k<-jDZ^)QAy`t{@*Dck}?czn-M zTsW_={R~ehPqTbheY?t*aw4205tB;dCT}2f%7^XASIlhkh0lPDi3mZR z%U^Ih&NZ~R+O49Q$C@5Lf$B*%oC$Epm7o5`D=D@y_CY3}*%wkDW*@EuJIlc&t>2=! z<+-<8zHp`TcDKOk1x{k4;A%o5A(Y&clNfB|^$yQ8^}&ZfMRZ~~ z;QXqps0|ULVW;p&H3*5ABv2-ZSq(oO_BZ)J)f?L;d)MzTMNo%s}QC$VUI=`B4x zI1g2(&YjZ5*qn(PchdPt4rU*~CBLWX+tVcLPM6;s1A&h6{JBzyI$a48_d*fQ%4O$K;?0=z%^txCjR%P$)VQ z9bgs^Ex8{R)&wdy`z!Wj>mFQFzD|~S15=fsWw=Fcz-$j0guBQUN%{4mp154P8*fQV z%LUXg)(G!;KDfEGnEJf4R8QYu=mI@s7Qn7i7%4Ln{{1*b@U{jtVQKlS91H8sEu(To zQp0_yU3Dv0KT%Wyo!d>?*>9YI+6t=-;-$Yj-z_;jQW(YZEoDQEs6}t5+3W~(WhsW$ zD3J|r&6x^|$B_J<_CV{R2?1rSNH%Jw&TIRH9J})bmgP0U?n=uQQ@@U|GsD@^rTdfF zaT{1_{ItP8u-KdEnfD>?HsYP3QM0LgS$n#BDch{n^ zg0q6*%lTZfA^jOooFng+wft!AD@2Tf1anTZ0<%Ek`~Z}2qTxuj z&vSuBv5amJEq(Y2Hgq$5&A8ft;8(5$g){ghp11u)Y|;==>h`<3uQ+A-U$w1o<$M3R zac(;T(PfO8QHqov?V@5fm8fXyKEsZEdFhpN-m@BbYY@)~bavYze%rl(s{+|74JJ2( zX@z>P)oaz3^IEqy)gAy9>%4lUGQGldR6xv;+hz2x7z`AH*!%tnj3f<4N3!rC+I zzY*RCo%idatUp*!WUEaC6}yxVMBqvc=c-*Ph%VceLyFO9OU=$Y;as1v})v#|6r(2H=zz6E!FgZ0daIe zp;05i<0@*BTW{?veqGkDS^gyqr?rG^@~uA#j+>}xnf;CTLy4R8jlXo<#~{ID+vs!T zeIcrRR%2&^Ac40tk*CLl1?Hyvh#Sf}s^qRCT1Zw@tD$#Qhqu^*G4v z2ngDQW6%ViM0sAkE#ciuUR+|JaF#qEfldl9UE2O}oRDaDa2Tksjxdh)Zm33c>tT#& z?;vqy{^w$MzKx1r@x=!HKP!`^yp_8~P!%EDUfFmq~(lV&x~_Uy>4xZJv++PF>FoROl^P+p$$ zQ?|Co?JP4L=I(XNT4)K3w`p5y)Mqv?`v$ibvQtr7+^&AfF(e45?;?BW7AAykR zB`%ogM1Q-7CujG6Y0X7iMI+~!JP0kYS5IlGwL>^}BUFtq74ugodlwAyrUN6pG8@ho zup_NZ5VZStcSm7y;9#~-pN%v-ZL#1kud>bMV1v_Y9Kq3(`6tExTh30wQttt5W; z{_=EnB%PiP2`#xu>%ZPWPCzAdKWhg@=Qzj+Z0%Le)PfLc<|~OTOl*jset;Nr^|$|~ z;zokh9%xqB-1ie;S`BL~(%mn)8WV@dsO_6(xOd*vxKoF2-FC{g8%YPs>EGHRw17w< zO}q@{@XCB-;*4}BA8^rVmX>z!>54%aiVKX922iR#Ehy~S%R~4grP6!3-NP1$1)pyo tZXY)`ICb#Xax+y7?`HqVj7PH^u;uCX Date: Tue, 13 Oct 2015 13:44:08 -0600 Subject: [PATCH 32/37] Add main_original.py --- main_original.py | 936 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 936 insertions(+) create mode 100644 main_original.py diff --git a/main_original.py b/main_original.py new file mode 100644 index 00000000..a7ec6d9a --- /dev/null +++ b/main_original.py @@ -0,0 +1,936 @@ +import math +import random +import time + +from collections import deque +from pyglet import image +from pyglet.gl import * +from pyglet.graphics import TextureGroup +from pyglet.window import key, mouse + +TICKS_PER_SEC = 60 + +# Size of sectors used to ease block loading. +SECTOR_SIZE = 16 + +WALKING_SPEED = 5 +FLYING_SPEED = 15 + +GRAVITY = 20.0 +MAX_JUMP_HEIGHT = 1.0 # About the height of a block. +# To derive the formula for calculating jump speed, first solve +# v_t = v_0 + a * t +# for the time at which you achieve maximum height, where a is the acceleration +# due to gravity and v_t = 0. This gives: +# t = - v_0 / a +# Use t and the desired MAX_JUMP_HEIGHT to solve for v_0 (jump speed) in +# s = s_0 + v_0 * t + (a * t^2) / 2 +JUMP_SPEED = math.sqrt(2 * GRAVITY * MAX_JUMP_HEIGHT) +TERMINAL_VELOCITY = 50 + +PLAYER_HEIGHT = 2 + +def cube_vertices(x, y, z, n): + """ Return the vertices of the cube at position x, y, z with size 2*n. + + """ + return [ + x-n,y+n,z-n, x-n,y+n,z+n, x+n,y+n,z+n, x+n,y+n,z-n, # top + x-n,y-n,z-n, x+n,y-n,z-n, x+n,y-n,z+n, x-n,y-n,z+n, # bottom + x-n,y-n,z-n, x-n,y-n,z+n, x-n,y+n,z+n, x-n,y+n,z-n, # left + x+n,y-n,z+n, x+n,y-n,z-n, x+n,y+n,z-n, x+n,y+n,z+n, # right + x-n,y-n,z+n, x+n,y-n,z+n, x+n,y+n,z+n, x-n,y+n,z+n, # front + x+n,y-n,z-n, x-n,y-n,z-n, x-n,y+n,z-n, x+n,y+n,z-n, # back + ] + + +def tex_coord(x, y, n=4): + """ Return the bounding vertices of the texture square. + + """ + m = 1.0 / n + dx = x * m + dy = y * m + return dx, dy, dx + m, dy, dx + m, dy + m, dx, dy + m + + +def tex_coords(top, bottom, side): + """ Return a list of the texture squares for the top, bottom and side. + + """ + top = tex_coord(*top) + bottom = tex_coord(*bottom) + side = tex_coord(*side) + result = [] + result.extend(top) + result.extend(bottom) + result.extend(side * 4) + return result + + +TEXTURE_PATH = 'texture.png' + +GRASS = tex_coords((1, 0), (0, 1), (0, 0)) +SAND = tex_coords((1, 1), (1, 1), (1, 1)) +BRICK = tex_coords((2, 0), (2, 0), (2, 0)) +STONE = tex_coords((2, 1), (2, 1), (2, 1)) + +FACES = [ + ( 0, 1, 0), + ( 0,-1, 0), + (-1, 0, 0), + ( 1, 0, 0), + ( 0, 0, 1), + ( 0, 0,-1), +] + + +def normalize(position): + """ Accepts `position` of arbitrary precision and returns the block + containing that position. + + Parameters + ---------- + position : tuple of len 3 + + Returns + ------- + block_position : tuple of ints of len 3 + + """ + x, y, z = position + x, y, z = (int(round(x)), int(round(y)), int(round(z))) + return (x, y, z) + + +def sectorize(position): + """ Returns a tuple representing the sector for the given `position`. + + Parameters + ---------- + position : tuple of len 3 + + Returns + ------- + sector : tuple of len 3 + + """ + x, y, z = normalize(position) + x, y, z = x / SECTOR_SIZE, y / SECTOR_SIZE, z / SECTOR_SIZE + return (x, 0, z) + + +class Model(object): + + def __init__(self): + + # A Batch is a collection of vertex lists for batched rendering. + self.batch = pyglet.graphics.Batch() + + # A TextureGroup manages an OpenGL texture. + self.group = TextureGroup(image.load(TEXTURE_PATH).get_texture()) + + # A mapping from position to the texture of the block at that position. + # This defines all the blocks that are currently in the world. + self.world = {} + + # Same mapping as `world` but only contains blocks that are shown. + self.shown = {} + + # Mapping from position to a pyglet `VertextList` for all shown blocks. + self._shown = {} + + # Mapping from sector to a list of positions inside that sector. + self.sectors = {} + + # Simple function queue implementation. The queue is populated with + # _show_block() and _hide_block() calls + self.queue = deque() + + self._initialize() + + def _initialize(self): + """ Initialize the world by placing all the blocks. + + """ + n = 80 # 1/2 width and height of world + s = 1 # step size + y = 0 # initial y height + for x in xrange(-n, n + 1, s): + for z in xrange(-n, n + 1, s): + # create a layer stone an grass everywhere. + self.add_block((x, y - 2, z), GRASS, immediate=False) + self.add_block((x, y - 3, z), STONE, immediate=False) + if x in (-n, n) or z in (-n, n): + # create outer walls. + for dy in xrange(-2, 3): + self.add_block((x, y + dy, z), STONE, immediate=False) + + # generate the hills randomly + o = n - 10 + for _ in xrange(120): + a = random.randint(-o, o) # x position of the hill + b = random.randint(-o, o) # z position of the hill + c = -1 # base of the hill + h = random.randint(1, 6) # height of the hill + s = random.randint(4, 8) # 2 * s is the side length of the hill + d = 1 # how quickly to taper off the hills + t = random.choice([GRASS, SAND, BRICK]) + for y in xrange(c, c + h): + for x in xrange(a - s, a + s + 1): + for z in xrange(b - s, b + s + 1): + if (x - a) ** 2 + (z - b) ** 2 > (s + 1) ** 2: + continue + if (x - 0) ** 2 + (z - 0) ** 2 < 5 ** 2: + continue + self.add_block((x, y, z), t, immediate=False) + s -= d # decrement side lenth so hills taper off + + def hit_test(self, position, vector, max_distance=8): + """ Line of sight search from current position. If a block is + intersected it is returned, along with the block previously in the line + of sight. If no block is found, return None, None. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position to check visibility from. + vector : tuple of len 3 + The line of sight vector. + max_distance : int + How many blocks away to search for a hit. + + """ + m = 8 + x, y, z = position + dx, dy, dz = vector + previous = None + for _ in xrange(max_distance * m): + key = normalize((x, y, z)) + if key != previous and key in self.world: + return key, previous + previous = key + x, y, z = x + dx / m, y + dy / m, z + dz / m + return None, None + + def exposed(self, position): + """ Returns False is given `position` is surrounded on all 6 sides by + blocks, True otherwise. + + """ + x, y, z = position + for dx, dy, dz in FACES: + if (x + dx, y + dy, z + dz) not in self.world: + return True + return False + + def add_block(self, position, texture, immediate=True): + """ Add a block with the given `texture` and `position` to the world. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position of the block to add. + texture : list of len 3 + The coordinates of the texture squares. Use `tex_coords()` to + generate. + immediate : bool + Whether or not to draw the block immediately. + + """ + if position in self.world: + self.remove_block(position, immediate) + self.world[position] = texture + self.sectors.setdefault(sectorize(position), []).append(position) + if immediate: + if self.exposed(position): + self.show_block(position) + self.check_neighbors(position) + + def remove_block(self, position, immediate=True): + """ Remove the block at the given `position`. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position of the block to remove. + immediate : bool + Whether or not to immediately remove block from canvas. + + """ + del self.world[position] + self.sectors[sectorize(position)].remove(position) + if immediate: + if position in self.shown: + self.hide_block(position) + self.check_neighbors(position) + + def check_neighbors(self, position): + """ Check all blocks surrounding `position` and ensure their visual + state is current. This means hiding blocks that are not exposed and + ensuring that all exposed blocks are shown. Usually used after a block + is added or removed. + + """ + x, y, z = position + for dx, dy, dz in FACES: + key = (x + dx, y + dy, z + dz) + if key not in self.world: + continue + if self.exposed(key): + if key not in self.shown: + self.show_block(key) + else: + if key in self.shown: + self.hide_block(key) + + def show_block(self, position, immediate=True): + """ Show the block at the given `position`. This method assumes the + block has already been added with add_block() + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position of the block to show. + immediate : bool + Whether or not to show the block immediately. + + """ + texture = self.world[position] + self.shown[position] = texture + if immediate: + self._show_block(position, texture) + else: + self._enqueue(self._show_block, position, texture) + + def _show_block(self, position, texture): + """ Private implementation of the `show_block()` method. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position of the block to show. + texture : list of len 3 + The coordinates of the texture squares. Use `tex_coords()` to + generate. + + """ + x, y, z = position + vertex_data = cube_vertices(x, y, z, 0.5) + texture_data = list(texture) + # create vertex list + # FIXME Maybe `add_indexed()` should be used instead + self._shown[position] = self.batch.add(24, GL_QUADS, self.group, + ('v3f/static', vertex_data), + ('t2f/static', texture_data)) + + def hide_block(self, position, immediate=True): + """ Hide the block at the given `position`. Hiding does not remove the + block from the world. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position of the block to hide. + immediate : bool + Whether or not to immediately remove the block from the canvas. + + """ + self.shown.pop(position) + if immediate: + self._hide_block(position) + else: + self._enqueue(self._hide_block, position) + + def _hide_block(self, position): + """ Private implementation of the 'hide_block()` method. + + """ + self._shown.pop(position).delete() + + def show_sector(self, sector): + """ Ensure all blocks in the given sector that should be shown are + drawn to the canvas. + + """ + for position in self.sectors.get(sector, []): + if position not in self.shown and self.exposed(position): + self.show_block(position, False) + + def hide_sector(self, sector): + """ Ensure all blocks in the given sector that should be hidden are + removed from the canvas. + + """ + for position in self.sectors.get(sector, []): + if position in self.shown: + self.hide_block(position, False) + + def change_sectors(self, before, after): + """ Move from sector `before` to sector `after`. A sector is a + contiguous x, y sub-region of world. Sectors are used to speed up + world rendering. + + """ + before_set = set() + after_set = set() + pad = 4 + for dx in xrange(-pad, pad + 1): + for dy in [0]: # xrange(-pad, pad + 1): + for dz in xrange(-pad, pad + 1): + if dx ** 2 + dy ** 2 + dz ** 2 > (pad + 1) ** 2: + continue + if before: + x, y, z = before + before_set.add((x + dx, y + dy, z + dz)) + if after: + x, y, z = after + after_set.add((x + dx, y + dy, z + dz)) + show = after_set - before_set + hide = before_set - after_set + for sector in show: + self.show_sector(sector) + for sector in hide: + self.hide_sector(sector) + + def _enqueue(self, func, *args): + """ Add `func` to the internal queue. + + """ + self.queue.append((func, args)) + + def _dequeue(self): + """ Pop the top function from the internal queue and call it. + + """ + func, args = self.queue.popleft() + func(*args) + + def process_queue(self): + """ Process the entire queue while taking periodic breaks. This allows + the game loop to run smoothly. The queue contains calls to + _show_block() and _hide_block() so this method should be called if + add_block() or remove_block() was called with immediate=False + + """ + start = time.clock() + while self.queue and time.clock() - start < 1.0 / TICKS_PER_SEC: + self._dequeue() + + def process_entire_queue(self): + """ Process the entire queue with no breaks. + + """ + while self.queue: + self._dequeue() + + +class Window(pyglet.window.Window): + + def __init__(self, *args, **kwargs): + super(Window, self).__init__(*args, **kwargs) + + self.walking_speed = WALKING_SPEED + + self.flying_speed = FLYING_SPEED + + self.gravity = GRAVITY + + self.max_jump_height = MAX_JUMP_HEIGHT + + self.jump_speed = JUMP_SPEED + + self.terminal_velocity = TERMINAL_VELOCITY + + self.player_height = PLAYER_HEIGHT + + # Whether or not the window exclusively captures the mouse. + self.exclusive = False + + # When flying gravity has no effect and speed is increased. + self.flying = False + + # Strafing is moving lateral to the direction you are facing, + # e.g. moving to the left or right while continuing to face forward. + # + # First element is -1 when moving forward, 1 when moving back, and 0 + # otherwise. The second element is -1 when moving left, 1 when moving + # right, and 0 otherwise. + self.strafe = [0, 0] + + # Current (x, y, z) position in the world, specified with floats. Note + # that, perhaps unlike in math class, the y-axis is the vertical axis. + self.position = (0, 0, 0) + + # First element is rotation of the player in the x-z plane (ground + # plane) measured from the z-axis down. The second is the rotation + # angle from the ground plane up. Rotation is in degrees. + # + # The vertical plane rotation ranges from -90 (looking straight down) to + # 90 (looking straight up). The horizontal rotation range is unbounded. + self.rotation = (0, 0) + + # Which sector the player is currently in. + self.sector = None + + # The crosshairs at the center of the screen. + self.reticle = None + + # Velocity in the y (upward) direction. + self.dy = 0 + + # A list of blocks the player can place. Hit num keys to cycle. + self.inventory = [BRICK, GRASS, SAND] + + # The current block the user can place. Hit num keys to cycle. + self.block = self.inventory[0] + + # Convenience list of num keys. + self.num_keys = [ + key._1, key._2, key._3, key._4, key._5, + key._6, key._7, key._8, key._9, key._0] + + # Instance of the model that handles the world. + self.model = Model() + + # The label that is displayed in the top left of the canvas. + self.label = pyglet.text.Label('', font_name='Arial', font_size=18, + x=10, y=self.height - 10, anchor_x='left', anchor_y='top', + color=(0, 0, 0, 255)) + + # This call schedules the `update()` method to be called + # TICKS_PER_SEC. This is the main game event loop. + pyglet.clock.schedule_interval(self.update, 1.0 / TICKS_PER_SEC) + + def set_exclusive_mouse(self, exclusive): + """ If `exclusive` is True, the game will capture the mouse, if False + the game will ignore the mouse. + + """ + super(Window, self).set_exclusive_mouse(exclusive) + self.exclusive = exclusive + + def set_walking_speed(self, speed): + self.walking_speed = speed + + def set_flying_speed(self, speed): + self.flying_speed = speed + + def set_gravity(self, g): + self.gravity = g + self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) + + def set_max_jump_height(self, height): + self.max_jump_height = height + self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) + + def set_jump_speed(self, speed): + self.jump_speed = speed + + def set_terminal_velocity(self, velocity): + self.terminal_velocity = velocity + + def set_player_height(self, height): + self.player_height = height + + def get_sight_vector(self): + """ Returns the current line of sight vector indicating the direction + the player is looking. + + """ + x, y = self.rotation + # y ranges from -90 to 90, or -pi/2 to pi/2, so m ranges from 0 to 1 and + # is 1 when looking ahead parallel to the ground and 0 when looking + # straight up or down. + m = math.cos(math.radians(y)) + # dy ranges from -1 to 1 and is -1 when looking straight down and 1 when + # looking straight up. + dy = math.sin(math.radians(y)) + dx = math.cos(math.radians(x - 90)) * m + dz = math.sin(math.radians(x - 90)) * m + return (dx, dy, dz) + + def get_motion_vector(self): + """ Returns the current motion vector indicating the velocity of the + player. + + Returns + ------- + vector : tuple of len 3 + Tuple containing the velocity in x, y, and z respectively. + + """ + if any(self.strafe): + x, y = self.rotation + strafe = math.degrees(math.atan2(*self.strafe)) + y_angle = math.radians(y) + x_angle = math.radians(x + strafe) + if self.flying: + m = math.cos(y_angle) + dy = math.sin(y_angle) + if self.strafe[1]: + # Moving left or right. + dy = 0.0 + m = 1 + if self.strafe[0] > 0: + # Moving backwards. + dy *= -1 + # When you are flying up or down, you have less left and right + # motion. + dx = math.cos(x_angle) * m + dz = math.sin(x_angle) * m + else: + dy = 0.0 + dx = math.cos(x_angle) + dz = math.sin(x_angle) + else: + dy = 0.0 + dx = 0.0 + dz = 0.0 + return (dx, dy, dz) + + def update(self, dt): + """ This method is scheduled to be called repeatedly by the pyglet + clock. + + Parameters + ---------- + dt : float + The change in time since the last call. + + """ + self.model.process_queue() + sector = sectorize(self.position) + if sector != self.sector: + self.model.change_sectors(self.sector, sector) + if self.sector is None: + self.model.process_entire_queue() + self.sector = sector + m = 8 + dt = min(dt, 0.2) + for _ in xrange(m): + self._update(dt / m) + + def _update(self, dt): + """ Private implementation of the `update()` method. This is where most + of the motion logic lives, along with gravity and collision detection. + + Parameters + ---------- + dt : float + The change in time since the last call. + + """ + # walking + speed = self.flying_speed if self.flying else self.walking_speed + d = dt * speed # distance covered this tick. + dx, dy, dz = self.get_motion_vector() + # New position in space, before accounting for gravity. + dx, dy, dz = dx * d, dy * d, dz * d + # gravity + if not self.flying: + # Update your vertical speed: if you are falling, speed up until you + # hit terminal velocity; if you are jumping, slow down until you + # start falling. + self.dy -= dt * self.gravity + self.dy = max(self.dy, -(self.terminal_velocity)) + dy += self.dy * dt + # collisions + x, y, z = self.position + x, y, z = self.collide((x + dx, y + dy, z + dz), self.player_height) + self.position = (x, y, z) + + def collide(self, position, height): + """ Checks to see if the player at the given `position` and `height` + is colliding with any blocks in the world. + + Parameters + ---------- + position : tuple of len 3 + The (x, y, z) position to check for collisions at. + height : int or float + The height of the player. + + Returns + ------- + position : tuple of len 3 + The new position of the player taking into account collisions. + + """ + # How much overlap with a dimension of a surrounding block you need to + # have to count as a collision. If 0, touching terrain at all counts as + # a collision. If .49, you sink into the ground, as if walking through + # tall grass. If >= .5, you'll fall through the ground. + pad = 0.25 + p = list(position) + np = normalize(position) + for face in FACES: # check all surrounding blocks + for i in xrange(3): # check each dimension independently + if not face[i]: + continue + # How much overlap you have with this dimension. + d = (p[i] - np[i]) * face[i] + if d < pad: + continue + for dy in xrange(height): # check each height + op = list(np) + op[1] -= dy + op[i] += face[i] + if tuple(op) not in self.model.world: + continue + p[i] -= (d - pad) * face[i] + if face == (0, -1, 0) or face == (0, 1, 0): + # You are colliding with the ground or ceiling, so stop + # falling / rising. + self.dy = 0 + break + return tuple(p) + + def on_mouse_press(self, x, y, button, modifiers): + """ Called when a mouse button is pressed. See pyglet docs for button + amd modifier mappings. + + Parameters + ---------- + x, y : int + The coordinates of the mouse click. Always center of the screen if + the mouse is captured. + button : int + Number representing mouse button that was clicked. 1 = left button, + 4 = right button. + modifiers : int + Number representing any modifying keys that were pressed when the + mouse button was clicked. + + """ + if self.exclusive: + vector = self.get_sight_vector() + block, previous = self.model.hit_test(self.position, vector) + if (button == mouse.RIGHT) or \ + ((button == mouse.LEFT) and (modifiers & key.MOD_CTRL)): + # ON OSX, control + left click = right click. + if previous: + self.model.add_block(previous, self.block) + elif button == pyglet.window.mouse.LEFT and block: + texture = self.model.world[block] + if texture != STONE: + self.model.remove_block(block) + else: + self.set_exclusive_mouse(True) + + def on_mouse_motion(self, x, y, dx, dy): + """ Called when the player moves the mouse. + + Parameters + ---------- + x, y : int + The coordinates of the mouse click. Always center of the screen if + the mouse is captured. + dx, dy : float + The movement of the mouse. + + """ + if self.exclusive: + m = 0.15 + x, y = self.rotation + x, y = x + dx * m, y + dy * m + y = max(-90, min(90, y)) + self.rotation = (x, y) + + def on_key_press(self, symbol, modifiers): + """ Called when the player presses a key. See pyglet docs for key + mappings. + + Parameters + ---------- + symbol : int + Number representing the key that was pressed. + modifiers : int + Number representing any modifying keys that were pressed. + + """ + if symbol == key.W: + self.strafe[0] -= 1 + elif symbol == key.S: + self.strafe[0] += 1 + elif symbol == key.A: + self.strafe[1] -= 1 + elif symbol == key.D: + self.strafe[1] += 1 + elif symbol == key.SPACE: + if self.dy == 0: + self.dy = self.jump_speed + elif symbol == key.ESCAPE: + self.set_exclusive_mouse(False) + elif symbol == key.TAB: + self.flying = not self.flying + elif symbol in self.num_keys: + index = (symbol - self.num_keys[0]) % len(self.inventory) + self.block = self.inventory[index] + + def on_key_release(self, symbol, modifiers): + """ Called when the player releases a key. See pyglet docs for key + mappings. + + Parameters + ---------- + symbol : int + Number representing the key that was pressed. + modifiers : int + Number representing any modifying keys that were pressed. + + """ + if symbol == key.W: + self.strafe[0] += 1 + elif symbol == key.S: + self.strafe[0] -= 1 + elif symbol == key.A: + self.strafe[1] += 1 + elif symbol == key.D: + self.strafe[1] -= 1 + + def on_resize(self, width, height): + """ Called when the window is resized to a new `width` and `height`. + + """ + # label + self.label.y = height - 10 + # reticle + if self.reticle: + self.reticle.delete() + x, y = self.width / 2, self.height / 2 + n = 10 + self.reticle = pyglet.graphics.vertex_list(4, + ('v2i', (x - n, y, x + n, y, x, y - n, x, y + n)) + ) + + def set_2d(self): + """ Configure OpenGL to draw in 2d. + + """ + width, height = self.get_size() + glDisable(GL_DEPTH_TEST) + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(0, width, 0, height, -1, 1) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + + def set_3d(self): + """ Configure OpenGL to draw in 3d. + + """ + width, height = self.get_size() + glEnable(GL_DEPTH_TEST) + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + gluPerspective(65.0, width / float(height), 0.1, 60.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + x, y = self.rotation + glRotatef(x, 0, 1, 0) + glRotatef(-y, math.cos(math.radians(x)), 0, math.sin(math.radians(x))) + x, y, z = self.position + glTranslatef(-x, -y, -z) + + def on_draw(self): + """ Called by pyglet to draw the canvas. + + """ + self.clear() + self.set_3d() + glColor3d(1, 1, 1) + self.model.batch.draw() + self.draw_focused_block() + self.set_2d() + self.draw_label() + self.draw_reticle() + + def draw_focused_block(self): + """ Draw black edges around the block that is currently under the + crosshairs. + + """ + vector = self.get_sight_vector() + block = self.model.hit_test(self.position, vector)[0] + if block: + x, y, z = block + vertex_data = cube_vertices(x, y, z, 0.51) + glColor3d(0, 0, 0) + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) + pyglet.graphics.draw(24, GL_QUADS, ('v3f/static', vertex_data)) + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) + + def draw_label(self): + """ Draw the label in the top left of the screen. + + """ + x, y, z = self.position + self.label.text = '%02d (%.2f, %.2f, %.2f) %d / %d' % ( + pyglet.clock.get_fps(), x, y, z, + len(self.model._shown), len(self.model.world)) + self.label.draw() + + def draw_reticle(self): + """ Draw the crosshairs in the center of the screen. + + """ + glColor3d(0, 0, 0) + self.reticle.draw(GL_LINES) + +def setup_fog(): + """ Configure the OpenGL fog properties. + + """ + # Enable fog. Fog "blends a fog color with each rasterized pixel fragment's + # post-texturing color." + glEnable(GL_FOG) + # Set the fog color. + glFogfv(GL_FOG_COLOR, (GLfloat * 4)(0.5, 0.69, 1.0, 1)) + # Say we have no preference between rendering speed and quality. + glHint(GL_FOG_HINT, GL_DONT_CARE) + # Specify the equation used to compute the blending factor. + glFogi(GL_FOG_MODE, GL_LINEAR) + # How close and far away fog starts and ends. The closer the start and end, + # the denser the fog in the fog range. + glFogf(GL_FOG_START, 20.0) + glFogf(GL_FOG_END, 60.0) + + +def setup(): + """ Basic OpenGL configuration. + + """ + # Set the color of "clear", i.e. the sky, in rgba. + glClearColor(0.5, 0.69, 1.0, 1) + # Enable culling (not rendering) of back-facing facets -- facets that aren't + # visible to you. + glEnable(GL_CULL_FACE) + # Set the texture minification/magnification function to GL_NEAREST (nearest + # in Manhattan distance) to the specified texture coordinates. GL_NEAREST + # "is generally faster than GL_LINEAR, but it can produce textured images + # with sharper edges because the transition between texture elements is not + # as smooth." + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) + setup_fog() + + +def main(): + window = Window(width=800, height=600, caption='Pyglet', resizable=True) + # Hide the mouse cursor and prevent the mouse from leaving the window. + window.set_exclusive_mouse(True) + setup() + pyglet.app.run() + +def main_window(window): + if isinstance (window, Window): + window.set_exclusive_mouse(True) + setup() + pyglet.app.run() + + +if __name__ == '__main__': + main() From e982ce140527cc31fb883849e347bc6839c52f1c Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Tue, 13 Oct 2015 19:24:13 -0600 Subject: [PATCH 33/37] Add terrain image from Pi Edition --- terrainFromPiEdition.png | Bin 0 -> 91598 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 terrainFromPiEdition.png diff --git a/terrainFromPiEdition.png b/terrainFromPiEdition.png new file mode 100644 index 0000000000000000000000000000000000000000..f14bbed4005cdd598d2bb877e1701b83c8f4f2cf GIT binary patch literal 91598 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 literal 0 HcmV?d00001 From 5b39ee51ca3d43ccb918328335d6636bddb7468d Mon Sep 17 00:00:00 2001 From: Rohrbaugh Date: Tue, 13 Oct 2015 19:33:36 -0600 Subject: [PATCH 34/37] Modify and add to texture.png --- texture.png | Bin 5257 -> 7502 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/texture.png b/texture.png index 9d05a7e2db1eecfe427228730ba1a9d7f5e38515..8b60b07149b6e71f5d7d7b69a8000ed9d451e28d 100644 GIT binary patch literal 7502 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 literal 5257 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 tZXY)`ICb#Xax+y7?`HqVj7PH^u;uCX Date: Wed, 14 Oct 2015 13:33:27 -0600 Subject: [PATCH 35/37] Add mc_original.py --- mc_original.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 mc_original.py diff --git a/mc_original.py b/mc_original.py new file mode 100644 index 00000000..77c7706f --- /dev/null +++ b/mc_original.py @@ -0,0 +1,35 @@ +import main + +class World (main.Window): + + def __init__(self): + main.Window.__init__(self, width=800, height=600, caption='Pyglet', resizable=True) + + def add_block(self, x, y, z, texture): + position = (x, y - 1, z) + if isinstance(texture, (str, int, float, long)): + if isinstance(texture, str): + texture = texture.upper() + if texture == "SAND" or texture == 1: + texture = SAND + elif texture == "BRICK" or texture == 2: + texture = BRICK + elif texture == "STONE" or texture == 3: + texture = STONE + else: + texture = GRASS + self.model.add_block(position, texture) + + def remove_block(self, x, y, z): + position = (x, y - 1, z) + self.model.remove_block(position) + + def set_block(self, x, y, z, texture): + self.add_block(x, y, z, texture) + +def run(world): + if isinstance(world, main.Window): + main.main_window(world) + +def normal_world(): + main.main() From 251bb569d45a3c921f1e755b5925ae41efc5469a Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Wed, 14 Oct 2015 13:36:43 -0600 Subject: [PATCH 36/37] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cedf62d..564d4076 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ use / configure to setup a world and run it. Something along these lines... The API could contain functionality for the following: -- Easily configurable parameters like gravity, jump velocity, walking speed, etc. :white_check_mark: +- Easily configurable parameters like gravity, jump velocity, walking speed, etc. - Hooks for terrain generation. ## How to Run From ddc4737ac7965c5098d0c3d5e6e4e1ec16d8ef61 Mon Sep 17 00:00:00 2001 From: David Rohrbaugh Date: Wed, 14 Oct 2015 18:50:32 -0600 Subject: [PATCH 37/37] Remove extra files --- main_original.py | 936 --------------------------------------- mc_original.py | 35 -- terrainFromPiEdition.png | Bin 91598 -> 0 bytes texture.png | Bin 7502 -> 5257 bytes texture_original.png | Bin 5257 -> 0 bytes 5 files changed, 971 deletions(-) delete mode 100644 main_original.py delete mode 100644 mc_original.py delete mode 100644 terrainFromPiEdition.png delete mode 100644 texture_original.png diff --git a/main_original.py b/main_original.py deleted file mode 100644 index a7ec6d9a..00000000 --- a/main_original.py +++ /dev/null @@ -1,936 +0,0 @@ -import math -import random -import time - -from collections import deque -from pyglet import image -from pyglet.gl import * -from pyglet.graphics import TextureGroup -from pyglet.window import key, mouse - -TICKS_PER_SEC = 60 - -# Size of sectors used to ease block loading. -SECTOR_SIZE = 16 - -WALKING_SPEED = 5 -FLYING_SPEED = 15 - -GRAVITY = 20.0 -MAX_JUMP_HEIGHT = 1.0 # About the height of a block. -# To derive the formula for calculating jump speed, first solve -# v_t = v_0 + a * t -# for the time at which you achieve maximum height, where a is the acceleration -# due to gravity and v_t = 0. This gives: -# t = - v_0 / a -# Use t and the desired MAX_JUMP_HEIGHT to solve for v_0 (jump speed) in -# s = s_0 + v_0 * t + (a * t^2) / 2 -JUMP_SPEED = math.sqrt(2 * GRAVITY * MAX_JUMP_HEIGHT) -TERMINAL_VELOCITY = 50 - -PLAYER_HEIGHT = 2 - -def cube_vertices(x, y, z, n): - """ Return the vertices of the cube at position x, y, z with size 2*n. - - """ - return [ - x-n,y+n,z-n, x-n,y+n,z+n, x+n,y+n,z+n, x+n,y+n,z-n, # top - x-n,y-n,z-n, x+n,y-n,z-n, x+n,y-n,z+n, x-n,y-n,z+n, # bottom - x-n,y-n,z-n, x-n,y-n,z+n, x-n,y+n,z+n, x-n,y+n,z-n, # left - x+n,y-n,z+n, x+n,y-n,z-n, x+n,y+n,z-n, x+n,y+n,z+n, # right - x-n,y-n,z+n, x+n,y-n,z+n, x+n,y+n,z+n, x-n,y+n,z+n, # front - x+n,y-n,z-n, x-n,y-n,z-n, x-n,y+n,z-n, x+n,y+n,z-n, # back - ] - - -def tex_coord(x, y, n=4): - """ Return the bounding vertices of the texture square. - - """ - m = 1.0 / n - dx = x * m - dy = y * m - return dx, dy, dx + m, dy, dx + m, dy + m, dx, dy + m - - -def tex_coords(top, bottom, side): - """ Return a list of the texture squares for the top, bottom and side. - - """ - top = tex_coord(*top) - bottom = tex_coord(*bottom) - side = tex_coord(*side) - result = [] - result.extend(top) - result.extend(bottom) - result.extend(side * 4) - return result - - -TEXTURE_PATH = 'texture.png' - -GRASS = tex_coords((1, 0), (0, 1), (0, 0)) -SAND = tex_coords((1, 1), (1, 1), (1, 1)) -BRICK = tex_coords((2, 0), (2, 0), (2, 0)) -STONE = tex_coords((2, 1), (2, 1), (2, 1)) - -FACES = [ - ( 0, 1, 0), - ( 0,-1, 0), - (-1, 0, 0), - ( 1, 0, 0), - ( 0, 0, 1), - ( 0, 0,-1), -] - - -def normalize(position): - """ Accepts `position` of arbitrary precision and returns the block - containing that position. - - Parameters - ---------- - position : tuple of len 3 - - Returns - ------- - block_position : tuple of ints of len 3 - - """ - x, y, z = position - x, y, z = (int(round(x)), int(round(y)), int(round(z))) - return (x, y, z) - - -def sectorize(position): - """ Returns a tuple representing the sector for the given `position`. - - Parameters - ---------- - position : tuple of len 3 - - Returns - ------- - sector : tuple of len 3 - - """ - x, y, z = normalize(position) - x, y, z = x / SECTOR_SIZE, y / SECTOR_SIZE, z / SECTOR_SIZE - return (x, 0, z) - - -class Model(object): - - def __init__(self): - - # A Batch is a collection of vertex lists for batched rendering. - self.batch = pyglet.graphics.Batch() - - # A TextureGroup manages an OpenGL texture. - self.group = TextureGroup(image.load(TEXTURE_PATH).get_texture()) - - # A mapping from position to the texture of the block at that position. - # This defines all the blocks that are currently in the world. - self.world = {} - - # Same mapping as `world` but only contains blocks that are shown. - self.shown = {} - - # Mapping from position to a pyglet `VertextList` for all shown blocks. - self._shown = {} - - # Mapping from sector to a list of positions inside that sector. - self.sectors = {} - - # Simple function queue implementation. The queue is populated with - # _show_block() and _hide_block() calls - self.queue = deque() - - self._initialize() - - def _initialize(self): - """ Initialize the world by placing all the blocks. - - """ - n = 80 # 1/2 width and height of world - s = 1 # step size - y = 0 # initial y height - for x in xrange(-n, n + 1, s): - for z in xrange(-n, n + 1, s): - # create a layer stone an grass everywhere. - self.add_block((x, y - 2, z), GRASS, immediate=False) - self.add_block((x, y - 3, z), STONE, immediate=False) - if x in (-n, n) or z in (-n, n): - # create outer walls. - for dy in xrange(-2, 3): - self.add_block((x, y + dy, z), STONE, immediate=False) - - # generate the hills randomly - o = n - 10 - for _ in xrange(120): - a = random.randint(-o, o) # x position of the hill - b = random.randint(-o, o) # z position of the hill - c = -1 # base of the hill - h = random.randint(1, 6) # height of the hill - s = random.randint(4, 8) # 2 * s is the side length of the hill - d = 1 # how quickly to taper off the hills - t = random.choice([GRASS, SAND, BRICK]) - for y in xrange(c, c + h): - for x in xrange(a - s, a + s + 1): - for z in xrange(b - s, b + s + 1): - if (x - a) ** 2 + (z - b) ** 2 > (s + 1) ** 2: - continue - if (x - 0) ** 2 + (z - 0) ** 2 < 5 ** 2: - continue - self.add_block((x, y, z), t, immediate=False) - s -= d # decrement side lenth so hills taper off - - def hit_test(self, position, vector, max_distance=8): - """ Line of sight search from current position. If a block is - intersected it is returned, along with the block previously in the line - of sight. If no block is found, return None, None. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position to check visibility from. - vector : tuple of len 3 - The line of sight vector. - max_distance : int - How many blocks away to search for a hit. - - """ - m = 8 - x, y, z = position - dx, dy, dz = vector - previous = None - for _ in xrange(max_distance * m): - key = normalize((x, y, z)) - if key != previous and key in self.world: - return key, previous - previous = key - x, y, z = x + dx / m, y + dy / m, z + dz / m - return None, None - - def exposed(self, position): - """ Returns False is given `position` is surrounded on all 6 sides by - blocks, True otherwise. - - """ - x, y, z = position - for dx, dy, dz in FACES: - if (x + dx, y + dy, z + dz) not in self.world: - return True - return False - - def add_block(self, position, texture, immediate=True): - """ Add a block with the given `texture` and `position` to the world. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position of the block to add. - texture : list of len 3 - The coordinates of the texture squares. Use `tex_coords()` to - generate. - immediate : bool - Whether or not to draw the block immediately. - - """ - if position in self.world: - self.remove_block(position, immediate) - self.world[position] = texture - self.sectors.setdefault(sectorize(position), []).append(position) - if immediate: - if self.exposed(position): - self.show_block(position) - self.check_neighbors(position) - - def remove_block(self, position, immediate=True): - """ Remove the block at the given `position`. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position of the block to remove. - immediate : bool - Whether or not to immediately remove block from canvas. - - """ - del self.world[position] - self.sectors[sectorize(position)].remove(position) - if immediate: - if position in self.shown: - self.hide_block(position) - self.check_neighbors(position) - - def check_neighbors(self, position): - """ Check all blocks surrounding `position` and ensure their visual - state is current. This means hiding blocks that are not exposed and - ensuring that all exposed blocks are shown. Usually used after a block - is added or removed. - - """ - x, y, z = position - for dx, dy, dz in FACES: - key = (x + dx, y + dy, z + dz) - if key not in self.world: - continue - if self.exposed(key): - if key not in self.shown: - self.show_block(key) - else: - if key in self.shown: - self.hide_block(key) - - def show_block(self, position, immediate=True): - """ Show the block at the given `position`. This method assumes the - block has already been added with add_block() - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position of the block to show. - immediate : bool - Whether or not to show the block immediately. - - """ - texture = self.world[position] - self.shown[position] = texture - if immediate: - self._show_block(position, texture) - else: - self._enqueue(self._show_block, position, texture) - - def _show_block(self, position, texture): - """ Private implementation of the `show_block()` method. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position of the block to show. - texture : list of len 3 - The coordinates of the texture squares. Use `tex_coords()` to - generate. - - """ - x, y, z = position - vertex_data = cube_vertices(x, y, z, 0.5) - texture_data = list(texture) - # create vertex list - # FIXME Maybe `add_indexed()` should be used instead - self._shown[position] = self.batch.add(24, GL_QUADS, self.group, - ('v3f/static', vertex_data), - ('t2f/static', texture_data)) - - def hide_block(self, position, immediate=True): - """ Hide the block at the given `position`. Hiding does not remove the - block from the world. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position of the block to hide. - immediate : bool - Whether or not to immediately remove the block from the canvas. - - """ - self.shown.pop(position) - if immediate: - self._hide_block(position) - else: - self._enqueue(self._hide_block, position) - - def _hide_block(self, position): - """ Private implementation of the 'hide_block()` method. - - """ - self._shown.pop(position).delete() - - def show_sector(self, sector): - """ Ensure all blocks in the given sector that should be shown are - drawn to the canvas. - - """ - for position in self.sectors.get(sector, []): - if position not in self.shown and self.exposed(position): - self.show_block(position, False) - - def hide_sector(self, sector): - """ Ensure all blocks in the given sector that should be hidden are - removed from the canvas. - - """ - for position in self.sectors.get(sector, []): - if position in self.shown: - self.hide_block(position, False) - - def change_sectors(self, before, after): - """ Move from sector `before` to sector `after`. A sector is a - contiguous x, y sub-region of world. Sectors are used to speed up - world rendering. - - """ - before_set = set() - after_set = set() - pad = 4 - for dx in xrange(-pad, pad + 1): - for dy in [0]: # xrange(-pad, pad + 1): - for dz in xrange(-pad, pad + 1): - if dx ** 2 + dy ** 2 + dz ** 2 > (pad + 1) ** 2: - continue - if before: - x, y, z = before - before_set.add((x + dx, y + dy, z + dz)) - if after: - x, y, z = after - after_set.add((x + dx, y + dy, z + dz)) - show = after_set - before_set - hide = before_set - after_set - for sector in show: - self.show_sector(sector) - for sector in hide: - self.hide_sector(sector) - - def _enqueue(self, func, *args): - """ Add `func` to the internal queue. - - """ - self.queue.append((func, args)) - - def _dequeue(self): - """ Pop the top function from the internal queue and call it. - - """ - func, args = self.queue.popleft() - func(*args) - - def process_queue(self): - """ Process the entire queue while taking periodic breaks. This allows - the game loop to run smoothly. The queue contains calls to - _show_block() and _hide_block() so this method should be called if - add_block() or remove_block() was called with immediate=False - - """ - start = time.clock() - while self.queue and time.clock() - start < 1.0 / TICKS_PER_SEC: - self._dequeue() - - def process_entire_queue(self): - """ Process the entire queue with no breaks. - - """ - while self.queue: - self._dequeue() - - -class Window(pyglet.window.Window): - - def __init__(self, *args, **kwargs): - super(Window, self).__init__(*args, **kwargs) - - self.walking_speed = WALKING_SPEED - - self.flying_speed = FLYING_SPEED - - self.gravity = GRAVITY - - self.max_jump_height = MAX_JUMP_HEIGHT - - self.jump_speed = JUMP_SPEED - - self.terminal_velocity = TERMINAL_VELOCITY - - self.player_height = PLAYER_HEIGHT - - # Whether or not the window exclusively captures the mouse. - self.exclusive = False - - # When flying gravity has no effect and speed is increased. - self.flying = False - - # Strafing is moving lateral to the direction you are facing, - # e.g. moving to the left or right while continuing to face forward. - # - # First element is -1 when moving forward, 1 when moving back, and 0 - # otherwise. The second element is -1 when moving left, 1 when moving - # right, and 0 otherwise. - self.strafe = [0, 0] - - # Current (x, y, z) position in the world, specified with floats. Note - # that, perhaps unlike in math class, the y-axis is the vertical axis. - self.position = (0, 0, 0) - - # First element is rotation of the player in the x-z plane (ground - # plane) measured from the z-axis down. The second is the rotation - # angle from the ground plane up. Rotation is in degrees. - # - # The vertical plane rotation ranges from -90 (looking straight down) to - # 90 (looking straight up). The horizontal rotation range is unbounded. - self.rotation = (0, 0) - - # Which sector the player is currently in. - self.sector = None - - # The crosshairs at the center of the screen. - self.reticle = None - - # Velocity in the y (upward) direction. - self.dy = 0 - - # A list of blocks the player can place. Hit num keys to cycle. - self.inventory = [BRICK, GRASS, SAND] - - # The current block the user can place. Hit num keys to cycle. - self.block = self.inventory[0] - - # Convenience list of num keys. - self.num_keys = [ - key._1, key._2, key._3, key._4, key._5, - key._6, key._7, key._8, key._9, key._0] - - # Instance of the model that handles the world. - self.model = Model() - - # The label that is displayed in the top left of the canvas. - self.label = pyglet.text.Label('', font_name='Arial', font_size=18, - x=10, y=self.height - 10, anchor_x='left', anchor_y='top', - color=(0, 0, 0, 255)) - - # This call schedules the `update()` method to be called - # TICKS_PER_SEC. This is the main game event loop. - pyglet.clock.schedule_interval(self.update, 1.0 / TICKS_PER_SEC) - - def set_exclusive_mouse(self, exclusive): - """ If `exclusive` is True, the game will capture the mouse, if False - the game will ignore the mouse. - - """ - super(Window, self).set_exclusive_mouse(exclusive) - self.exclusive = exclusive - - def set_walking_speed(self, speed): - self.walking_speed = speed - - def set_flying_speed(self, speed): - self.flying_speed = speed - - def set_gravity(self, g): - self.gravity = g - self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) - - def set_max_jump_height(self, height): - self.max_jump_height = height - self.jump_speed = math.sqrt(2 * self.gravity * self.max_jump_height) - - def set_jump_speed(self, speed): - self.jump_speed = speed - - def set_terminal_velocity(self, velocity): - self.terminal_velocity = velocity - - def set_player_height(self, height): - self.player_height = height - - def get_sight_vector(self): - """ Returns the current line of sight vector indicating the direction - the player is looking. - - """ - x, y = self.rotation - # y ranges from -90 to 90, or -pi/2 to pi/2, so m ranges from 0 to 1 and - # is 1 when looking ahead parallel to the ground and 0 when looking - # straight up or down. - m = math.cos(math.radians(y)) - # dy ranges from -1 to 1 and is -1 when looking straight down and 1 when - # looking straight up. - dy = math.sin(math.radians(y)) - dx = math.cos(math.radians(x - 90)) * m - dz = math.sin(math.radians(x - 90)) * m - return (dx, dy, dz) - - def get_motion_vector(self): - """ Returns the current motion vector indicating the velocity of the - player. - - Returns - ------- - vector : tuple of len 3 - Tuple containing the velocity in x, y, and z respectively. - - """ - if any(self.strafe): - x, y = self.rotation - strafe = math.degrees(math.atan2(*self.strafe)) - y_angle = math.radians(y) - x_angle = math.radians(x + strafe) - if self.flying: - m = math.cos(y_angle) - dy = math.sin(y_angle) - if self.strafe[1]: - # Moving left or right. - dy = 0.0 - m = 1 - if self.strafe[0] > 0: - # Moving backwards. - dy *= -1 - # When you are flying up or down, you have less left and right - # motion. - dx = math.cos(x_angle) * m - dz = math.sin(x_angle) * m - else: - dy = 0.0 - dx = math.cos(x_angle) - dz = math.sin(x_angle) - else: - dy = 0.0 - dx = 0.0 - dz = 0.0 - return (dx, dy, dz) - - def update(self, dt): - """ This method is scheduled to be called repeatedly by the pyglet - clock. - - Parameters - ---------- - dt : float - The change in time since the last call. - - """ - self.model.process_queue() - sector = sectorize(self.position) - if sector != self.sector: - self.model.change_sectors(self.sector, sector) - if self.sector is None: - self.model.process_entire_queue() - self.sector = sector - m = 8 - dt = min(dt, 0.2) - for _ in xrange(m): - self._update(dt / m) - - def _update(self, dt): - """ Private implementation of the `update()` method. This is where most - of the motion logic lives, along with gravity and collision detection. - - Parameters - ---------- - dt : float - The change in time since the last call. - - """ - # walking - speed = self.flying_speed if self.flying else self.walking_speed - d = dt * speed # distance covered this tick. - dx, dy, dz = self.get_motion_vector() - # New position in space, before accounting for gravity. - dx, dy, dz = dx * d, dy * d, dz * d - # gravity - if not self.flying: - # Update your vertical speed: if you are falling, speed up until you - # hit terminal velocity; if you are jumping, slow down until you - # start falling. - self.dy -= dt * self.gravity - self.dy = max(self.dy, -(self.terminal_velocity)) - dy += self.dy * dt - # collisions - x, y, z = self.position - x, y, z = self.collide((x + dx, y + dy, z + dz), self.player_height) - self.position = (x, y, z) - - def collide(self, position, height): - """ Checks to see if the player at the given `position` and `height` - is colliding with any blocks in the world. - - Parameters - ---------- - position : tuple of len 3 - The (x, y, z) position to check for collisions at. - height : int or float - The height of the player. - - Returns - ------- - position : tuple of len 3 - The new position of the player taking into account collisions. - - """ - # How much overlap with a dimension of a surrounding block you need to - # have to count as a collision. If 0, touching terrain at all counts as - # a collision. If .49, you sink into the ground, as if walking through - # tall grass. If >= .5, you'll fall through the ground. - pad = 0.25 - p = list(position) - np = normalize(position) - for face in FACES: # check all surrounding blocks - for i in xrange(3): # check each dimension independently - if not face[i]: - continue - # How much overlap you have with this dimension. - d = (p[i] - np[i]) * face[i] - if d < pad: - continue - for dy in xrange(height): # check each height - op = list(np) - op[1] -= dy - op[i] += face[i] - if tuple(op) not in self.model.world: - continue - p[i] -= (d - pad) * face[i] - if face == (0, -1, 0) or face == (0, 1, 0): - # You are colliding with the ground or ceiling, so stop - # falling / rising. - self.dy = 0 - break - return tuple(p) - - def on_mouse_press(self, x, y, button, modifiers): - """ Called when a mouse button is pressed. See pyglet docs for button - amd modifier mappings. - - Parameters - ---------- - x, y : int - The coordinates of the mouse click. Always center of the screen if - the mouse is captured. - button : int - Number representing mouse button that was clicked. 1 = left button, - 4 = right button. - modifiers : int - Number representing any modifying keys that were pressed when the - mouse button was clicked. - - """ - if self.exclusive: - vector = self.get_sight_vector() - block, previous = self.model.hit_test(self.position, vector) - if (button == mouse.RIGHT) or \ - ((button == mouse.LEFT) and (modifiers & key.MOD_CTRL)): - # ON OSX, control + left click = right click. - if previous: - self.model.add_block(previous, self.block) - elif button == pyglet.window.mouse.LEFT and block: - texture = self.model.world[block] - if texture != STONE: - self.model.remove_block(block) - else: - self.set_exclusive_mouse(True) - - def on_mouse_motion(self, x, y, dx, dy): - """ Called when the player moves the mouse. - - Parameters - ---------- - x, y : int - The coordinates of the mouse click. Always center of the screen if - the mouse is captured. - dx, dy : float - The movement of the mouse. - - """ - if self.exclusive: - m = 0.15 - x, y = self.rotation - x, y = x + dx * m, y + dy * m - y = max(-90, min(90, y)) - self.rotation = (x, y) - - def on_key_press(self, symbol, modifiers): - """ Called when the player presses a key. See pyglet docs for key - mappings. - - Parameters - ---------- - symbol : int - Number representing the key that was pressed. - modifiers : int - Number representing any modifying keys that were pressed. - - """ - if symbol == key.W: - self.strafe[0] -= 1 - elif symbol == key.S: - self.strafe[0] += 1 - elif symbol == key.A: - self.strafe[1] -= 1 - elif symbol == key.D: - self.strafe[1] += 1 - elif symbol == key.SPACE: - if self.dy == 0: - self.dy = self.jump_speed - elif symbol == key.ESCAPE: - self.set_exclusive_mouse(False) - elif symbol == key.TAB: - self.flying = not self.flying - elif symbol in self.num_keys: - index = (symbol - self.num_keys[0]) % len(self.inventory) - self.block = self.inventory[index] - - def on_key_release(self, symbol, modifiers): - """ Called when the player releases a key. See pyglet docs for key - mappings. - - Parameters - ---------- - symbol : int - Number representing the key that was pressed. - modifiers : int - Number representing any modifying keys that were pressed. - - """ - if symbol == key.W: - self.strafe[0] += 1 - elif symbol == key.S: - self.strafe[0] -= 1 - elif symbol == key.A: - self.strafe[1] += 1 - elif symbol == key.D: - self.strafe[1] -= 1 - - def on_resize(self, width, height): - """ Called when the window is resized to a new `width` and `height`. - - """ - # label - self.label.y = height - 10 - # reticle - if self.reticle: - self.reticle.delete() - x, y = self.width / 2, self.height / 2 - n = 10 - self.reticle = pyglet.graphics.vertex_list(4, - ('v2i', (x - n, y, x + n, y, x, y - n, x, y + n)) - ) - - def set_2d(self): - """ Configure OpenGL to draw in 2d. - - """ - width, height = self.get_size() - glDisable(GL_DEPTH_TEST) - glViewport(0, 0, width, height) - glMatrixMode(GL_PROJECTION) - glLoadIdentity() - glOrtho(0, width, 0, height, -1, 1) - glMatrixMode(GL_MODELVIEW) - glLoadIdentity() - - def set_3d(self): - """ Configure OpenGL to draw in 3d. - - """ - width, height = self.get_size() - glEnable(GL_DEPTH_TEST) - glViewport(0, 0, width, height) - glMatrixMode(GL_PROJECTION) - glLoadIdentity() - gluPerspective(65.0, width / float(height), 0.1, 60.0) - glMatrixMode(GL_MODELVIEW) - glLoadIdentity() - x, y = self.rotation - glRotatef(x, 0, 1, 0) - glRotatef(-y, math.cos(math.radians(x)), 0, math.sin(math.radians(x))) - x, y, z = self.position - glTranslatef(-x, -y, -z) - - def on_draw(self): - """ Called by pyglet to draw the canvas. - - """ - self.clear() - self.set_3d() - glColor3d(1, 1, 1) - self.model.batch.draw() - self.draw_focused_block() - self.set_2d() - self.draw_label() - self.draw_reticle() - - def draw_focused_block(self): - """ Draw black edges around the block that is currently under the - crosshairs. - - """ - vector = self.get_sight_vector() - block = self.model.hit_test(self.position, vector)[0] - if block: - x, y, z = block - vertex_data = cube_vertices(x, y, z, 0.51) - glColor3d(0, 0, 0) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) - pyglet.graphics.draw(24, GL_QUADS, ('v3f/static', vertex_data)) - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) - - def draw_label(self): - """ Draw the label in the top left of the screen. - - """ - x, y, z = self.position - self.label.text = '%02d (%.2f, %.2f, %.2f) %d / %d' % ( - pyglet.clock.get_fps(), x, y, z, - len(self.model._shown), len(self.model.world)) - self.label.draw() - - def draw_reticle(self): - """ Draw the crosshairs in the center of the screen. - - """ - glColor3d(0, 0, 0) - self.reticle.draw(GL_LINES) - -def setup_fog(): - """ Configure the OpenGL fog properties. - - """ - # Enable fog. Fog "blends a fog color with each rasterized pixel fragment's - # post-texturing color." - glEnable(GL_FOG) - # Set the fog color. - glFogfv(GL_FOG_COLOR, (GLfloat * 4)(0.5, 0.69, 1.0, 1)) - # Say we have no preference between rendering speed and quality. - glHint(GL_FOG_HINT, GL_DONT_CARE) - # Specify the equation used to compute the blending factor. - glFogi(GL_FOG_MODE, GL_LINEAR) - # How close and far away fog starts and ends. The closer the start and end, - # the denser the fog in the fog range. - glFogf(GL_FOG_START, 20.0) - glFogf(GL_FOG_END, 60.0) - - -def setup(): - """ Basic OpenGL configuration. - - """ - # Set the color of "clear", i.e. the sky, in rgba. - glClearColor(0.5, 0.69, 1.0, 1) - # Enable culling (not rendering) of back-facing facets -- facets that aren't - # visible to you. - glEnable(GL_CULL_FACE) - # Set the texture minification/magnification function to GL_NEAREST (nearest - # in Manhattan distance) to the specified texture coordinates. GL_NEAREST - # "is generally faster than GL_LINEAR, but it can produce textured images - # with sharper edges because the transition between texture elements is not - # as smooth." - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) - setup_fog() - - -def main(): - window = Window(width=800, height=600, caption='Pyglet', resizable=True) - # Hide the mouse cursor and prevent the mouse from leaving the window. - window.set_exclusive_mouse(True) - setup() - pyglet.app.run() - -def main_window(window): - if isinstance (window, Window): - window.set_exclusive_mouse(True) - setup() - pyglet.app.run() - - -if __name__ == '__main__': - main() diff --git a/mc_original.py b/mc_original.py deleted file mode 100644 index 77c7706f..00000000 --- a/mc_original.py +++ /dev/null @@ -1,35 +0,0 @@ -import main - -class World (main.Window): - - def __init__(self): - main.Window.__init__(self, width=800, height=600, caption='Pyglet', resizable=True) - - def add_block(self, x, y, z, texture): - position = (x, y - 1, z) - if isinstance(texture, (str, int, float, long)): - if isinstance(texture, str): - texture = texture.upper() - if texture == "SAND" or texture == 1: - texture = SAND - elif texture == "BRICK" or texture == 2: - texture = BRICK - elif texture == "STONE" or texture == 3: - texture = STONE - else: - texture = GRASS - self.model.add_block(position, texture) - - def remove_block(self, x, y, z): - position = (x, y - 1, z) - self.model.remove_block(position) - - def set_block(self, x, y, z, texture): - self.add_block(x, y, z, texture) - -def run(world): - if isinstance(world, main.Window): - main.main_window(world) - -def normal_world(): - main.main() diff --git a/terrainFromPiEdition.png b/terrainFromPiEdition.png deleted file mode 100644 index f14bbed4005cdd598d2bb877e1701b83c8f4f2cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91598 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 diff --git a/texture.png b/texture.png index 8b60b07149b6e71f5d7d7b69a8000ed9d451e28d..9d05a7e2db1eecfe427228730ba1a9d7f5e38515 100644 GIT binary patch literal 5257 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 diff --git a/texture_original.png b/texture_original.png deleted file mode 100644 index 9d05a7e2db1eecfe427228730ba1a9d7f5e38515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5257 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 tZXY)`ICb#Xax+y7?`HqVj7PH^u;uCX