mirror of
				https://github.com/MapMakersAndProgrammers/alternativa3d-archive.git
				synced 2025-10-30 17:05:17 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
| package alternativa.engine3d.display {
 | ||
| 	import alternativa.engine3d.*;
 | ||
| 	import alternativa.engine3d.core.PolyPrimitive;
 | ||
| 	import alternativa.engine3d.materials.SurfaceMaterial;
 | ||
| 	
 | ||
| 	import flash.display.Graphics;
 | ||
| 	import flash.display.Sprite;
 | ||
| 	
 | ||
| 	use namespace alternativa3d;
 | ||
| 	
 | ||
| 	/**
 | ||
| 	 * @private
 | ||
| 	 * Контейнер, исползуемый материалами для отрисовки примитивов. Каждый примитив BSP-дерева рисуется в своём контейнере.
 | ||
| 	 */
 | ||
| 	public class Skin extends Sprite {
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Графика скина (для быстрого доступа)
 | ||
| 		 */
 | ||
| 		alternativa3d var gfx:Graphics = graphics;
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Ссылка на следующий скин
 | ||
| 		 */
 | ||
| 		alternativa3d var nextSkin:Skin;
 | ||
| 		
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Примитив
 | ||
| 		 */
 | ||
| 		alternativa3d var primitive:PolyPrimitive;
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Материал, связанный со скином.
 | ||
| 		 */
 | ||
| 		alternativa3d var material:SurfaceMaterial;
 | ||
| 		
 | ||
| 		// Хранилище неиспользуемых скинов
 | ||
| 		static private var collector:Array = new Array();
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Создание скина.
 | ||
| 		 */
 | ||
| 		static alternativa3d function createSkin():Skin {
 | ||
| 			// Достаём скин из коллектора
 | ||
| 			var skin:Skin = collector.pop();
 | ||
| 			// Если коллектор пуст, создаём новый скин
 | ||
| 			if (skin == null) {
 | ||
| 				skin = new Skin();
 | ||
| 			}
 | ||
| 			return skin;
 | ||
| 		}
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * @private
 | ||
| 		 * Удаление скина, все ссылки должны быть почищены.
 | ||
| 		 */
 | ||
| 		static alternativa3d function destroySkin(skin:Skin):void {
 | ||
| 			collector.push(skin);
 | ||
| 		}
 | ||
| 	}
 | ||
| } | 
