Добавлен Objects

Добавлен Objects

error: pathspec 'src/main/org/shypl/common/lang/Objects.as' did not match any file(s) known to git

--- src/main/org/shypl/common/lang/Objects.as
+++ src/main/org/shypl/common/lang/Objects.as
@@ -0,0 +1,17 @@
+package org.shypl.common.lang {
+	public final class Objects {
+		public static function isNull(obj:Object):Boolean {
+			return obj === null;
+		}
+
+		public static function notNull(obj:Object):Boolean {
+			return obj !== null;
+		}
+
+		public static function requireNotNull(obj:Object, message:String = null):void {
+			if (obj == null) {
+				throw new NullPointerException(message);
+			}
+		}
+	}
+}


add a CallLaterBead

add a CallLaterBead

error: pathspec 'frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/CallLaterBead.as' did not match any file(s) known to git

--- frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/CallLaterBead.as
+++ frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/CallLaterBead.as
@@ -0,0 +1,112 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core
+{
+    import flash.display.DisplayObject;
+    import flash.events.Event;
+
+    import org.apache.flex.core.IBead;
+    import org.apache.flex.core.IStrand;
+
+    /**
+     *  The CallLater bead implements ways for
+     *  a method to be called after other code has
+     *  finished running.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class CallLaterBead implements IBead
+	{
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function CallLaterBead()
+		{
+			super();
+		}
+
+        private var _strand:IStrand;
+
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function set strand(value:IStrand):void
+        {
+            _strand = value;
+        }
+
+        private var calls:Array;
+
+        /**
+         *  Calls a function after some amount of time.
+         *
+         *  CallLater works a bit differently than in
+         *  the Flex SDK.  The Flex SDK version was
+         *  could use the Flash Player's RENDER event
+         *  to try to run code before the scren was
+         *  updated.  Since there is no deferred rendering
+         *  in HTML/JS/CSS, this version of callLater
+         *  is almost always going to run after the
+         *  screen is updated.
+         *
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function callLater(fn:Function, args:Array = null, thisArg:Object = null):void
+        {
+            DisplayObject(_strand).addEventListener(Event.ENTER_FRAME, enterFrameHandler);
+            if (calls == null)
+                calls = [ {thisArg: thisArg, fn: fn, args: args } ];
+            else
+                calls.push({thisArg: thisArg, fn: fn, args: args });
+        }
+
+        private function enterFrameHandler(event:Event):void
+        {
+            DisplayObject(_strand).removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
+
+            var list:Array = calls;
+            var n:int = list.length;
+            for (var i:int = 0; i < n; i++)
+            {
+                var call:Object = list.shift();
+                var fn:Function = call.fn;
+                fn.apply(call.thisArg, call.args);
+            }
+
+        }
+
+    }
+}


everything changed with the turning and tail following. trying to fix before alpha but we still have old version.

error: pathspec 'src/Mukik_2.as' did not match any file(s) known to git

--- src/Mukik_2.as
+++ src/Mukik_2.as
@@ -0,0 +1,456 @@
+package
+{//old version still on github if this gets too screwed up
+	import flash.display.DisplayObject;
+	import flash.display.Sprite;
+	import flash.events.Event;
+	import flash.events.KeyboardEvent;
+	import flash.ui.Keyboard;
+
+	[SWF(width="650", height="500", backgroundColor="#000000", frameRate="24")]
+
+	public class Mukik extends Sprite
+	{
+		public var background: Background = new Background();
+		public var snake:Snake;
+		public var b:int = 20;//variable for the box size of the game... the size of the square of the snake's body parts.
+		public var xTurn:int;
+		public var yTurn:int;
+		private var board: Array = new Array();
+		private var rock:Rock;
+		private var rocks:Array = new Array();
+		public var symbol:SymRock;
+		private var symRocks:Array = new Array();
+
+		public var size:int = 3; //length of the snake
+		public var snakeBods:Array = new Array();
+		public var bod:SnakeBod;
+		private var tail:SnakeTail = new SnakeTail();
+		public var vx:int;
+		public var vy:int;
+		public var bvx:int;
+		public var bvy:int;
+		//public var path:Array = new Array(size);//idk
+		public var dir:String; //l,r,u,d for the direction the snake is going.
+		public var turn:Boolean = false;
+		public var bounce:Boolean = false;
+		private var path: Array = new Array(size+1);  //this three dimensional array holds the number of snake body segments (including the tail) of path[i][x,y,r] = [x position, y position, and rotation being 0,1,2,3] for 0=vertical 1=90 degrees clockwise 2=180 and 3=270!  This will be stored 10 times for each segment to follow the path of the snake head.
+		private var pCount:int = 0; //path counter
+		private var pathMax:int = b/2;  // maximum paths needed to remember = the width of a body divided by the pixels moved per frame... or b/vx. if vx/y changes you must change 2 to match.
+		public function Mukik()
+		{
+			board =
+				[
+					[0,0,0,0,0,0,0,0,0,0,0],
+					[0,0,0,0,0,0,0,0,0,0,0],
+					[0,0,4,2,3,1,2,2,4,0,0],
+					[0,0,2,0,0,0,0,0,1,1,4],
+					[4,1,1,0,0,0,0,0,3,0,0],
+					[0,0,3,0,0,4,1,3,2,0,0],
+					[0,0,3,0,0,3,0,0,1,0,0],
+					[0,0,4,0,0,2,0,0,1,0,0]
+				];
+			createGame();
+			setupListeners();
+
+		}
+		public function createGame():void {
+			snake = new Snake(0);
+			addObject(background, 0, 0);
+
+
+
+			for (var i:int=0;i<board.length;i++) {
+				for (var j:int=0;j<board[0].length;j++) {
+					if (board[i][j] > 0) {       //if the board has something other than zero put a rock there.
+						rock = new Rock();
+						addObject(rock, j*50 + 50, i*50 + 50);
+						rocks.push(rock);
+
+						if(board[i][j] == 1) {    //if the number is one put a hidden triangle there
+							symbol = new SymRock(0);
+							addObject(symbol, j*50 + 50, i*50 + 50);
+							symRocks.push(symbol);
+							symbol.visible = false;
+						}
+						if(board[i][j] == 2) {    //if the number is two put a hidden square there
+							symbol = new SymRock(1);
+							addObject(symbol, j*50 + 50, i*50 + 50);
+							symRocks.push(symbol);
+							symbol.visible = false;
+						}
+						if(board[i][j] == 3) {    //if the number is three put a hidden cross there
+							symbol = new SymRock(2);
+							addObject(symbol, j*50 + 50, i*50 + 50);
+							symRocks.push(symbol);
+							symbol.visible = false;
+						}
+						if(board[i][j] == 4) {    //if the number is four put a hidden skull there
+							symbol = new SymRock(3);
+							addObject(symbol, j*50 + 50, i*50 + 50);
+							symRocks.push(symbol);
+							symbol.visible = false;
+						}
+					}
+				}
+			}
+
+			for (var i:int = 0; i<path.length; i++) {
+				path[i] = [[0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0]];
+			}
+
+			addBody(size);
+			addObject(snake, 200, 50);
+			dir = 'r';
+		}
+		public function addObject(object:Sprite, xpos:int, ypos:int):void {
+			stage.addChild(object);
+			object.x = xpos;
+			object.y = ypos;
+		}
+		public function setupListeners():void {
+			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
+			//stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);  //not needed for constant movement.
+			stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
+		}
+		public function addBody(size:int):void {
+
+			//Add the body segments
+
+			for(var i:int = 0; i<size; i++){
+				bod = new SnakeBod();
+
+				addObject(bod, path[0][0][0], path[0][0][1]);	//use path to place the bodies
+				bod.rotation = 90;
+				//bod.visible = false;
+				snakeBods.push(bod);
+
+			}
+
+			addObject(tail,path[0][0][0], path[0][0][1]);
+			tail.rotation = 90;
+			//tail.visible = false;
+			snakeBods.push(tail);
+		}
+		//addPath is the soul of the snake body movement.
+		public function addPath(x:int, y:int, r:int):void {
+			var rot:int;
+			var temp:Array = new Array();
+			if (r == 0) {rot=0;}
+			else if (r == 90) {rot=1;}
+			else if (r == 180) {rot=2;}
+			else {rot=3;}
+
+			if (pCount < pathMax) {
+				path[0][pCount] = [x,y,rot];
+			}
+			pCount += 1;
+			if (pCount == pathMax) {
+				pCount = 0;
+				for(var i:int = size; i > 0 ; i--) {
+					path[i] = path[i-1];
+				}
+				/* dont think I need this now.
+				bodyCount += 1;
+
+				if (bodyCount == size+1) {
+					bodyCount = 0;
+				}
+				*/
+			}
+
+
+
+		}
+
+
+		public function enterFrameHandler(event:Event):void {
+			//var p:int = 0;
+			snake.x += vx;
+			snake.y += vy;
+			addPath(snake.x, snake.y, snake.rotation);
+			for(var i:int = 0; i<snakeBods.length-1; i++) {
+				//if (path[i+1][0][0] != 0) {
+					//snakeBods[i].visible = true;
+					snakeBods[i].x = path[i+1][pCount][0];
+					snakeBods[i].y = path[i+1][pCount][1];
+					if (path[i+1][pCount][2] == 1) {
+						snakeBods[i].rotation = 90;
+					}
+					else if (path[i+1][pCount][2] == 2) {
+						snakeBods[i].rotation = 180;
+					}
+					else if (path[i+1][pCount][2] == 3) {
+						snakeBods[i].rotation = -90;
+					}
+					else snakeBods[i].rotation = 0;
+				//}
+
+			}
+			//set the vision
+
+			//checking for collision type and direction
+			for (var i:int = 0; i<rocks.length; i++) {
+				if (Math.abs(snake.x-rocks[i].x) < 150 && Math.abs(snake.y-rocks[i].y) < 200) {
+					symRocks[i].visible = true;
+				}
+				else {symRocks[i].visible = false;}
+
+				if (snake.hitTestObject(rocks[i]) && snake.type == symRocks[i].type) {
+					rocks[i].visible = false;
+					//symRocks[i] = null;
+					//rocks[i] = null;
+					//this.removeChild(symRocks[i]);
+				}
+				else if (snake.hitTestObject(rocks[i])) {
+
+						if (dir=="d") {
+							reverse("up", snake);
+						}
+						if (dir =="u") {
+							reverse("down", snake);
+						}
+						if (dir=="r") {
+							reverse("left", snake);
+						}
+						if (dir=="l") {
+							reverse("right", snake);
+						}
+
+				}
+			}
+
+
+
+
+
+
+			/*
+			else {
+
+			}
+			*/
+
+				/*
+				if (snakeBods[i].x < 50){
+					snakeBods[i].x = 50;
+				}
+
+				if (snakeBods[i].x > stage.stageWidth - 50){
+					snakeBods[i].x = stage.stageWidth-50;
+				}
+				if (snakeBods[i].y > stage.stageHeight - 50){
+					snakeBods[i].y = stage.stageHeight - 50;
+				}
+				if (snakeBods[i].y < 50){
+					snakeBods[i].y = 50;
+				}
+				*/
+
+
+			//I need to redo turnSnake and put all these things that repeat in there.
+			if (snake.x<50) {
+
+
+				reverse("right", snake);
+
+			}
+			if (snake.x>stage.stageWidth-50){
+
+				reverse("left", snake);
+
+			}
+			if (snake.y>stage.stageHeight-50) {
+
+				reverse("up", snake);
+
+			}
+			if (snake.y<50) {
+
+				reverse("down", snake);
+
+			}
+		}
+		public function keyDownHandler(event:KeyboardEvent):void {
+			if(!turn){
+				bvx = vx;
+				bvy = vy;
+			}
+			if(event.keyCode == Keyboard.RIGHT) {
+				vx=2;
+				vy=0;
+				if (dir!='r') {
+					turn = true;
+					xTurn = snake.x;
+
+
+					if (dir=='u') {snake.x+=50;}
+					else {snake.y-=50;}
+					yTurn = snake.y;
+					snake.rotation = 0;
+					dir='r';
+				}
+
+			}
+			else if(event.keyCode == Keyboard.LEFT) {
+				vx=-2;
+				vy=0;
+				if (dir!='l') {
+					turn = true;
+					xTurn = snake.x;
+
+
+					if (dir=='d') {snake.x-=50;}
+					else {snake.y+=50;}
+					yTurn = snake.y;
+					snake.rotation = 180;
+					dir='l';
+				}
+			}
+			else if(event.keyCode == Keyboard.UP) {
+				vy=-2;
+				vx=0;
+				if (dir!='u') {
+					turn = true;
+
+					yTurn = snake.y;
+					if (dir=='l') {snake.y-=50;}
+					else {snake.x-=50;}
+					xTurn = snake.x;
+					snake.rotation = -90;
+					dir='u';
+				}
+			}
+			else if(event.keyCode == Keyboard.DOWN) {
+				vy=2;
+				vx=0;
+				if (dir!='d') {
+					turn = true;
+
+					yTurn = snake.y;
+					if (dir=='r') {snake.y+=50;}
+					else {snake.x+=50;}
+					xTurn = snake.x;
+					snake.rotation = 90;
+					dir='d';
+				}
+			}
+
+		}
+		public function reverse(d:String, snake:Snake): void {
+			bounce = true;
+			if(d == "right"){
+				vx *= -1;
+				vy=0;
+				snake.y-=50;
+				snake.x+=50;
+				xTurn = snake.x;
+				yTurn = snake.y;
+
+				snake.rotation = 0;
+				dir="r";
+			}
+			if (d == "left") {
+				vx *= -1;
+				vy=0;
+				snake.y+=50;
+				snake.x-=50;
+				xTurn = snake.x;
+				yTurn = snake.y;
+
+				snake.rotation = 180;
+				dir="l";
+			}
+			if (d == "up") {
+				vy *= -1;
+				vx=0;
+				snake.x-=50;
+				snake.y-=50;
+				xTurn = snake.x;
+				yTurn = snake.y;
+
+				snake.rotation = -90;
+				dir="u";
+			}
+			if (d == "down") {
+				vy *= -1;
+				vx=0;
+				snake.x+=50;
+				snake.y+=50;
+				xTurn = snake.x;
+				yTurn = snake.y;
+
+				snake.rotation = 90;
+				dir="d";
+			}
+
+		}
+		//all this needs to be fixed again to go along with being added to the stage instead of the snake.
+		//now I am cutting out the use of this method to turn the snake bodies a different way.
+		/*old turn snake
+		public function turnSnake(dir:String, snake:Sprite):void {  //input the direction of the turn with the keyboard event; "up" "down" "left" or "right" (right could actually be any other string.)
+
+			//var bods:Array = body;
+			var p:int = 0;
+			var x:int = snake.x;
+			var y:int = snake.y;
+			if (dir=="up") {
+				snake.rotation = -90;
+				for (var i: int = 0; i<size; i++) {
+					p += 45;
+					snakeBods[i].x = snake.x;
+					snakeBods[i].y = snake.y+p;
+					snakeBods[i].rotation = 0;
+				}
+				p+=45;
+				tail.x = snake.x;
+				tail.y = snake.y+p;
+				tail.rotation = 0;
+			}
+			else if (dir=="down") {
+				snake.rotation = 90;
+				for (var i: int = 0; i<size; i++) {
+					p += 45;
+					snakeBods[i].x = snake.x;
+					snakeBods[i].y = snake.y-p;
+					snakeBods[i].rotation = 180;
+				}
+				p+=45;
+				tail.x = snake.x;
+				tail.y = snake.y-p;
+				tail.rotation = 180;
+			}
+			else if (dir=="left") {
+				snake.rotation = 180;
+				for (var i: int = 0; i<size; i++) {
+					p += 45;
+					snakeBods[i].x = snake.x+p;
+					snakeBods[i].y = snake.y;
+					snakeBods[i].rotation = -90;
+				}
+				p += 45;
+				tail.x = snake.x+p;
+				tail.y = snake.y;
+				tail.rotation = -90;
+			}
+			else {
+				snake.rotation = 0;
+				for (var i: int = 0; i<size; i++) {
+					p += 45;
+					snakeBods[i].x = snake.x-p;
+					snakeBods[i].y = snake.y;
+					snakeBods[i].rotation = 90;
+				}
+				p += 45;
+				tail.x = snake.x-p;
+				tail.y = snake.y;
+				tail.rotation = 90;
+			}
+		}
+		public function removeBod():void {
+			snakeBods.pop();
+			this.removeChild(snakeBods[size-2]);
+		}
+		*/
+	}
+
+}


fixing "defined" method

fixing "defined" method

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Minimal lib to bootstrap the rest of Windmill Flash dynamically.

error: pathspec 'flash/org/windmill/WMBootstrap.as' did not match any file(s) known to git

--- flash/org/windmill/WMBootstrap.as
+++ flash/org/windmill/WMBootstrap.as
@@ -0,0 +1,41 @@
+/*
+Copyright 2009, Matthew Eernisse (mde@fleegix.org) and Slide, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package org.windmill {
+  import flash.display.Loader;
+	import flash.net.URLRequest;
+	import flash.events.Event;
+	import flash.system.ApplicationDomain;
+	import flash.system.LoaderContext;
+
+  public class WMBootstrap {
+    public function WMBootstrap():void {}
+
+    public static function init(context:*):void {
+      var loader:Loader = new Loader();
+			var url:String = '/flash/org/windmill/Windmill.swf';
+			var req:URLRequest = new URLRequest(url);
+			var con:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
+			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function ():void {
+		    var Windmill:*;
+        Windmill = ApplicationDomain.currentDomain.getDefinition("org.windmill.Windmill") as Class;
+        Windmill.init({ context: context });
+      });
+			loader.load(req, con);
+    }
+  }
+}
+


temporarily commenting method (isolated debug purposes)


updated TeX_Sprite.as - 1

updated TeX_Sprite.as - 1

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/malyavkin/badass-tex-renderer.git/'


ISlave load method requires string

ISlave load method requires string


add Library file to build the SWC, this file replace ALL the classes defined in com.google.analytics.components.*

error: pathspec 'src/Library.as' did not match any file(s) known to git

--- src/Library.as
+++ src/Library.as
@@ -0,0 +1,41 @@
+
+/*
+ * Copyright 2008 Adobe Systems Inc., 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributor(s):
+ *   Zwetan Kjukov <zwetan@gmail.com>.
+ */
+
+package
+{
+    import flash.display.Sprite;
+
+    /**
+     * The basic framework Library to be included in the SWC.
+     *

+     * Note: This class is not a component, it is just
+     * a shim that allow to declare the SWC manifest and associate an icon file.
+     *

+     */
+    [ExcludeClass]
+    [IconFile("gaforflash.png")]
+    public class Library extends Sprite
+    {
+        public function Library()
+        {
+        }
+
+    }
+}


fixing the Router listening routine

fixing the Router listening routine


removed references to missing type KalturaResponseType

--- generator/sources/as3/com/kaltura/delegates/WebDelegateBase.as
+++ generator/sources/as3/com/kaltura/delegates/WebDelegateBase.as
@@ -35,7 +35,6 @@
 	import com.kaltura.errors.KalturaError;
 	import com.kaltura.events.KalturaEvent;
 	import com.kaltura.net.KalturaCall;
-	import com.kaltura.types.KalturaResponseType;

 	import flash.events.ErrorEvent;
 	import flash.events.Event;
@@ -181,7 +180,6 @@

 			_call.setRequestArgument("ignoreNull", _config.ignoreNull);
 			_call.setRequestArgument("apiVersion", KalturaClient.API_VERSION);
-			_call.setRequestArgument("format", KalturaResponseType.RESPONSE_TYPE_XML);

 			//Create signature hash.
 			//call.setRequestArgument("kalsig", getMD5Checksum(call));


Added a new AbstractEntity class

Added a new AbstractEntity class

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@956 fda5f131-174c-0410-8613-e0905860106b

fatal: unable to access 'https://github.com/openwms/org.openwms.git/': The requested URL returned error: 403


added ConeGeometry primitive

added ConeGeometry primitive

error: pathspec 'src/aerys/minko/scene/node/mesh/geometry/primitive/ConeGeometry.as' did not match any file(s) known to git

--- src/aerys/minko/scene/node/mesh/geometry/primitive/ConeGeometry.as
+++ src/aerys/minko/scene/node/mesh/geometry/primitive/ConeGeometry.as
@@ -0,0 +1,64 @@
+package aerys.minko.scene.node.mesh.geometry.primitive
+{
+	import aerys.minko.scene.node.mesh.geometry.Geometry;
+	import aerys.minko.type.stream.IVertexStream;
+	import aerys.minko.type.stream.IndexStream;
+	import aerys.minko.type.stream.StreamUsage;
+	import aerys.minko.type.stream.VertexStream;
+	import aerys.minko.type.stream.format.VertexFormat;
+
+	public class ConeGeometry extends Geometry
+	{
+		public function ConeGeometry(numSegments		: uint	= 10,
+									 vertexStreamUsage	: uint	= StreamUsage.STATIC,
+									 indexStreamUsage	: uint	= StreamUsage.STATIC)
+		{
+			super(
+				getVertexStreams(numSegments, vertexStreamUsage),
+				getIndexStream(numSegments, indexStreamUsage)
+			);
+		}
+
+		private function getVertexStreams(numSegments 		: uint,
+										  vertexStreamUsage : uint) : Vector.<IVertexStream>
+		{
+			var xyz : Vector.<Number>	= new <Number>[0., .5, 0.];
+
+			for (var segmentId : uint = 0; segmentId < numSegments; ++segmentId)
+			{
+				var angle : Number = (Math.PI * 2.) * (segmentId / numSegments);
+
+				xyz.push(
+					Math.cos(angle),
+					-.5,
+					Math.sin(angle)
+				);
+			}
+
+			xyz.push(0., -.5, 0.);
+
+			return new <IVertexStream>[new VertexStream(vertexStreamUsage, VertexFormat.XYZ, xyz)];
+		}
+
+		private function getIndexStream(numSegments 		: uint,
+										indexStreamUsage	: uint) : IndexStream
+		{
+			var indices : Vector.<uint> = new <uint>[];
+
+			for (var segmentId : uint = 0; segmentId < numSegments - 1; ++segmentId)
+			{
+				indices.push(
+					0, segmentId + 1, segmentId + 2,
+					numSegments + 1, segmentId + 2, segmentId + 1
+				);
+			}
+			// close the shape
+			indices.push(
+				0, segmentId + 1, 1,
+				numSegments + 1, 1, segmentId + 1
+			);
+
+			return new IndexStream(indexStreamUsage, indices);
+		}
+	}
+}


Fiducial with widgets demo app class with TUI

error: pathspec 'fbApplication.as' did not match any file(s) known to git

--- fbApplication.as
+++ fbApplication.as
@@ -0,0 +1,75 @@
+package touchAll.demos.tronFiducialsDemo
+{
+	import flash.display.*;
+	import flash.events.Event;
+	//import flash.events.TransformGestureEvent;
+
+	import org.tuio.fiducial.*;
+
+	import touchAll.*;
+
+	/**
+	 * @author Gonçalo Amador
+	 */
+	//[SWF(width = "1280", height = "720", frameRate = "60", backgroundColor = "#ffffff")]
+	[SWF(width = "1280", height = "720", frameRate = "60", backgroundColor = "#000000")]
+	public class TronFiducialsDemo extends MovieClip implements IDefault
+	{
+		/* global variables */
+		private var tAll:TouchAll = new TouchAll(stage, 1280, 720, 0x0055ff, false);
+		//private var fm:FiducialManager = new FiducialManager(stage, 0x000000, 0x000000, 0xffffff, 0x000000, 0x00BB00, 0x000000, 0xaaaaaa);
+		private var fm:FiducialManager = new FiducialManager(stage, 0x0055ff, 0x000000, 0x0055ff, 0x000000, 0x00BB00, 0x0055ff, 0x0055ff);
+
+		public function TronFiducialsDemo():void
+		{
+			if (stage) init();
+			else addEventListener(Event.ADDED_TO_STAGE, init);
+		}
+
+		private function init(e:Event = null):void
+		{
+			removeEventListener(Event.ADDED_TO_STAGE, init);
+
+			/* LOAD STAGE CONTENT */
+			tAll.backgroundLoader();
+			//backgroundEventListenersLoader();
+
+			/* stage set up */
+			tAll.stageLoader();
+			stageEventListenersLoader();
+
+			/* tuio set up */
+			tAll.tuioLoader();
+		}
+
+		public function stageEventListenersLoader():void {
+			tAll.stageEventListenersLoader();
+			fm.stageEventListenersLoader();
+		}
+
+		public function backgroundEventListenersLoader():void {
+			trace("backgroundEventListenersLoader.");
+		}
+
+		public function fiducialADD(e:FiducialEvent):void {
+			// debug mode console message if Fiducial event captured
+			//trace("Fiducial #" + e.fiducialId + " fiducial added.");
+
+			fm.fiducialADD(e);
+		}
+
+		public function fiducialREMOVE(e:FiducialEvent):void {
+			// debug mode console message if Fiducial event captured
+			//trace("Fiducial #" + e.fiducialId + " fiducial removed.");
+
+			fm.fiducialREMOVE(e);
+		}
+
+		public function fiducialUPDATE(e:FiducialEvent):void {
+			// debug mode console message if Fiducial event captured
+			//trace("Fiducial #" + e.fiducialId + " fiducial update.");
+
+			fm.fiducialUPDATE(e);
+		}
+	}
+}


Implemented CustomGlyphPlotter, not sure if it's useful yet.

error: pathspec 'WeaveUISpark/src/weave/visualization/plotters/CustomGlyphPlotter.as' did not match any file(s) known to git

--- WeaveUISpark/src/weave/visualization/plotters/CustomGlyphPlotter.as
+++ WeaveUISpark/src/weave/visualization/plotters/CustomGlyphPlotter.as
@@ -0,0 +1,139 @@
+/*
+    Weave (Web-based Analysis and Visualization Environment)
+    Copyright (C) 2008-2011 University of Massachusetts Lowell
+
+    This file is a part of Weave.
+
+    Weave is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License, Version 3,
+    as published by the Free Software Foundation.
+
+    Weave is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with Weave.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package weave.visualization.plotters
+{
+	import flash.display.BitmapData;
+
+	import weave.Weave;
+	import weave.api.core.ILinkableHashMap;
+	import weave.api.data.IQualifiedKey;
+	import weave.api.newLinkableChild;
+	import weave.api.primitives.IBounds2D;
+	import weave.api.registerLinkableChild;
+	import weave.api.reportError;
+	import weave.api.ui.IPlotTask;
+	import weave.compiler.ProxyObject;
+	import weave.core.ClassUtils;
+	import weave.core.LinkableFunction;
+	import weave.core.LinkableHashMap;
+	import weave.visualization.plotters.styles.SolidFillStyle;
+	import weave.visualization.plotters.styles.SolidLineStyle;
+
+	/**
+	 * @author adufilie
+	 */
+	public class CustomGlyphPlotter extends AbstractGlyphPlotter
+	{
+		public function CustomGlyphPlotter()
+		{
+			fillStyle.color.internalDynamicColumn.globalName = Weave.DEFAULT_COLOR_COLUMN;
+			setColumnKeySources([dataX, dataY]);
+		}
+
+		/**
+		 * This is the line style used to draw the outline of the rectangle.
+		 */
+		public const lineStyle:SolidLineStyle = registerLinkableChild(this, new SolidLineStyle());
+		/**
+		 * This is the fill style used to fill the rectangle.
+		 */
+		public const fillStyle:SolidFillStyle = registerLinkableChild(this, new SolidFillStyle());
+
+		/**
+		 * This can hold any objects that should be stored in the session state.
+		 */
+		public const vars:ILinkableHashMap = newLinkableChild(this, LinkableHashMap);
+
+		private const _thisProxy:ProxyObject = new ProxyObject(hasVar, getVar, setVar);
+		private function hasVar(name:String):Boolean
+		{
+			return this.hasOwnProperty(name) || vars.getObject(name) != null;
+		}
+		private function getVar(name:String):*
+		{
+			return this.hasOwnProperty(name) ? this[name] : vars.getObject(name);
+		}
+		private function setVar(name:String, value:*):void
+		{
+			if (this.hasOwnProperty(name))
+			{
+				this[name] = value;
+				return;
+			}
+
+			if (value is String)
+				value = ClassUtils.getClassDefinition(value);
+			vars.requestObject(name, value, false);
+		}
+
+		public const function_drawPlotAsyncIteration:LinkableFunction = registerLinkableChild(this, new LinkableFunction(null, false, true, ['task']));
+		override public function drawPlotAsyncIteration(task:IPlotTask):Number
+		{
+			try
+			{
+				return function_drawPlotAsyncIteration.apply(_thisProxy, arguments);
+			}
+			catch (e:*)
+			{
+				reportError(e);
+			}
+			return 1;
+		}
+
+		public const function_drawBackground:LinkableFunction = registerLinkableChild(this, new LinkableFunction(null, false, true, ['dataBounds', 'screenBounds', 'destination']));
+		override public function drawBackground(dataBounds:IBounds2D, screenBounds:IBounds2D, destination:BitmapData):void
+		{
+			try
+			{
+				function_drawBackground.apply(_thisProxy, arguments);
+			}
+			catch (e:*)
+			{
+				reportError(e);
+			}
+		}
+
+		public const function_getDataBoundsFromRecordKey:LinkableFunction = registerSpatialProperty(new LinkableFunction(null, false, true, ['key', 'output']));
+		override public function getDataBoundsFromRecordKey(key:IQualifiedKey, output:Array):void
+		{
+			try
+			{
+				function_getDataBoundsFromRecordKey.apply(_thisProxy, arguments);
+			}
+			catch (e:*)
+			{
+				reportError(e);
+			}
+		}
+
+		public const function_getBackgroundDataBounds:LinkableFunction = registerSpatialProperty(new LinkableFunction(null, false, true, ['output']));
+		override public function getBackgroundDataBounds(output:IBounds2D):void
+		{
+			try
+			{
+				function_getBackgroundDataBounds.apply(_thisProxy, arguments);
+			}
+			catch (e:*)
+			{
+				reportError(e);
+			}
+		}
+	}
+}


better flex unit console logging

better flex unit console logging

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/noikiy/amfphp-2.0.git/'


adding update text function for the winBar

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jkanchelov/VideoPoker.git/'


removing prop that was holding the embedder instance

fatal: unable to access 'https://github.com/rafaelcordoba/cocktail-demo.git/': The requested URL returned error: 403


Image Match picture can be uploaded for each location.

error: pathspec 'flexEditor/src/org/arisgames/editor/view/ImageMatchEditorView.as' did not match any file(s) known to git

--- flexEditor/src/org/arisgames/editor/view/ImageMatchEditorView.as
+++ flexEditor/src/org/arisgames/editor/view/ImageMatchEditorView.as
@@ -0,0 +1,198 @@
+package org.arisgames.editor.view
+{
+	import flash.events.MouseEvent;
+
+	import mx.collections.ArrayCollection;
+	import mx.containers.Canvas;
+	import mx.containers.Panel;
+	import mx.controls.Alert;
+	import mx.controls.Button;
+	import mx.controls.DataGrid;
+	import mx.controls.Image;
+	import mx.controls.Label;
+	import mx.controls.LinkButton;
+	import mx.events.DataGridEvent;
+	import mx.events.DynamicEvent;
+	import mx.events.FlexEvent;
+	import mx.managers.PopUpManager;
+	import mx.rpc.Responder;
+
+	import org.arisgames.editor.data.arisserver.Media;
+	import org.arisgames.editor.components.PlaceMarker;
+	import org.arisgames.editor.components.PlaceMarkerEditorMediaPickerMX;
+	import org.arisgames.editor.data.PlaceMark;
+	import org.arisgames.editor.models.GameModel;
+	import org.arisgames.editor.services.AppServices;
+	import org.arisgames.editor.util.AppConstants;
+	import org.arisgames.editor.util.AppDynamicEventManager;
+	import org.arisgames.editor.util.AppUtils;
+
+
+	public class ImageMatchEditorView extends Panel
+	{
+
+		public var placeMark:PlaceMark;
+		public var placeMarker:PlaceMarker;
+
+
+		// GUI
+		[Bindable] public var closeButton:Button;
+
+		[Bindable] public var mediaImageCanvas:Canvas;
+		[Bindable] public var mediaPreviewImage:Image;
+		[Bindable] public var mediaRemoveButton:Button;
+		[Bindable] public var mediaNoMediaLabel:Label;
+		[Bindable] public var mediaPopupMediaPickerButton:Button;
+
+		private var mediaPicker:PlaceMarkerEditorMediaPickerMX;
+
+
+		/**
+		 * Constructor
+		 */
+		public function ImageMatchEditorView()
+		{
+			super();
+			this.addEventListener(FlexEvent.CREATION_COMPLETE, handleInit);
+		}
+
+		private function handleInit(event:FlexEvent):void
+		{
+			mediaRemoveButton.addEventListener(MouseEvent.CLICK, handleMediaRemoveButtonClick);
+			mediaPopupMediaPickerButton.addEventListener(MouseEvent.CLICK, handleMediaPickerButton);
+			closeButton.addEventListener(MouseEvent.CLICK, handleCloseButton);
+		}
+
+		private function handleMediaRemoveButtonClick(evt:MouseEvent):void
+		{
+			trace("handleMediaRemoveButtonClick() called.");
+			this.placeMarker.imageMatchMediaId = 0;
+			this.placeMarker.imageMatchMedia = null;
+			pushDataIntoGUI();
+		}
+
+		private function handleMediaPickerButton(evt:MouseEvent):void
+		{
+			trace("ImageMatchEditorView: handleMediaPickerButton() called...");
+			this.openMediaPicker();
+		}
+
+		private function openMediaPicker():void
+		{
+			mediaPicker = new PlaceMarkerEditorMediaPickerMX();
+			mediaPicker.setPlaceMarker(placeMarker);
+			mediaPicker.delegate = this;
+
+			PopUpManager.addPopUp(mediaPicker, AppUtils.getInstance().getMainView(), true);
+			PopUpManager.centerPopUp(mediaPicker);
+		}
+
+
+		private function pushDataIntoGUI():void
+		{
+			trace("ImageMatchEditorView: pushDataIntoGUI called with imageMatchMedia Id = '" + placeMarker.imageMatchMediaId);
+
+				// Load The Media GUI
+			mediaPopupMediaPickerButton.setVisible(true);
+			mediaPopupMediaPickerButton.includeInLayout = true;
+			if (placeMarker.imageMatchMedia != null && (placeMarker.imageMatchMedia.type == AppConstants.MEDIATYPE_IMAGE || placeMarker.imageMatchMedia.type == AppConstants.MEDIATYPE_ICON))
+			{
+				mediaImageCanvas.setVisible(true);
+				mediaImageCanvas.includeInLayout = true;
+				mediaPreviewImage.setVisible(true);
+				mediaPreviewImage.includeInLayout = true;
+				mediaNoMediaLabel.setVisible(false);
+				mediaNoMediaLabel.includeInLayout = false;
+				mediaRemoveButton.setVisible(true);
+				mediaRemoveButton.includeInLayout = true;
+
+				var mediaurl:String = placeMarker.imageMatchMedia.urlPath + placeMarker.imageMatchMedia.fileName;
+				mediaPreviewImage.source = mediaurl;
+				trace("Just set media image url = '" + mediaurl + "'");
+			}
+			else
+			{
+				mediaImageCanvas.setVisible(true);
+				mediaImageCanvas.includeInLayout = true;
+				mediaPreviewImage.setVisible(false);
+				mediaPreviewImage.includeInLayout = false;
+				mediaNoMediaLabel.setVisible(true);
+				mediaNoMediaLabel.includeInLayout = true;
+				mediaRemoveButton.setVisible(false);
+				mediaRemoveButton.includeInLayout = false;
+			}
+		}
+
+		public function setPlaceMarks(placeMark:PlaceMark, placeMarker:PlaceMarker):void{
+			this.placeMark = placeMark;
+			this.placeMarker = placeMarker;
+
+			if(placeMarker.imageMatchMediaId != 0){
+				if(placeMarker.imageMatchMedia == null){
+					AppServices.getInstance().getMediaByGameIdAndMediaId(GameModel.getInstance().game.gameId, placeMarker.imageMatchMediaId, new Responder(handleLoadImageMatchMedia, handleFault));
+					return;
+				}
+			}
+			pushDataIntoGUI();
+		}
+
+
+		public function didSelectMediaItem(picker:PlaceMarkerEditorMediaPickerMX, m:Media):void
+		{
+			trace("PlaceMarkerEditorMediaDisplayView: didSelectMediaItem()");
+			placeMarker.imageMatchMediaId = m.mediaId;
+			placeMarker.imageMatchMedia = m;
+
+			this.pushDataIntoGUI();
+
+		}
+
+
+
+
+		public function handleLoadImageMatchMedia(obj:Object):void{
+			trace("In handleLoadImageMatchMedia() Result called with obj = " + obj + "; Result = " + obj.result);
+			if (obj.result.returnCode != 0)
+			{
+				trace("Bad loading of media attempt... let's see what happened.  Error = '" + obj.result.returnCodeDescription + "'");
+				var msg:String = obj.result.returnCodeDescription;
+				Alert.show("Error Was: " + msg, "Error While Loading Media");
+				return;
+			}
+
+			placeMarker.imageMatchMedia = new Media();
+			placeMarker.imageMatchMedia.fileName = obj.result.data.file_name;
+			placeMarker.imageMatchMedia.isDefault = obj.result.data.is_default;
+			placeMarker.imageMatchMedia.mediaId = obj.result.data.media_id;
+			placeMarker.imageMatchMedia.name = obj.result.data.name;
+			placeMarker.imageMatchMedia.type = obj.result.data.type;
+			placeMarker.imageMatchMedia.urlPath = obj.result.data.url_path;
+
+			pushDataIntoGUI();
+		}
+
+		public function isPlaceMarkDataLoaded():Boolean
+		{
+			if (this.placeMark != null)
+			{
+				return true;
+			}
+			return false;
+		}
+
+		public function handleCloseButton(evt:MouseEvent):void
+		{
+			trace("Close button clicked...");
+			var de:DynamicEvent = new DynamicEvent(AppConstants.DYNAMICEVENT_CLOSEIMAGEMATCHEDITOR);
+			AppDynamicEventManager.getInstance().dispatchEvent(de);
+		}
+
+
+		public function handleFault(obj:Object):void
+		{
+			trace("Fault called: " + obj.message);
+			Alert.show("Error occurred: " + obj.message, "Problems In ImageMatch Editor");
+		}
+
+	}
+}


FLEX-34456 Added a unit test which reproduces the bug.

error: pathspec 'frameworks/tests/unitTests/mx/collections/HierarchicalCollectionViewCursor_FLEX_34456_Test.as' did not match any file(s) known to git

--- frameworks/tests/unitTests/mx/collections/HierarchicalCollectionViewCursor_FLEX_34456_Test.as
+++ frameworks/tests/unitTests/mx/collections/HierarchicalCollectionViewCursor_FLEX_34456_Test.as
@@ -0,0 +1,166 @@
+package mx.collections
+{
+	import flash.events.UncaughtErrorEvent;
+
+	import mx.core.FlexGlobals;
+
+	import spark.components.WindowedApplication;
+
+	import org.flexunit.asserts.assertEquals;
+	import org.flexunit.asserts.assertNotNull;
+	import org.flexunit.asserts.assertTrue;
+	import org.flexunit.runners.Parameterized;
+
+	[RunWith("org.flexunit.runners.Parameterized")]
+	public class HierarchicalCollectionViewCursor_FLEX_34456_Test
+	{
+        public static var positionAndOperation:Array = [[11, 5, 0], [11, 5, 1]];
+
+        private static const OP_ADD:int = 0;
+        private static const OP_REMOVE:int = 1;
+        private static var _generatedHierarchy:HierarchicalCollectionView;
+        private static var _utils:HierarchicalCollectionViewTestUtils = new HierarchicalCollectionViewTestUtils();
+        private static var _noErrorsThrown:Boolean = true;
+        private static var _currentHierarchy:HierarchicalCollectionView;
+        private static var _sut:HierarchicalCollectionViewCursor;
+        private static var _operationCursor:HierarchicalCollectionViewCursor;
+		private static var _mirrorCursor:HierarchicalCollectionViewCursor;
+
+        private static var foo:Parameterized;
+
+		[BeforeClass]
+		public static function setUpBeforeClass():void
+		{
+			_generatedHierarchy = _utils.generateOpenHierarchyFromRootList(_utils.generateHierarchySourceFromString(HIERARCHY_STRING));
+			(FlexGlobals.topLevelApplication as WindowedApplication).loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtClientError);
+        }
+
+		[AfterClass]
+		public static function tearDownAfterClass():void
+		{
+			(FlexGlobals.topLevelApplication as WindowedApplication).loaderInfo.uncaughtErrorEvents.removeEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtClientError);
+			_generatedHierarchy = null;
+			_utils = null;
+		}
+
+		[Before]
+		public function setUp():void
+		{
+			_currentHierarchy = _utils.clone(_generatedHierarchy);
+			_utils.openAllNodes(_currentHierarchy);
+			_sut = _currentHierarchy.createCursor() as HierarchicalCollectionViewCursor;
+			_sut.name = "_sut";
+		}
+
+		[After]
+		public function tearDown():void
+		{
+			_sut = null;
+			_currentHierarchy = null;
+			_operationCursor = null;
+			_mirrorCursor = null;
+		}
+
+
+		[Test(dataProvider="positionAndOperation")]
+        public function testReproduce_FLEX_34119_Comprehensive(selectedItemIndex:int, operationIndex:int, operation:int):void
+        {
+			//WHEN
+			//1. Select a random node
+			_sut.seek(new CursorBookmark(selectedItemIndex));
+
+            var selectedNode:DataNode = DataNode(_sut.current);
+            assertNotNull(selectedNode);
+
+		   selectedNode.isSelected = true;
+
+            //2. Perform operation
+		   _operationCursor = _currentHierarchy.createCursor() as HierarchicalCollectionViewCursor;
+		   _operationCursor.name = "_operationCursor";
+		   _operationCursor.seek(new CursorBookmark(operationIndex));
+
+            if (operation == OP_ADD)
+                testAddition(_operationCursor);
+            else if (operation == OP_REMOVE)
+                testRemoval(_operationCursor, selectedNode);
+
+            //THEN 1
+            assertTrue(_noErrorsThrown);
+
+            //3. Create mirror HierarchicalCollectionView from the changed root, as the source of truth
+            _mirrorCursor = _utils.navigateToItem(_currentHierarchy.createCursor() as HierarchicalCollectionViewCursor, selectedNode) as HierarchicalCollectionViewCursor;
+			_mirrorCursor.name = "_mirrorCursor";
+
+            //4. Navigate somewhere in both HierarchicalCollectionViews and make sure they do the same thing
+            _sut.moveNext();
+            _mirrorCursor.moveNext();
+
+            //THEN 2
+            assertEquals(_mirrorCursor.current, _sut.current);
+        }
+
+
+	    private function testRemoval(where:HierarchicalCollectionViewCursor, selectedNode:DataNode):void
+	    {
+	        var itemToDelete:DataNode = where.current as DataNode;
+	        assertNotNull(itemToDelete);
+
+	        //mark the next item, so we know which item disappeared
+			where.moveNext();
+	        var nextItem:DataNode = where.current as DataNode;
+	        if (nextItem)
+	            nextItem.isPreviousSiblingRemoved = true;
+
+			//remove the item
+	        var parentOfItemToRemove:DataNode = _currentHierarchy.getParentItem(itemToDelete) as DataNode;
+	        var collectionToChange:ArrayCollection = parentOfItemToRemove ? parentOfItemToRemove.children : _utils.getRoot(_currentHierarchy) as ArrayCollection;
+
+	        collectionToChange.removeItem(itemToDelete);
+	    }
+
+
+        private function testAddition(where:HierarchicalCollectionViewCursor):void
+        {
+            var itemBeforeWhichWereAdding:DataNode = where.current as DataNode;
+            assertNotNull(itemBeforeWhichWereAdding);
+
+            var parentOfAdditionLocation:DataNode = _currentHierarchy.getParentItem(itemBeforeWhichWereAdding) as DataNode;
+            var collectionToChange:ArrayCollection = parentOfAdditionLocation ? parentOfAdditionLocation.children : _utils.getRoot(_currentHierarchy) as ArrayCollection;
+            var positionOfItemBeforeWhichWereAdding:int = collectionToChange.getItemIndex(itemBeforeWhichWereAdding);
+
+			collectionToChange.addItemAt(_utils.createSimpleNode(itemBeforeWhichWereAdding.label + " [INSERTED NODE]"), positionOfItemBeforeWhichWereAdding);
+        }
+
+
+
+
+		private static function onUncaughtClientError(event:UncaughtErrorEvent):void
+		{
+			event.preventDefault();
+			event.stopImmediatePropagation();
+			_noErrorsThrown = false;
+
+			trace("\n" + event.error);
+			_utils.printHCollectionView(_currentHierarchy);
+		}
+
+
+        private static const HIERARCHY_STRING:String = (<![CDATA[
+         Region(1)
+         Region(2)
+         Region(2)->City(1)
+         Region(2)->City(1)->Company(1)
+         Region(2)->City(1)->Company(2)
+         Region(2)->City(1)->Company(2)->Department(1)[REM]
+         Region(2)->City(1)->Company(2)->Department(1)[REM]->Employee(1)
+         Region(2)->City(1)->Company(2)->Department(1)[REM]->Employee(2)
+         Region(2)->City(1)->Company(2)->Department(2)
+         Region(2)->City(1)->Company(2)->Department(2)->Employee(1)
+         Region(2)->City(1)->Company(2)->Department(2)->Employee(2)
+         Region(2)->City(1)->Company(2)->Department(2)->Employee(3)[SEL]
+         Region(2)->City(1)->Company(2)->Department(3)
+         Region(2)->City(1)->Company(2)->Department(3)->Employee(1)
+         Region(2)->City(1)->Company(3)
+       ]]>).toString();
+	}
+}


reactoring in favor of "return home early pattern"


added UserProxy

added UserProxy

error: pathspec 'collect-flex/collect-flex-client/src/generated/flex/org/openforis/collect/model/proxy/UserProxy.as' did not match any file(s) known to git

--- collect-flex/collect-flex-client/src/generated/flex/org/openforis/collect/model/proxy/UserProxy.as
+++ collect-flex/collect-flex-client/src/generated/flex/org/openforis/collect/model/proxy/UserProxy.as
@@ -0,0 +1,14 @@
+/**
+ * Generated by Gas3 v2.2.0 (Granite Data Services).
+ *
+ * NOTE: this file is only generated if it does not exist. You may safely put
+ * your custom code here.
+ */
+
+package org.openforis.collect.model.proxy {
+
+    [Bindable]
+    [RemoteClass(alias="org.openforis.collect.model.proxy.UserProxy")]
+    public class UserProxy extends UserProxyBase {
+    }
+}


util class for model classes compilation

error: pathspec 'collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/util/ModelClassInitializer.as' did not match any file(s) known to git

--- collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/util/ModelClassInitializer.as
+++ collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/util/ModelClassInitializer.as
@@ -0,0 +1,118 @@
+package org.openforis.collect.util {
+	import org.granite.collections.BasicMap;
+
+	public class ModelClassInitializer {
+
+		import org.openforis.idm.metamodel.Annotatable;
+		import org.openforis.idm.metamodel.AttributeDefault;
+		import org.openforis.idm.metamodel.AttributeDefinition;
+		import org.openforis.idm.metamodel.BooleanAttributeDefinition;
+		import org.openforis.idm.metamodel.Check;
+		import org.openforis.idm.metamodel.Check$Flag;
+		import org.openforis.idm.metamodel.CodeAttributeDefinition;
+		import org.openforis.idm.metamodel.CodeAttributeDefinition$Type;
+		import org.openforis.idm.metamodel.CodeList;
+		import org.openforis.idm.metamodel.CodeList$CodeScope;
+		import org.openforis.idm.metamodel.CodeList$CodeType;
+		import org.openforis.idm.metamodel.CodeListItem;
+		import org.openforis.idm.metamodel.CodeListLabel;
+		import org.openforis.idm.metamodel.CodeListLabel$Type;
+		import org.openforis.idm.metamodel.CodeListLevel;
+		import org.openforis.idm.metamodel.CodingScheme;
+		import org.openforis.idm.metamodel.ComparisonCheck;
+		import org.openforis.idm.metamodel.ComparisonCheck$OPERATION;
+		import org.openforis.idm.metamodel.CoordinateAttributeDefinition;
+		import org.openforis.idm.metamodel.CustomCheck;
+		import org.openforis.idm.metamodel.DateAttributeDefinition;
+		import org.openforis.idm.metamodel.DetachedModelDefinitionException;
+		import org.openforis.idm.metamodel.DistanceCheck;
+		import org.openforis.idm.metamodel.EntityDefinition;
+		import org.openforis.idm.metamodel.FileAttributeDefinition;
+		import org.openforis.idm.metamodel.InvalidCheckException;
+		import org.openforis.idm.metamodel.LanguageSpecificText;
+		import org.openforis.idm.metamodel.ModelVersion;
+		import org.openforis.idm.metamodel.NodeDefinition;
+		import org.openforis.idm.metamodel.NodeDefinitionLabel;
+		import org.openforis.idm.metamodel.NodeDefinitionLabel$Type;
+		import org.openforis.idm.metamodel.NodeDefinitionPropertyHandler;
+		import org.openforis.idm.metamodel.NumberAttributeDefinition;
+		import org.openforis.idm.metamodel.NumericAttributeDefinition;
+		import org.openforis.idm.metamodel.NumericAttributeDefinition$Type;
+		import org.openforis.idm.metamodel.PatternCheck;
+		import org.openforis.idm.metamodel.Precision;
+		import org.openforis.idm.metamodel.Prompt;
+		import org.openforis.idm.metamodel.Prompt$Type;
+		import org.openforis.idm.metamodel.RangeAttributeDefinition;
+		import org.openforis.idm.metamodel.Schema;
+		import org.openforis.idm.metamodel.SchemaExpression;
+		import org.openforis.idm.metamodel.SchemaPropertyHandler;
+		import org.openforis.idm.metamodel.SpatialReferenceSystem;
+		import org.openforis.idm.metamodel.Survey;
+		import org.openforis.idm.metamodel.TaxonAttributeDefinition;
+		import org.openforis.idm.metamodel.TextAttributeDefinition;
+		import org.openforis.idm.metamodel.TextAttributeDefinition$Type;
+		import org.openforis.idm.metamodel.TimeAttributeDefinition;
+		import org.openforis.idm.metamodel.UniquenessCheck;
+		import org.openforis.idm.metamodel.Unit;
+		import org.openforis.idm.metamodel.Versionable;
+
+		public static function init():void {
+			var array:Array = [
+				BasicMap,
+				Annotatable,
+				AttributeDefault,
+				AttributeDefinition,
+				BooleanAttributeDefinition,
+				Check,
+				Check$Flag,
+				CodeAttributeDefinition,
+				CodeAttributeDefinition$Type,
+				CodeList,
+				CodeList$CodeScope,
+				CodeList$CodeType,
+				CodeListItem,
+				CodeListLabel,
+				CodeListLabel$Type,
+				CodeListLevel,
+				CodingScheme,
+				ComparisonCheck,
+				ComparisonCheck$OPERATION,
+				CoordinateAttributeDefinition,
+				CustomCheck,
+				DateAttributeDefinition,
+				DetachedModelDefinitionException,
+				DistanceCheck,
+				EntityDefinition,
+				FileAttributeDefinition,
+				InvalidCheckException,
+				LanguageSpecificText,
+				ModelVersion,
+				NodeDefinition,
+				NodeDefinitionLabel,
+				NodeDefinitionLabel$Type,
+				NodeDefinitionPropertyHandler,
+				NumberAttributeDefinition,
+				NumericAttributeDefinition,
+				NumericAttributeDefinition$Type,
+				PatternCheck,
+				Precision,
+				Prompt,
+				Prompt$Type,
+				RangeAttributeDefinition,
+				Schema,
+				SchemaExpression,
+				SchemaPropertyHandler,
+				SpatialReferenceSystem,
+				Survey,
+				TaxonAttributeDefinition,
+				TextAttributeDefinition,
+				TextAttributeDefinition$Type,
+				TimeAttributeDefinition,
+				UniquenessCheck,
+				Unit,
+				Versionable
+			];
+		}
+
+	}
+}


Implemented Feature #1308 WireframeDebugController

error: pathspec 'src/aerys/minko/scene/controller/debug/WireframeDebugController.as' did not match any file(s) known to git

--- src/aerys/minko/scene/controller/debug/WireframeDebugController.as
+++ src/aerys/minko/scene/controller/debug/WireframeDebugController.as
@@ -0,0 +1,89 @@
+package aerys.minko.scene.controller.debug
+{
+	import aerys.minko.render.geometry.primitive.LineGeometry;
+	import aerys.minko.render.geometry.stream.iterator.TriangleIterator;
+	import aerys.minko.render.geometry.stream.iterator.TriangleReference;
+	import aerys.minko.render.material.line.LineMaterial;
+	import aerys.minko.scene.controller.AbstractController;
+	import aerys.minko.scene.node.Group;
+	import aerys.minko.scene.node.Mesh;
+
+	import flash.utils.Dictionary;
+
+	public final class WireframeDebugController extends AbstractController
+	{
+		private var _wireframeMaterial	: LineMaterial;
+		private var _targetToWireframe	: Dictionary	= new Dictionary();
+
+		public function get material() : LineMaterial
+		{
+			return _wireframeMaterial
+				|| (_wireframeMaterial = new LineMaterial({diffuseColor : 0xffffffff, lineThickness	: 1.}));
+		}
+
+		public function WireframeDebugController()
+		{
+			super(Mesh);
+
+			initialize();
+		}
+
+		private function initialize() : void
+		{
+			targetAdded.add(targetAddedHandler);
+			targetRemoved.add(targetRemovedHandler);
+		}
+
+		private function targetAddedHandler(ctrl	: WireframeDebugController,
+											target	: Mesh) : void
+		{
+			target.added.add(addedHandler);
+			target.removed.add(removedHandler);
+		}
+
+		private function addedHandler(target 	: Mesh,
+									  ancestor	: Group) : void
+		{
+			if (!target.scene)
+				return ;
+
+			var triangles	: TriangleIterator = new TriangleIterator(
+				target.geometry.getVertexStream(),
+				target.geometry.indexStream
+			);
+			var linesGeom	: LineGeometry		= new LineGeometry();
+			for each (var triangle : TriangleReference in triangles)
+			{
+				linesGeom.moveTo(triangle.v0.x, triangle.v0.y, triangle.v0.z)
+					.lineTo(triangle.v1.x, triangle.v1.y, triangle.v1.z)
+					.lineTo(triangle.v2.x, triangle.v2.y, triangle.v2.z)
+					.lineTo(triangle.v0.x, triangle.v0.y, triangle.v0.z);
+			}
+
+			var lines		: Mesh				= new Mesh(linesGeom, this.material);
+			_targetToWireframe[target] = lines;
+
+			target.parent.addChild(lines);
+		}
+
+		private function removeWireframes(target : Mesh) : void
+		{
+			if (_targetToWireframe[target])
+				_targetToWireframe[target].parent = null;
+			_targetToWireframe[target] = null;
+		}
+
+		private function targetRemovedHandler(ctrl		: WireframeDebugController,
+											  target	: Mesh) : void
+		{
+			target.added.remove(addedHandler);
+			target.removed.remove(removedHandler);
+			removeWireframes(target);
+		}
+
+		private function removedHandler(target : Mesh, ancestor : Group) : void
+		{
+			removeWireframes(target);
+		}
+	}
+}


RaycastVehicle AngelScript demo code

RaycastVehicle AngelScript demo code

error: pathspec 'bin/Data/Scripts/46_RaycastVehicleDemo.as' did not match any file(s) known to git

--- bin/Data/Scripts/46_RaycastVehicleDemo.as
+++ bin/Data/Scripts/46_RaycastVehicleDemo.as
@@ -0,0 +1,534 @@
+// Vehicle example.
+// This sample demonstrates:
+//     - Creating a heightmap terrain with collision
+//     - Constructing a physical vehicle with rigid bodies for the hull and the wheels, joined with constraints
+//     - Saving and loading the variables of a script object, including node & component references
+
+#include "Scripts/Utilities/Sample.as"
+
+const int CTRL_FORWARD = 1;
+const int CTRL_BACK = 2;
+const int CTRL_LEFT = 4;
+const int CTRL_RIGHT = 8;
+const int CTRL_BRAKE = 16;
+
+const float CAMERA_DISTANCE = 10.0f;
+const float YAW_SENSITIVITY = 0.1f;
+const float ENGINE_FORCE = 2500.0f;
+const float DOWN_FORCE = 100.0f;
+const float MAX_WHEEL_ANGLE = 22.5f;
+const float CHASSIS_WIDTH = 2.6f;
+
+Node@ vehicleNode;
+
+void Start()
+{
+    // Execute the common startup for samples
+    SampleStart();
+    // Create static scene content
+    CreateScene();
+    // Create the controllable vehicle
+    CreateVehicle();
+    // Create the UI content
+    CreateInstructions();
+    // Set the mouse mode to use in the sample
+    SampleInitMouseMode(MM_RELATIVE);
+    // Subscribe to necessary events
+    SubscribeToEvents();
+}
+
+void CreateScene()
+{
+    scene_ = Scene();
+    // Create scene subsystem components
+    scene_.CreateComponent("Octree");
+    scene_.CreateComponent("PhysicsWorld");
+    // Create camera and define viewport. Camera does not necessarily have to belong to the scene
+    cameraNode = Node();
+    Camera@ camera = cameraNode.CreateComponent("Camera");
+    camera.farClip = 500.0f;
+    renderer.viewports[0] = Viewport(scene_, camera);
+    // Create static scene content. First create a zone for ambient lighting and fog control
+    Node@ zoneNode = scene_.CreateChild("Zone");
+    Zone@ zone = zoneNode.CreateComponent("Zone");
+    zone.ambientColor = Color(0.15f, 0.15f, 0.15f);
+    zone.fogColor = Color(0.5f, 0.5f, 0.7f);
+    zone.fogStart = 300.0f;
+    zone.fogEnd = 500.0f;
+    zone.boundingBox = BoundingBox(-2000.0f, 2000.0f);
+    // Create a directional light to the world. Enable cascaded shadows on it
+    Node@ lightNode = scene_.CreateChild("DirectionalLight");
+    lightNode.direction = Vector3(0.3f, -0.5f, 0.425f);
+    Light@ light = lightNode.CreateComponent("Light");
+    light.lightType = LIGHT_DIRECTIONAL;
+    light.castShadows = true;
+    light.shadowBias = BiasParameters(0.00025f, 0.5f);
+    light.shadowCascade =
+        CascadeParameters(10.0f, 50.0f, 200.0f, 0.0f, 0.8f);
+    light.specularIntensity = 0.5f;
+    // Create heightmap terrain with collision
+    Node@ terrainNode = scene_.CreateChild("Terrain");
+    terrainNode.position = Vector3(0.0f, 0.0f, 0.0f);
+    Terrain@ terrain = terrainNode.CreateComponent("Terrain");
+    terrain.patchSize = 64;
+    terrain.spacing = Vector3(2.0f, 0.1f, 2.0f);       // Spacing between vertices and vertical resolution of the height map
+    terrain.smoothing = true;
+    terrain.heightMap =
+        cache.GetResource("Image", "Textures/HeightMap.png");
+    terrain.material =
+        cache.GetResource("Material", "Materials/Terrain.xml");
+    // The terrain consists of large triangles, which fits well for occlusion rendering, as a hill can occlude all
+    // terrain patches and other objects behind it
+    terrain.occluder = true;
+    RigidBody@ body = terrainNode.CreateComponent("RigidBody");
+    body.collisionLayer = 2;   // Use layer bitmask 2 for static geometry
+    CollisionShape@ shape = terrainNode.CreateComponent("CollisionShape");
+    shape.SetTerrain();
+    // Create 1000 mushrooms in the terrain. Always face outward along the terrain normal
+    const uint NUM_MUSHROOMS = 1000;
+    for (uint i = 0; i < NUM_MUSHROOMS; ++i)
+    {
+        Node@ objectNode = scene_.CreateChild("Mushroom");
+        Vector3 position(Random(2000.0f) - 1000.0f, 0.0f,
+                         Random(2000.0f) - 1000.0f);
+        position.y = terrain.GetHeight(position) - 0.1f;
+        objectNode.position = position;
+        // Create a rotation quaternion from up vector to terrain normal
+        objectNode.rotation =
+            Quaternion(Vector3(0.0f, 1.0f, 0.0),
+                       terrain.GetNormal(position));
+        objectNode.SetScale(3.0f);
+        StaticModel@ object = objectNode.CreateComponent("StaticModel");
+        object.model = cache.GetResource("Model", "Models/Mushroom.mdl");
+        object.material =
+            cache.GetResource("Material", "Materials/Mushroom.xml");
+        object.castShadows = true;
+        RigidBody@ mushroomBody =
+            objectNode.CreateComponent("RigidBody");
+        mushroomBody.collisionLayer = 2;
+        CollisionShape@ mushroomShape =
+            objectNode.CreateComponent("CollisionShape");
+        mushroomShape.SetTriangleMesh(object.model, 0);
+    }
+}
+
+
+void
+CreateVehicle()
+{
+    vehicleNode = scene_.CreateChild("Vehicle");
+    vehicleNode.position = Vector3(0.0f, 5.0f, 0.0f);
+    // First createing player-controlled vehicle
+    // Create the vehicle logic script object
+    Vehicle@ vehicle =
+        cast < Vehicle >
+        (vehicleNode.CreateScriptObject(scriptFile, "Vehicle"));
+    // Initialize vehicle component
+    vehicle.Init();
+    vehicleNode.AddTag("vehicle");
+    // Set RigidBody physics parameters
+    // (The RigidBody was created by vehicle.Init()
+    RigidBody@ hullBody = vehicleNode.GetComponent("RigidBody");
+    hullBody.mass = 800.0f;
+    hullBody.linearDamping = 0.2f;     // Some air resistance
+    hullBody.angularDamping = 0.5f;
+    hullBody.collisionLayer = 1;
+}
+
+void
+
+CreateInstructions()
+{
+    // Construct new Text object, set string to display and font to use
+    Text@ instructionText = ui.root.CreateChild("Text");
+    instructionText.text =
+        "Use WASD keys to drive, F to brake, mouse/touch to rotate camera\n"
+        "F5 to save scene, F7 to load";
+    instructionText.
+    SetFont(cache.GetResource("Font", "Fonts/Anonymous Pro.ttf"), 15);
+    // The text has multiple rows. Center them in relation to each other
+    instructionText.textAlignment = HA_CENTER;
+    // Position the text relative to the screen center
+    instructionText.horizontalAlignment = HA_CENTER;
+    instructionText.verticalAlignment = VA_CENTER;
+    instructionText.SetPosition(0, ui.root.height / 4);
+}
+
+void
+
+SubscribeToEvents()
+{
+    // Subscribe to Update event for setting the vehicle controls before physics simulation
+    SubscribeToEvent("Update", "HandleUpdate");
+    // Subscribe to PostUpdate event for updating the camera position after physics simulation
+    SubscribeToEvent("PostUpdate", "HandlePostUpdate");
+    // Unsubscribe the SceneUpdate event from base class as the camera node is being controlled in HandlePostUpdate() in this sample
+    UnsubscribeFromEvent("SceneUpdate");
+}
+
+void
+
+HandleUpdate(StringHash eventType, VariantMap& eventData)
+{
+    if (vehicleNode is null)
+        return;
+    Vehicle@ vehicle = cast < Vehicle > (vehicleNode.scriptObject);
+    if (vehicle is null)
+        return;
+    // Get movement controls and assign them to the vehicle component. If UI has a focused element, clear controls
+    if (ui.focusElement is null)
+    {
+        vehicle.controls.Set(CTRL_FORWARD, input.keyDown[KEY_W]);
+        vehicle.controls.Set(CTRL_BACK, input.keyDown[KEY_S]);
+        vehicle.controls.Set(CTRL_LEFT, input.keyDown[KEY_A]);
+        vehicle.controls.Set(CTRL_RIGHT, input.keyDown[KEY_D]);
+        vehicle.controls.Set(CTRL_BRAKE, input.keyDown[KEY_F]);
+        // Add yaw & pitch from the mouse motion. Used only for the camera, does not affect motion
+        if (touchEnabled)
+        {
+            for (uint i = 0; i < input.numTouches; ++i)
+            {
+                TouchState@ state = input.touches[i];
+                if (state.touchedElement is null)        // Touch on empty space
+                {
+                    Camera@ camera =
+                        cameraNode.GetComponent("Camera");
+                    if (camera is null)
+                        return;
+                    vehicle.controls.yaw +=
+                        TOUCH_SENSITIVITY * camera.fov /
+                        graphics.height * state.delta.x;
+                    vehicle.controls.pitch +=
+                        TOUCH_SENSITIVITY * camera.fov /
+                        graphics.height * state.delta.y;
+                }
+            }
+        }
+        else
+        {
+            vehicle.controls.yaw += input.mouseMoveX * YAW_SENSITIVITY;
+            vehicle.controls.pitch += input.mouseMoveY * YAW_SENSITIVITY;
+        }
+        // Limit pitch
+        vehicle.controls.pitch =
+            Clamp(vehicle.controls.pitch, 0.0f, 80.0f);
+        // Check for loading / saving the scene
+        if (input.keyPress[KEY_F5])
+        {
+            File saveFile(fileSystem.programDir +
+                          "Data/Scenes/RaycastScriptVehicleDemo.xml",
+                          FILE_WRITE);
+            scene_.SaveXML(saveFile);
+        }
+        if (input.keyPress[KEY_F7])
+        {
+            File loadFile(fileSystem.programDir +
+                          "Data/Scenes/RaycastScriptVehicleDemo.xml",
+                          FILE_READ);
+            scene_.LoadXML(loadFile);
+            // After loading we have to reacquire the vehicle scene node, as it has been recreated
+            // Simply find by name as there's only one of them
+            Array < Node@ >@vehicles =
+                scene_.GetChildrenWithTag("vehicle");
+            for (int i = 0; i < vehicles.length; i++)
+            {
+                Vehicle@ vehicleData =
+                    cast < Vehicle > (vehicles[i].scriptObject);
+                vehicleData.CreateEmitters();
+            }
+            vehicleNode = scene_.GetChild("Vehicle", true);
+        }
+    }
+    else
+        vehicle.
+        controls.Set(CTRL_FORWARD | CTRL_BACK | CTRL_LEFT | CTRL_RIGHT |
+                     CTRL_BRAKE, false);
+}
+
+
+void
+HandlePostUpdate(StringHash eventType, VariantMap& eventData)
+{
+    if (vehicleNode is null)
+        return;
+    Vehicle@ vehicle = cast < Vehicle > (vehicleNode.scriptObject);
+    if (vehicle is null)
+        return;
+    // Physics update has completed. Position camera behind vehicle
+    Quaternion dir(vehicleNode.rotation.yaw, Vector3(0.0f, 1.0f, 0.0f));
+    dir =
+        dir * Quaternion(vehicle.controls.yaw, Vector3(0.0f, 1.0f, 0.0f));
+    dir =
+        dir * Quaternion(vehicle.controls.pitch, Vector3(1.0f, 0.0f, 0.0f));
+    Vector3 cameraTargetPos =
+        vehicleNode.position - dir * Vector3(0.0f, 0.0f, CAMERA_DISTANCE);
+    Vector3 cameraStartPos = vehicleNode.position;
+    // Raycast camera against static objects (physics collision mask 2)
+    // and move it closer to the vehicle if something in between
+    Ray cameraRay(cameraStartPos,
+                  (cameraTargetPos - cameraStartPos).Normalized());
+    float cameraRayLength = (cameraTargetPos - cameraStartPos).length;
+    PhysicsRaycastResult result =
+        scene_.physicsWorld.RaycastSingle(cameraRay, cameraRayLength, 2);
+    if (result.body ! is null)
+        cameraTargetPos =
+            cameraStartPos + cameraRay.direction * (result.distance - 0.5f);
+    cameraNode.position = cameraTargetPos;
+    cameraNode.rotation = dir;
+}
+
+
+// Vehicle script object class
+//
+// When saving, the node and component handles are automatically converted into nodeID or componentID attributes
+// and are acquired from the scene when loading. The steering member variable will likewise be saved automatically.
+// The Controls object can not be automatically saved, so handle it manually in the Load() and Save() methods
+
+class Vehicle:ScriptObject
+{
+
+    RigidBody@ hullBody;
+
+
+    // Current left/right steering amount (-1 to 1.)
+    float steering = 0.0f;
+
+    // Vehicle controls.
+    Controls controls;
+
+    float m_fsuspensionRestLength = 0.6f;
+
+    float m_fsuspensionStiffness = 14.0f;
+
+    float m_fsuspensionDamping = 2.0f;
+
+    float m_fsuspensionCompression = 4.0f;
+
+    float m_fwheelFriction = 1000.0f;
+
+    float m_frollInfluence = 0.12f;
+
+    float maxEngineForce = ENGINE_FORCE;
+
+    float wheelWidth = 0.4f;
+
+    float wheelRadius = 0.5f;
+
+    float brakingForce = 50.0f;
+
+    Array < Vector3 > connectionPoints;
+
+    Array < Node@ >particleEmitterNodeList;
+
+    protected Vector3 prevVelocity;
+
+
+    void Load(Deserializer& deserializer)
+    {
+        controls.yaw = deserializer.ReadFloat();
+        controls.pitch = deserializer.ReadFloat();
+    }
+
+    void Save(Serializer& serializer)
+    {
+        serializer.WriteFloat(controls.yaw);
+        serializer.WriteFloat(controls.pitch);
+    }
+
+    void Init()
+    {
+        // This function is called only from the main program when initially creating the vehicle, not on scene load
+        StaticModel@ hullObject = node.CreateComponent("StaticModel");
+        hullBody = node.CreateComponent("RigidBody");
+        CollisionShape@ hullShape = node.CreateComponent("CollisionShape");
+        node.scale = Vector3(2.3f, 1.0f, 4.0f);
+        hullObject.model = cache.GetResource("Model", "Models/Box.mdl");
+        hullObject.material =
+            cache.GetResource("Material", "Materials/Stone.xml");
+        hullObject.castShadows = true;
+        hullShape.SetBox(Vector3(1.0f, 1.0f, 1.0f));
+        hullBody.mass = 800.0f;
+        hullBody.linearDamping = 0.2f; // Some air resistance
+        hullBody.angularDamping = 0.5f;
+        hullBody.collisionLayer = 1;
+        RaycastVehicle@ raycastVehicle =
+            node.CreateComponent("RaycastVehicle");
+        raycastVehicle.Init();
+        connectionPoints.Reserve(4);
+        float connectionHeight = -0.4f;      //1.2f;
+        bool isFrontWheel = true;
+        Vector3 wheelDirection(0, -1, 0);
+        Vector3 wheelAxle(-1, 0, 0);
+        float wheelX = CHASSIS_WIDTH / 2.0 - wheelWidth;
+        // Front left
+        connectionPoints.Push(Vector3
+                              (-wheelX, connectionHeight,
+                               2.5f - wheelRadius * 2.0f));
+        // Front right
+        connectionPoints.Push(Vector3
+                              (wheelX, connectionHeight,
+                               2.5f - wheelRadius * 2.0f));
+        // Back left
+        connectionPoints.Push(Vector3
+                              (-wheelX, connectionHeight,
+                               -2.5f + wheelRadius * 2.0f));
+        // Back right
+        connectionPoints.Push(Vector3
+                              (wheelX, connectionHeight,
+                               -2.5f + wheelRadius * 2.0f));
+        const Color LtBrown(0.972f, 0.780f, 0.412f);
+        for (int id = 0; id < connectionPoints.length; id++)
+        {
+            Node@ wheelNode = scene_.CreateChild();
+            Vector3 connectionPoint = connectionPoints[id];
+            // Front wheels are at front (z > 0)
+            // back wheels are at z < 0
+            // Setting rotation according to wheel position
+            bool isFrontWheel = connectionPoints[id].z > 0.0f;
+            wheelNode.rotation =
+                (connectionPoint.x >=
+                 0.0 ? Quaternion(0.0f, 0.0f, -90.0f) : Quaternion(0.0f,
+                         0.0f,
+                         90.0f));
+            wheelNode.worldPosition =
+                (node.worldPosition +
+                 node.worldRotation * connectionPoints[id]);
+            wheelNode.scale = Vector3(1.0f, 0.65f, 1.0f);
+            raycastVehicle.AddWheel(wheelNode, wheelDirection, wheelAxle,
+                                    m_fsuspensionRestLength, wheelRadius,
+                                    isFrontWheel);
+            raycastVehicle.SetWheelSuspensionStiffness(id,
+                    m_fsuspensionStiffness);
+            raycastVehicle.SetWheelDampingRelaxation(id,
+                    m_fsuspensionDamping);
+            raycastVehicle.SetWheelDampingCompression(id,
+                    m_fsuspensionCompression);
+            raycastVehicle.SetWheelFrictionSlip(id, m_fwheelFriction);
+            raycastVehicle.SetWheelRollInfluence(id, m_frollInfluence);
+            StaticModel@ pWheel =
+                wheelNode.CreateComponent("StaticModel");
+            pWheel.model =
+                cache.GetResource("Model", "Models/Cylinder.mdl");
+            pWheel.material =
+                cache.GetResource("Material", "Materials/Stone.xml");
+            pWheel.castShadows = true;
+        }
+        CreateEmitters();
+        raycastVehicle.ResetWheels();
+    }
+
+    void CreateEmitter(Vector3 place)
+    {
+        Node@ emitter = scene_.CreateChild();
+        emitter.worldPosition =
+            node.worldPosition + node.worldRotation * place + Vector3(0,
+                    -wheelRadius,
+                    0);
+        ParticleEmitter@ particleEmitter =
+            emitter.CreateComponent("ParticleEmitter");
+        particleEmitter.effect =
+            cache.GetResource("ParticleEffect", "Particle/Dust.xml");
+        particleEmitter.emitting = false;
+        particleEmitterNodeList.Push(emitter);
+        emitter.temporary = true;
+    }
+
+    void CreateEmitters()
+    {
+        particleEmitterNodeList.Clear();
+        RaycastVehicle@ raycastVehicle =
+            node.GetComponent("RaycastVehicle");
+        for (int id = 0; id < raycastVehicle.numWheels; id++)
+        {
+            Vector3 connectionPoint =
+                raycastVehicle.GetWheelConnectionPoint(id);
+            CreateEmitter(connectionPoint);
+        }
+    }
+
+    void FixedUpdate(float timeStep)
+    {
+        float newSteering = 0.0f;
+        float accelerator = 0.0f;
+        bool brake = false;
+        RaycastVehicle@ raycastVehicle =
+            node.GetComponent("RaycastVehicle");
+        if (controls.IsDown(CTRL_LEFT))
+            newSteering = -1.0f;
+        if (controls.IsDown(CTRL_RIGHT))
+            newSteering = 1.0f;
+        if (controls.IsDown(CTRL_FORWARD))
+            accelerator = 1.0f;
+        if (controls.IsDown(CTRL_BACK))
+            accelerator = -0.5f;
+        if (controls.IsDown(CTRL_BRAKE))
+            brake = true;
+        // When steering, wake up the wheel rigidbodies so that their orientation is updated
+        if (newSteering != 0.0f)
+        {
+            steering = steering * 0.95f + newSteering * 0.05f;
+        }
+        else
+            steering = steering * 0.8f + newSteering * 0.2f;
+        Quaternion steeringRot(0.0f, steering * MAX_WHEEL_ANGLE, 0.0f);
+        raycastVehicle.SetSteeringValue(0, steering);
+        raycastVehicle.SetSteeringValue(1, steering);
+        raycastVehicle.SetEngineForce(2, maxEngineForce * accelerator);
+        raycastVehicle.SetEngineForce(3, maxEngineForce * accelerator);
+        for (int i = 0; i < raycastVehicle.numWheels; i++)
+            if (brake)
+            {
+                raycastVehicle.SetBrake(i, brakingForce);
+            }
+            else
+            {
+                raycastVehicle.SetBrake(i, 0.0f);
+            }
+        // Apply downforce proportional to velocity
+        Vector3 localVelocity =
+            hullBody.rotation.Inverse() * hullBody.linearVelocity;
+        hullBody.ApplyForce(hullBody.rotation *
+                            Vector3(0.0f, -1.0f,
+                                    0.0f) * Abs(localVelocity.z) *
+                            DOWN_FORCE);
+    }
+
+    void PostUpdate(float timeStep)
+    {
+        if (particleEmitterNodeList.length == 0)
+            return;
+        RaycastVehicle@ raycastVehicle =
+            node.GetComponent("RaycastVehicle");
+        RigidBody@ vehicleBody = node.GetComponent("RigidBody");
+        Vector3 velocity = hullBody.linearVelocity;
+        Vector3 accel = (velocity - prevVelocity) / timeStep;
+        float planeAccel = Vector3(accel.x, 0.0f, accel.z).length;
+        for (int i = 0; i < raycastVehicle.numWheels; i++)
+        {
+            Node@ emitter = particleEmitterNodeList[i];
+            ParticleEmitter@ particleEmitter =
+                emitter.GetComponent("ParticleEmitter");
+            if (raycastVehicle.WheelIsGrounded(i)
+                    && (
+                        raycastVehicle.GetWheelSkidInfoCumulative(i) < 0.9f
+                        ||
+                        raycastVehicle.GetBrake(i) > 2.0f
+                        ||
+                        planeAccel > 15.0f))
+            {
+                emitter.worldPosition =
+                    raycastVehicle.GetContactPosition(i);
+                if (!particleEmitter.emitting)
+                    particleEmitter.emitting = true;
+            }
+            else if (particleEmitter.emitting)
+                particleEmitter.emitting = false;
+        }
+        prevVelocity = velocity;
+    }
+}
+
+
+// Create XML patch instructions for screen joystick layout specific to this sample app
+String patchInstructions = "";
+


Add bead to draw solid background

Add bead to draw solid background

error: pathspec 'frameworks/as/src/org/apache/flex/html/staticControls/beads/SolidBackgroundBead.as' did not match any file(s) known to git

--- frameworks/as/src/org/apache/flex/html/staticControls/beads/SolidBackgroundBead.as
+++ frameworks/as/src/org/apache/flex/html/staticControls/beads/SolidBackgroundBead.as
@@ -0,0 +1,73 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.staticControls.beads
+{
+	import flash.display.Graphics;
+	import flash.events.Event;
+	import flash.events.IEventDispatcher;
+
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+
+	public class SolidBackgroundBead implements IBead
+	{
+		public function SolidBackgroundBead()
+		{
+		}
+
+		private var _strand:IStrand;
+
+		public function get strand():IStrand
+		{
+			return _strand;
+		}
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+            IEventDispatcher(value).addEventListener("heightChanged", changeHandler);
+            IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
+		}
+
+		private var _backgroundColor:uint;
+
+		public function get backgroundColor():uint
+		{
+			return _backgroundColor;
+		}
+		public function set backgroundColor(value:uint):void
+		{
+			_backgroundColor = value;
+			if (_strand)
+				changeHandler(null);
+		}
+
+		private function changeHandler(event:Event):void
+		{
+            var host:UIBase = UIBase(_strand);
+            var g:Graphics = host.graphics;
+            var w:Number = host.width;
+            var h:Number = host.height;
+            g.clear();
+            g.beginFill(backgroundColor);
+            g.drawRect(0, 0, w, h);
+            g.endFill();
+		}
+	}
+}


Minor changes in module management

Minor changes in module management

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@884 fda5f131-174c-0410-8613-e0905860106b

error: pathspec 'org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/ISecured.as' did not match any file(s) known to git

--- org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/ISecured.as
+++ org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/ISecured.as
@@ -0,0 +1,36 @@
+/*
+ * openwms.org, the Open Warehouse Management System.
+ *
+ * This file is part of openwms.org.
+ *
+ * openwms.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * openwms.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software. If not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.openwms.web.flex.client
+{
+	import mx.collections.ArrayCollection;
+
+
+    /**
+     * A ISecured.
+     *
+     * @author Tina Russell
+     * @version $Revision: 700 $
+     */
+	public interface ISecured
+	{
+		function getSecuredObjectNames():ArrayCollection;
+	}
+}


fixed leaf/node bug

fixed leaf/node bug

--- BroadleafCommerceAdmin/src-flex/org/broadleafcommerce/admin/catalog/view/category/components/CategoryTreeDataDescriptor.as
+++ BroadleafCommerceAdmin/src-flex/org/broadleafcommerce/admin/catalog/view/category/components/CategoryTreeDataDescriptor.as
@@ -30,7 +30,18 @@

 		public function isBranch(node:Object, model:Object=null):Boolean
 		{
-			return (node is Category);
+			var result:Boolean = false;
+
+			if(node is Category){
+				 for each(var cat:Object in Category(node).allChildCategories){
+				 	if(cat is Category){
+				 		result = true;
+				 		break;
+				 	}
+				 }
+
+			}
+			return result;
 		}

 		public function getData(node:Object, model:Object=null):Object


Create new error class: CloningError.

Create new error class: CloningError.

error: pathspec 'dolly-framework/src/main/actionscript/dolly/core/errors/CloningError.as' did not match any file(s) known to git

--- dolly-framework/src/main/actionscript/dolly/core/errors/CloningError.as
+++ dolly-framework/src/main/actionscript/dolly/core/errors/CloningError.as
@@ -0,0 +1,12 @@
+package dolly.core.errors {
+
+public class CloningError extends Error {
+
+	public static const CLASS_IS_NOT_CLONEABLE_CODE:int = 1;
+	public static const CLASS_IS_NOT_CLONEABLE_MESSAGE:String = "Class is not cloneable!";
+
+	public function CloningError(message:* = "", id:* = 0) {
+		super(message, id);
+	}
+}
+}


need this for trace

need this for trace

error: pathspec 'externs/GCL/src/goog/global.as' did not match any file(s) known to git

--- externs/GCL/src/goog/global.as
+++ externs/GCL/src/goog/global.as
@@ -0,0 +1,19 @@
+// Copyright 2005 The Closure Library Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS-IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package goog {
+public class global {
+    public static function get console():Object {return null;}
+}
+}


Clean code

Clean code

error: pathspec 'Game/Resources/Opening' did not match any file(s) known to git
error: pathspec 'Scene/Scripts/CartScript_0.as' did not match any file(s) known to git


adding home method to home

adding home method to home

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Updated ICommandMap asdocs to reflect removal of ICommand

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


WeakValueHashMap. Apply directly to the ...
I hate your checkin comments, but I love your product!

The real reason I cleaned up HashMap: I override
forEach(), and now I don't need to do anything to make values() and keys()
work properly for weak values. Less code is better code.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@5726 542714f4-19e9-0310-aa3c-eee0fc999fb1

error: pathspec 'src/as/com/threerings/util/WeakValueHashMap.as' did not match any file(s) known to git

--- src/as/com/threerings/util/WeakValueHashMap.as
+++ src/as/com/threerings/util/WeakValueHashMap.as
@@ -0,0 +1,89 @@
+//
+// $Id$
+
+package com.threerings.util {
+
+/**
+ * A HashMap that stores values weakly: if not referenced anywhere else, they may
+ * be garbage collected. Note that the size might change unexpectedly as things are removed.
+ */
+public class WeakValueHashMap extends HashMap
+{
+    /**
+     * @inheritDoc
+     */
+    public function WeakValueHashMap (
+        loadFactor :Number = 1.75,
+        equalsFn :Function = null,
+        hashFn :Function = null)
+    {
+        super(loadFactor, equalsFn, hashFn);
+    }
+
+    /** @inheritDoc */
+    override public function get (key :Object) :*
+    {
+        var result :* = super.get(key);
+        if (result is WeakReference) { // could also just be undefined
+            result = WeakReference(result).get();
+            if (result === undefined) {
+                remove(key);
+            }
+        }
+        return result;
+    }
+
+    /** @inheritDoc */
+    override public function put (key :Object, value :Object) :*
+    {
+        return unwrap(super.put(key, (value == null) ? null : new WeakReference(value)));
+    }
+
+    /** @inheritDoc */
+    override public function remove (key :Object) :*
+    {
+        return unwrap(super.remove(key));
+    }
+
+    /** @inheritDoc */
+    override public function size () :int
+    {
+        prune();
+        return super.size(); // alternately, we could prune and increment a count for all present..
+    }
+
+    /** @inheritDoc */
+    override public function forEach (fn :Function) :void
+    {
+        prune(fn); // just prune & run the forEach at the same time
+    }
+
+    /**
+     * Prune garbage collected values from the map, optionally calling a function for each
+     * found key/value pair.
+     */
+    protected function prune (fn :Function = null) :void
+    {
+        var removeKeys :Array = [];
+        super.forEach(function (key :*, value :WeakReference) :void {
+            var rawVal :* = (value == null) ? null : value.get();
+            if (rawVal === undefined) {
+                removeKeys.push(key);
+            } else if (fn != null) {
+                fn(key, rawVal);
+            }
+        });
+        for each (var key :Object in removeKeys) {
+            super.remove(key); // slightly more efficient, since we don't need to unwrap
+        }
+    }
+
+    /**
+     * Unwrap a possible WeakReference for returning to the user.
+     */
+    protected function unwrap (val :*) :*
+    {
+        return (val is WeakReference) ? WeakReference(val).get() : val;
+    }
+}
+}


main config stage

main config stage

error: pathspec 'com/segonquart/Configuration.as' did not match any file(s) known to git

--- com/segonquart/Configuration.as
+++ com/segonquart/Configuration.as
@@ -0,0 +1,16 @@
+import flash.display.MovieClip;
+import flash.display.Stage;
+import flash.System.security.*;
+
+class Configuration extends MovieClip
+{
+
+
+	function configuration():Void
+	{
+		System.security.allowDomain ("http://www.talking-wear.com");
+		Stage.showMenu = false;
+		Stage.scaleMode = "noScale";
+		_global.showRedrawRegions (false);
+	}
+}


updating win logic

updating win logic

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jkanchelov/VideoPoker.git/'


moved Vector2 from contrib.core to nenya

git-svn-id: b675b909355d5cf946977f44a8ec5a6ceb3782e4@414 ed5b42cb-e716-0410-a449-f6a68f950b19

error: pathspec 'src/as/com/threerings/flash/Vector2.as' did not match any file(s) known to git

--- src/as/com/threerings/flash/Vector2.as
+++ src/as/com/threerings/flash/Vector2.as
@@ -0,0 +1,339 @@
+//
+// $Id$
+//
+// Nenya library - tools for developing networked games
+// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
+// http://www.threerings.net/code/nenya/
+//
+// This library is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package com.threerings.flash {
+
+import flash.geom.Point;
+
+/**
+ * Basic 2D vector implementation.
+ */
+public class Vector2
+{
+    public var x :Number = 0;
+    public var y :Number = 0;
+
+    /**
+     * Infinite vector - often the result of normalizing a zero vector.
+     */
+    public static const INFINITE :Vector2 = new Vector2(Infinity, Infinity);
+
+    /**
+     * Converts Point p to a Vector2.
+     */
+    public static function fromPoint (p :Point) :Vector2
+    {
+        return new Vector2(p.x, p.y);
+    }
+
+    /**
+     * Creates a Vector2 of magnitude 'len' that has been rotated about the origin by 'radians'.
+     */
+    public static function fromAngle (radians :Number, len :Number = 1) :Vector2
+    {
+       // we use the unit vector (1, 0)
+
+        return new Vector2(
+            Math.cos(radians) * len,   // == len * (cos(theta)*x - sin(theta)*y)
+            Math.sin(radians) * len);  // == len * (sin(theta)*x + cos(theta)*y)
+    }
+
+    /**
+     * Constructs a Vector2 from the given values.
+     */
+    public function Vector2 (x :Number = 0, y :Number = 0)
+    {
+        this.x = x;
+        this.y = y;
+    }
+
+    /**
+     * Sets the vector's components to the given values.
+     */
+    public function set (x :Number, y :Number) :void
+    {
+        this.x = x;
+        this.y = y;
+    }
+
+    /**
+     * Returns the dot product of this vector with vector v.
+     */
+    public function dot (v :Vector2) :Number
+    {
+        return x * v.x + y * v.y;
+    }
+
+    /**
+     * Converts the Vector2 to a Point.
+     */
+    public function toPoint () :Point
+    {
+        return new Point(x, y);
+    }
+
+    /**
+     * Returns a copy of this Vector2.
+     */
+    public function clone () :Vector2
+    {
+        return new Vector2(x, y);
+    }
+
+    /**
+     * Returns the angle represented by this Vector2, in radians.
+     */
+    public function get angle () :Number
+    {
+        var angle :Number = Math.atan2(y, x);
+        return (angle >= 0 ? angle : angle + (2 * Math.PI));
+    }
+
+    /**
+     * Returns this vector's length.
+     */
+    public function get length () :Number
+    {
+        return Math.sqrt(x * x + y * y);
+    }
+
+    /**
+     * Sets this vector's length.
+     */
+    public function set length (newLen :Number) :void
+    {
+        var scale :Number = newLen / this.length;
+
+        x *= scale;
+        y *= scale;
+    }
+
+    /**
+     * Returns the square of this vector's length.
+     */
+    public function get lengthSquared () :Number
+    {
+        return (x * x + y * y);
+    }
+
+    /**
+     * Rotates the vector in place by 'radians'.
+     * Returns a reference to 'this', for chaining.
+     */
+    public function rotateLocal (radians :Number) :Vector2
+    {
+        var cosTheta :Number = Math.cos(radians);
+        var sinTheta :Number = Math.sin(radians);
+
+        var oldX :Number = x;
+        x = (cosTheta * oldX) - (sinTheta * y);
+        y = (sinTheta * oldX) + (cosTheta * y);
+
+        return this;
+    }
+
+    /**
+     * Returns a rotated copy of this vector.
+     */
+    public function rotate (radians :Number) :Vector2
+    {
+        return this.clone().rotateLocal(radians);
+    }
+
+    /**
+     * Normalizes the vector in place and returns its original length.
+     */
+    public function normalizeLocalAndGetLength () :Number
+    {
+        var length :Number = this.length;
+
+        x /= length;
+        y /= length;
+
+        return length;
+    }
+
+    /**
+     * Normalizes this vector in place.
+     * Returns a reference to 'this', for chaining.
+     */
+    public function normalizeLocal () :Vector2
+    {
+        var lengthInverse :Number = 1 / this.length;
+
+        x *= lengthInverse;
+        y *= lengthInverse;
+
+        return this;
+    }
+
+    /**
+     * Returns a normalized copy of the vector.
+     */
+    public function normalize () :Vector2
+    {
+        return this.clone().normalizeLocal();
+    }
+
+    /**
+     * Adds another Vector2 to this, in place.
+     * Returns a reference to 'this', for chaining.
+     */
+    public function addLocal (v :Vector2) :Vector2
+    {
+        x += v.x;
+        y += v.y;
+
+        return this;
+    }
+
+    /**
+     * Returns a copy of this vector added to 'v'.
+     */
+    public function add (v :Vector2) :Vector2
+    {
+        return this.clone().addLocal(v);
+    }
+
+    /**
+     * Subtracts another vector from this one, in place.
+     * Returns a reference to 'this', for chaining.
+     */
+    public function subtractLocal (v :Vector2) :Vector2
+    {
+        x -= v.x;
+        y -= v.y;
+
+        return this;
+    }
+
+    /**
+     * Returns (this - v).
+     */
+    public function subtract (v :Vector2) :Vector2
+    {
+       return this.clone().subtractLocal(v);
+    }
+
+    /**
+     * Returns a vector that is perpendicular to this.
+     * If ccw = true, the perpendicular vector is rotated 90 degrees counter-clockwise from this vector,
+     * otherwise it's rotated 90 degrees clockwise.
+     */
+    public function getPerp (ccw :Boolean = true) :Vector2
+    {
+        if (ccw) {
+            return new Vector2(-y, x);
+        } else {
+            return new Vector2(y, -x);
+        }
+    }
+
+    /**
+     * Scales this vector by value.
+     */
+    public function scaleLocal (value :Number) :Vector2
+    {
+        x *= value;
+        y *= value;
+
+        return this;
+    }
+
+    /** Returns (this * value). */
+    public function scale (value :Number) :Vector2
+    {
+        return this.clone().scaleLocal(value);
+    }
+
+    /**
+     * Inverts the vector.
+     */
+    public function invertLocal () :Vector2
+    {
+        x = -x;
+        y = -y;
+
+        return this;
+    }
+
+    /**
+     * Returns a copy of the vector, inverted.
+     */
+    public function invert () :Vector2
+    {
+       return this.clone().invertLocal();
+    }
+
+    /**
+     * Returns true if this vector is equal to v.
+     */
+    public function equals (v :Vector2) :Boolean
+    {
+        return (x == v.x && y == v.y);
+    }
+
+    /**
+     * Returns true if the components of v are equal to the components of this Vector2,
+     * within the given epsilon.
+     */
+    public function similar (v :Vector2, epsilon :Number) :Boolean
+    {
+        return ((Math.abs(x - v.x) <= epsilon) && (Math.abs(y - v.y) <= epsilon));
+    }
+
+    /**
+     * Returns a new vector that is the linear interpolation of vectors a and b
+     * at proportion p, where p is in [0, 1], p = 0 means the result is equal to a,
+     * and p = 1 means the result is equal to b.
+     */
+    public static function interpolate (a :Vector2, b :Vector2, p :Number) :Vector2
+    {
+        // todo: maybe convert this into a non-static function, to fit the rest of the class?
+        var q :Number = 1 - p;
+        return new Vector2(q * a.x + p * b.x,
+                           q * a.y + p * b.y);
+    }
+
+    /**
+     * Returns the smaller of the two angles between v1 and v2, in radians.
+     * Result will be in range [0, pi].
+     */
+    public static function smallerAngleBetween (v1 :Vector2, v2 :Vector2) :Number
+    {
+        // v1 dot v2 == |v1||v2|cos(theta)
+        // theta = acos ((v1 dot v2) / (|v1||v2|))
+
+        var dot :Number = v1.dot(v2);
+        var len1 :Number = v1.length;
+        var len2 :Number = v2.length;
+
+        return Math.acos(dot / (len1 * len2));
+    }
+
+    /** Returns a string representation of the Vector2. */
+    public function toString () :String
+    {
+        return "[" + x + ", " + y + "]";
+    }
+}
+
+}


Issue 28; Include file missing from r211.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leymannx/svgweb.git/'


simple transition

simple transition

error: pathspec 'src/com/phylake/fsm/impl/Transition.as' did not match any file(s) known to git

--- src/com/phylake/fsm/impl/Transition.as
+++ src/com/phylake/fsm/impl/Transition.as
@@ -0,0 +1,50 @@
+package com.phylake.fsm.impl
+{
+    import com.phylake.fsm.core.*;
+
+    public class Transition implements ITransition
+    {
+        public function Transition(fromState:IState=null, toState:IState=null)
+        {
+            linkStates(fromState, toState);
+        }
+
+        protected var _to:IState;
+        public function get to():IState
+        {
+            return _to;
+        }
+
+        protected var _from:IState;
+        public function get from():IState
+        {
+            return _from;
+        }
+
+        public function linkStates(from:IState, to:IState):void
+        {
+            _from = from;
+            _to   = to;
+        }
+
+        protected var _guards:Vector.<IGuard>;
+        public function get guards():Vector.<IGuard>
+        {
+            return _guards;
+        }
+        public function set guards(value:Vector.<IGuard>):void
+        {
+            _guards = value;
+        }
+
+        protected var _action:IAction;
+        public function get action():IAction
+        {
+            return _action;
+        }
+        public function set action(value:IAction):void
+        {
+            _action = value;
+        }
+    }
+}


adding class test for TextRender;

adding class test for TextRender;