#include "TreeTemplate.h" TreeTemplate::TreeTemplate( float propability, const BlockType* zWoodType, const BlockType* zLeaveType, int minHeight, int maxHeight ) : GenerationTemplate( propability, 0, 1, Framework::Vec3( -2, -2, 0 ), Framework::Vec3( 5, 5, maxHeight ) ), zWoodType( zWoodType ), zLeaveType( zLeaveType ), minHeight( minHeight ), maxHeight( maxHeight ) {} GeneratedStructure* TreeTemplate::generateAt( Framework::Vec3 location, Noise* zNoise ) { double noise = zNoise->getNoise( (double)location.x + 40, (double)location.y + 70, (double)location.z - 20 ); int height = (int)(minHeight + (noise * (maxHeight - minHeight))); GeneratedStructure* generated = new GeneratedStructure( dynamic_cast(getThis()), location, Framework::Vec3( 5, 5, height ), Framework::Vec3( -2, -2, 0 ) + location ); for( int x = 1; x < 4; x++ ) { for( int y = 1; y < 4; y++ ) { generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( x, y, height - 1 ) ); generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( x, y, height - 5 ) ); } } for( int z = height - 2; z >= height - 4; z-- ) { for( int x = 1; x < 4; x++ ) { generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( x, 0, z ) ); generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( 0, x, z ) ); generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( x, 4, z ) ); generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( 4, x, z ) ); for( int y = 1; y < 4; y++ ) generated->setBlockAt( zLeaveType->getId(), Framework::Vec3( x, y, z ) ); } } for( int i = 0; i < height - 1; i++ ) generated->setBlockAt( zWoodType->getId(), Framework::Vec3( 2, 2, i ) ); return generated; }