Thrive Game Development

Development of the evolution game Thrive.
 
HomeHome  PortalPortal  CalendarCalendar  FAQFAQ  SearchSearch  MemberlistMemberlist  UsergroupsUsergroups  RegisterRegister  Log inLog in  
Welcome new and returning members!
If you're new, read around a bit before you post: the odds are we've already covered your suggestion.
If you want to join the development team, sign up and tell us why.
ADMIN is pleased to note that this marquee has finally been updated.
ADMIN reminds you that the Devblog is REQUIRED reading.
Currently: The Microbe Stage GUI is under heavy development
Log in
Username:
Password:
Log in automatically: 
:: I forgot my password
Quick Links
Website
/r/thrive
GitHub
FAQs
Wiki
New Posts
Search
 
 

Display results as :
 
Rechercher Advanced Search
Statistics
We have 1675 registered users
The newest registered user is dejo123

Our users have posted a total of 30851 messages in 1411 subjects
Who is online?
In total there are 4 users online :: 0 Registered, 0 Hidden and 4 Guests

None

Most users ever online was 443 on Sun Mar 17, 2013 5:41 pm
Latest topics
» THIS FORUM IS NOW OBSOLETE
by NickTheNick Sat Sep 26, 2015 10:26 pm

» To all the people who come here looking for thrive.
by NickTheNick Sat Sep 26, 2015 10:22 pm

» Build Error Code::Blocks / CMake
by crovea Tue Jul 28, 2015 5:28 pm

» Hello! I can translate in japanese
by tjwhale Thu Jul 02, 2015 7:23 pm

» On Leave (Offline thread)
by NickTheNick Wed Jul 01, 2015 12:20 am

» Devblog #14: A Brave New Forum
by NickTheNick Mon Jun 29, 2015 4:49 am

» Application for Programmer
by crovea Fri Jun 26, 2015 11:14 am

» Re-Reapplication
by The Creator Thu Jun 25, 2015 10:57 pm

» Application (programming)
by crovea Tue Jun 23, 2015 8:00 am

» Achieving Sapience
by MitochondriaBox Sun Jun 21, 2015 7:03 pm

» Microbe Stage GDD
by tjwhale Sat Jun 20, 2015 3:44 pm

» Application for Programmer/ Theorist
by tjwhale Wed Jun 17, 2015 9:56 am

» Application for a 3D Modeler.
by Kaiju4u Wed Jun 10, 2015 11:16 am

» Translator to Serbian here
by Simeartherist Sun Jun 07, 2015 6:36 am

» Presentation
by Othithu Tue Jun 02, 2015 10:38 am

» Application of Sorts
by crovea Sun May 31, 2015 5:06 pm

» want to contribute
by Renzope Sun May 31, 2015 12:58 pm

» Music List Thread (Post New Themes Here)
by Oliveriver Thu May 28, 2015 1:06 pm

» Application: English-Spanish translator
by Renzope Tue May 26, 2015 1:53 pm

» Want to be promoter or project manager
by TheBudderBros Sun May 24, 2015 9:00 pm


Share | 
 

 Proceedural Tree Generator

View previous topic View next topic Go down 
AuthorMessage
tjwhale
Theorist


Posts : 87
Reputation : 26
Join date : 2014-09-07

PostSubject: Proceedural Tree Generator   Sat Feb 21, 2015 11:51 am

This is not much help for this stage but I made a proceedural tree generator for a friend and it could be useful to Thrive.




I'll also put it in the prototypes subfolder of the git.

Code:


import pygame
import math
import random
from pygame.locals import *

#setup

background_colour = (255,255,255)
(width, height) = (1600, 800)

screen = pygame.display.set_mode((width, height))#,pygame.FULLSCREEN)
screen.fill(background_colour)
pygame.display.set_caption('Trees')
pygame.font.init()

myfont = pygame.font.SysFont("monospace", 20)

#base variables
junctions_per_branch = 3
base_length = 200
reduction_factor = 0.75
angle_change = math.pi/4
max_generation = 7

#where to center the display
X_shift = width/2
Y_shift = height

trunk_colour = (160,82,45)
leaf_colour = (34,139,34)

class branch:
   def __init__(self, junction = None):
      #if this branch is the trunk
      self.start_x = 0
      self.start_y = 0
      self.start_z = 0
      self.end_x = 0
      self.end_y = 0
      self.end_z = base_length
      self.generation = 1
      self.length = base_length
      self.phi = 0
      self.theta = 0
      self.number_of_children = 0

      #if this branch is coming off a junction
      if junction:
         self.generation = junction.generation + 1
         self.length = base_length*(reduction_factor**self.generation)
         self.theta = junction.theta + random.uniform(-angle_change, + angle_change)
         self.phi = junction.phi + random.uniform(-angle_change, + angle_change)
         self.start_x = junction.x
         self.start_y = junction.y
         self.start_z = junction.z
         self.end_x = self.start_x +  self.length*math.sin(self.theta)*math.cos(self.phi)
         self.end_y = self.start_y +  self.length*math.sin(self.theta)*math.sin(self.phi)
         self.end_z = self.start_z +  self.length*math.cos(self.theta)
         self.number_of_children = 0
         


   def display(self, rotation):
      screen_x_0 = math.cos(rotation)*self.start_x + math.sin(rotation)*self.start_y
      screen_x_1 = math.sin(rotation)*self.end_y + math.cos(rotation)*self.end_x
      pygame.draw.line(screen, trunk_colour, [int(screen_x_0 + X_shift), int(-self.start_z + Y_shift)],
         [int(screen_x_1 + X_shift),int(- self.end_z + Y_shift)], int(20*(reduction_factor**self.generation)))


# a place where one brach comes off another
class junction:
   def __init__(self, branch):
      self.generation = branch.generation
      self.theta = branch.theta
      self.phi = branch.phi
      step = 1.0/junctions_per_branch

      self.x = branch.end_x + step*branch.number_of_children*(branch.start_x - branch.end_x)
      self.y = branch.end_y + step*branch.number_of_children*(branch.start_y - branch.end_y)
      self.z = branch.end_z + step*branch.number_of_children*(branch.start_z - branch.end_z)

      branch.number_of_children += 1

class leaf:
   def __init__(self, junction):
      self.x = junction.x
      self.y = junction.y
      self.z = junction.z

   def display(self, rotation):
      screen_x_0 = math.cos(rotation)*self.x + math.sin(rotation)*self.y
      pygame.draw.circle(screen, leaf_colour, (int(screen_x_0 + X_shift), int(-self.z + Y_shift)),5)



def mainloop():
   global branches
   global leaves
   branches = []
   junctions = []

   branches.append(branch())

   current_generation = 1

   while current_generation <=  max_generation:
      #for every junction add a branch
      for i in junctions:
         branches.append(branch(i))
      junctions = []

      #for each branch keep adding junctions until they all have the right number
      repeat = True
      while repeat:
         found_one = False
         for i in branches:
            if i. generation == current_generation and i.number_of_children <= junctions_per_branch - 1:
               junctions.append(junction(i))
               found_one = True
         if not found_one:
            repeat = False

      current_generation += 1

   leaves = []

   for i in junctions:
      leaves.append(leaf(i))



   


mainloop()

running = True
while running:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           running = False
       elif event.type == KEYDOWN:
           if event.key == K_ESCAPE:
               running = False
           if event.key == K_SPACE:
              mainloop()

   screen.fill(background_colour)

   pos = pygame.mouse.get_pos()
   rotation = float(pos[0])/300

   for i in branches:
      i.display(rotation)
   for i in leaves:
      i.display(rotation)

   pygame.display.flip()
   

pygame.quit()

Back to top Go down
View user profile
MitochondriaBox
Learner


Posts : 188
Reputation : 7
Join date : 2013-01-29
Age : 17
Location : Houston, Texas

PostSubject: Re: Proceedural Tree Generator   Sat Feb 21, 2015 2:20 pm

Neat! It might not work for Thrive if plants will be alive (heh rhymes), since the player's supposed to have the chance to actually play as them if they take that direction in the Multicellular Stage. Then again, this COULD be applied to them growing, since not all the player's plants'll turn out the same, with evolution limited to certain parameters (general shape, etc.). Stats could be attached to them and have the organism procedurally change accordingly. I dunnno.

What was your buddy working on?
Back to top Go down
View user profile
tjwhale
Theorist


Posts : 87
Reputation : 26
Join date : 2014-09-07

PostSubject: Re: Proceedural Tree Generator   Sat Feb 21, 2015 2:56 pm


I think the game will look very different if you are playing as a tree. This prototype is more like a tiny step towards being able to procedurally generate a landscape for your animal to wander around in. We're going to need whole forests of different trees.

He's working on a game, I can't really say too much about it but suffice to say your dragons can get shot down by Tesla coils, so it's going to be awesome and crazy.
Back to top Go down
View user profile
tjwhale
Theorist


Posts : 87
Reputation : 26
Join date : 2014-09-07

PostSubject: Re: Proceedural Tree Generator   Sat Feb 21, 2015 3:54 pm

Managed to get a couple of different types of  tree. It's a bit of a struggle to get it to do certain things but hopefully it should be possible to get some good variety going.

Spoiler:
 
Back to top Go down
View user profile
crovea
Programming Team lead


Posts : 310
Reputation : 59
Join date : 2013-10-07
Age : 26
Location : Denmark

PostSubject: Re: Proceedural Tree Generator   Sat Feb 21, 2015 8:41 pm

I can think of ways this can become useful in the future!

_________________
- jjonj on github/reddit, jjonjex/Jacob Jensen on skype
Back to top Go down
View user profile
Sponsored content




PostSubject: Re: Proceedural Tree Generator   Today at 11:56 pm

Back to top Go down
 
Proceedural Tree Generator
View previous topic View next topic Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Thrive Game Development :: Development :: Design :: Prototypes-
Jump to: