<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.flare3d.com/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.flare3d.com/index.php?feed=atom&amp;title=Special%3ARecentChanges</id>
		<title>Flare3D - WIKI  - Recent changes [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.flare3d.com/index.php?feed=atom&amp;title=Special%3ARecentChanges"/>
		<link rel="alternate" type="text/html" href="http://wiki.flare3d.com/index.php/Special:RecentChanges"/>
		<updated>2012-05-17T06:20:27Z</updated>
		<subtitle>Track the most recent changes to the wiki in this feed.</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>http://wiki.flare3d.com/index.php?title=Bullet_Collision&amp;diff=431&amp;oldid=prev</id>
		<title>Bullet Collision</title>
		<link rel="alternate" type="text/html" href="http://wiki.flare3d.com/index.php?title=Bullet_Collision&amp;diff=431&amp;oldid=prev"/>
				<updated>2012-05-11T13:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This example shows how to use SphereCollision to perform bullet collisions.&lt;br /&gt;
Use arrows to move and spacebar to shoot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;flash&amp;gt;file=http://wiki.flare3d.com/demos/collisionsExample.swf|width=800|height=450|quality=best|wmode=direct&amp;lt;/flash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;actionscript&amp;quot;&amp;gt;&lt;br /&gt;
package &lt;br /&gt;
{&lt;br /&gt;
	import flare.basic.Scene3D;&lt;br /&gt;
	import flare.basic.Viewer3D;&lt;br /&gt;
	import flare.materials.filters.ColorFilter;&lt;br /&gt;
	import flare.materials.filters.LightFilter;&lt;br /&gt;
	import flare.materials.Shader3D;&lt;br /&gt;
	import flare.primitives.Cube;&lt;br /&gt;
	import flare.primitives.Cylinder;&lt;br /&gt;
	import flare.primitives.Plane;&lt;br /&gt;
	import flare.system.Input3D;&lt;br /&gt;
	import flare.utils.Pivot3DUtils;&lt;br /&gt;
	import flash.display.Sprite;&lt;br /&gt;
	import flash.events.Event;&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * ...&lt;br /&gt;
	 * @author Ivan Vodopiviz&lt;br /&gt;
	 */&lt;br /&gt;
	&lt;br /&gt;
	[SWF(frameRate = 60, width = 800, height = 450, backgroundColor = 0x000000)]&lt;br /&gt;
	 &lt;br /&gt;
	public class Main extends Sprite &lt;br /&gt;
	{&lt;br /&gt;
		private var _scene:Scene3D;&lt;br /&gt;
		&lt;br /&gt;
		private var _floor:Plane = new Plane( &amp;quot;&amp;quot;, 500, 500 );&lt;br /&gt;
		private var _player:Cube = new Cube();&lt;br /&gt;
		private var _bulletMesh:Cube = new Cube( &amp;quot;&amp;quot;, 2, 2 );&lt;br /&gt;
		&lt;br /&gt;
		private var _enemyPool:Vector.&amp;lt;Cube&amp;gt; = new Vector.&amp;lt;Cube&amp;gt;( 20 );&lt;br /&gt;
		private var _bulletPool:Vector.&amp;lt;Bullet&amp;gt; = new Vector.&amp;lt;Bullet&amp;gt;( 100 );&lt;br /&gt;
		&lt;br /&gt;
		private var _playerMaterial:Shader3D;&lt;br /&gt;
		private var _enemyMaterial:Shader3D;&lt;br /&gt;
		&lt;br /&gt;
		public function Main():void &lt;br /&gt;
		{&lt;br /&gt;
			_scene = new Viewer3D( this );&lt;br /&gt;
			_scene.antialias = 2;&lt;br /&gt;
			&lt;br /&gt;
			_scene.camera.setPosition( 50, 60, -100 );&lt;br /&gt;
			_scene.camera.lookAt( 0, 0, 0 );&lt;br /&gt;
			&lt;br /&gt;
			_scene.addChild( _floor );&lt;br /&gt;
			_floor.setRotation( 90, 0, 0 );&lt;br /&gt;
			&lt;br /&gt;
			_scene.addChild( _player );&lt;br /&gt;
			_player.setPosition( 0, _player.height / 2, 0 );&lt;br /&gt;
			&lt;br /&gt;
			_scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent );&lt;br /&gt;
			&lt;br /&gt;
			init();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		private function init():void&lt;br /&gt;
		{&lt;br /&gt;
			// create materials&lt;br /&gt;
			_playerMaterial = new Shader3D( &amp;quot;&amp;quot;, [new ColorFilter( 0x0000ff )] );&lt;br /&gt;
			_player.setMaterial( _playerMaterial );&lt;br /&gt;
			&lt;br /&gt;
			var cannon:Cylinder = new Cylinder( &amp;quot;&amp;quot;, 2 , 20 );&lt;br /&gt;
			_player.addChild( cannon );&lt;br /&gt;
			cannon.rotateX( 90 );&lt;br /&gt;
			&lt;br /&gt;
			_enemyMaterial = new Shader3D( &amp;quot;&amp;quot;, [new ColorFilter( 0x00ff00 )] );&lt;br /&gt;
			&lt;br /&gt;
			// create enemies&lt;br /&gt;
			for ( var j:int = 0; j &amp;lt; _enemyPool.length; j++ )&lt;br /&gt;
			{&lt;br /&gt;
				var newEnemy:Cube = new Cube();&lt;br /&gt;
				_enemyPool[j] = newEnemy;&lt;br /&gt;
				&lt;br /&gt;
				_scene.addChild( newEnemy );&lt;br /&gt;
				newEnemy.setPosition( -200 * Math.random(), newEnemy.height / 2, 200 * Math.random() );&lt;br /&gt;
				newEnemy.setMaterial( _enemyMaterial );&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			// create bullets&lt;br /&gt;
			for ( var i:int = 0; i &amp;lt; _bulletPool.length; i++ )&lt;br /&gt;
			{&lt;br /&gt;
				var newBullet:Bullet = new Bullet( _bulletMesh.clone() );&lt;br /&gt;
				_bulletPool[i] = newBullet;&lt;br /&gt;
				newBullet.visible = false;&lt;br /&gt;
				&lt;br /&gt;
				_scene.addChild( newBullet );&lt;br /&gt;
				newBullet.setCollitions( _enemyPool );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		private function updateEvent( e:Event ):void &lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			if ( Input3D.keyDown( Input3D.UP ) ) _player.translateZ( 3 );&lt;br /&gt;
			if ( Input3D.keyDown( Input3D.DOWN ) ) _player.translateZ( -3 );&lt;br /&gt;
			if ( Input3D.keyDown( Input3D.LEFT ) ) _player.rotateY( -3 );&lt;br /&gt;
			if ( Input3D.keyDown( Input3D.RIGHT ) ) _player.rotateY( 3 );&lt;br /&gt;
			&lt;br /&gt;
			if ( Input3D.keyHit( Input3D.SPACE ) ) fireBullet();&lt;br /&gt;
			&lt;br /&gt;
			Pivot3DUtils.setPositionWithReference( _scene.camera, 0, 20, -40, _player, 0.1 );&lt;br /&gt;
			Pivot3DUtils.lookAtWithReference( _scene.camera, 0, 0, 0, _player );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		private function fireBullet():void&lt;br /&gt;
		{&lt;br /&gt;
			for each ( var bullet:Bullet in _bulletPool )&lt;br /&gt;
			{&lt;br /&gt;
				if ( !bullet.alive )&lt;br /&gt;
				{&lt;br /&gt;
					bullet.resetAt( _player );&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import flare.collisions.CollisionInfo;&lt;br /&gt;
import flare.collisions.SphereCollision;&lt;br /&gt;
import flare.core.Mesh3D;&lt;br /&gt;
import flare.core.Pivot3D;&lt;br /&gt;
import flare.materials.filters.ColorFilter;&lt;br /&gt;
import flare.materials.Shader3D;&lt;br /&gt;
import flare.primitives.Cube;&lt;br /&gt;
import flare.utils.Vector3DUtils;&lt;br /&gt;
import flash.events.Event;&lt;br /&gt;
import flash.geom.Vector3D;&lt;br /&gt;
&lt;br /&gt;
class Bullet extends Pivot3D&lt;br /&gt;
{&lt;br /&gt;
	private var _alive:Boolean = false;&lt;br /&gt;
	private var _traveled:Number = 0;&lt;br /&gt;
	private var _collision:SphereCollision;&lt;br /&gt;
	&lt;br /&gt;
	private var _deadEnemyMaterial:Shader3D;&lt;br /&gt;
	&lt;br /&gt;
	public function Bullet( mesh:Pivot3D )&lt;br /&gt;
	{&lt;br /&gt;
		super();&lt;br /&gt;
		&lt;br /&gt;
		addChild( mesh );&lt;br /&gt;
		_collision = new SphereCollision( this );&lt;br /&gt;
		&lt;br /&gt;
		addEventListener( Pivot3D.ENTER_FRAME_EVENT, updateEvent );&lt;br /&gt;
		&lt;br /&gt;
		_deadEnemyMaterial = new Shader3D( &amp;quot;&amp;quot;, [new ColorFilter( 0xff0000 )] );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function setCollitions( enemies:Vector.&amp;lt;Cube&amp;gt; ):void&lt;br /&gt;
	{&lt;br /&gt;
		for each ( var cube:Cube in enemies )&lt;br /&gt;
		{&lt;br /&gt;
			_collision.addCollisionWith( cube );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private function updateEvent( e:Event ):void &lt;br /&gt;
	{&lt;br /&gt;
		translateZ( 10 );&lt;br /&gt;
		_traveled += 10;&lt;br /&gt;
		&lt;br /&gt;
		if ( alive )&lt;br /&gt;
		{&lt;br /&gt;
			if ( _traveled &amp;gt; 1500 )&lt;br /&gt;
			{&lt;br /&gt;
				alive = false;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( _collision.fixed() )&lt;br /&gt;
			{&lt;br /&gt;
				var collisionInfo:CollisionInfo = _collision.data[0];&lt;br /&gt;
				collisionInfo.mesh.setMaterial( _deadEnemyMaterial );&lt;br /&gt;
				&lt;br /&gt;
				var dir:Vector3D = getDir(false);&lt;br /&gt;
				&lt;br /&gt;
				Vector3DUtils.mirror( dir, collisionInfo.normal, dir );&lt;br /&gt;
				&lt;br /&gt;
				setOrientation( dir );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function resetAt( pivot:Pivot3D ):void &lt;br /&gt;
	{&lt;br /&gt;
		_traveled = 0;&lt;br /&gt;
		&lt;br /&gt;
		copyTransformFrom( pivot );&lt;br /&gt;
		_collision.reset();&lt;br /&gt;
		&lt;br /&gt;
		alive = true;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function get alive():Boolean &lt;br /&gt;
	{&lt;br /&gt;
		return _alive;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function set alive( value:Boolean ):void &lt;br /&gt;
	{&lt;br /&gt;
		_alive = value;&lt;br /&gt;
		visible = value;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>	</entry>

	<entry>
		<id>http://wiki.flare3d.com/index.php?title=Code_Utilities&amp;diff=428&amp;oldid=prev</id>
		<title>Code Utilities</title>
		<link rel="alternate" type="text/html" href="http://wiki.flare3d.com/index.php?title=Code_Utilities&amp;diff=428&amp;oldid=prev"/>
				<updated>2012-05-10T19:41:38Z</updated>
		
		<summary type="html">&lt;p&gt;Added bullet collision tutorial&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:41, 10 May 2012&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Verlets / Cloths]] - This example shows a physics integration using verlets to simulate cloths.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Verlets / Cloths]] - This example shows a physics integration using verlets to simulate cloths.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;*[[Bullet Collision]] - This example shows how to use SphereCollisions to perform bullet collisions.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ivan</name></author>	</entry>

	</feed>
