| | 133 | |
|---|
| | 134 | public function createBezier(target:Object, dest:Object, source:Object, controlPoint:Object):IUpdater |
|---|
| | 135 | { |
|---|
| | 136 | var map:Dictionary = new Dictionary(), updaters:Vector.<IUpdater> = new Vector.<IUpdater>, bezierUpdater:BezierUpdater = new BezierUpdater(), name:String, value:Object, isRelative:Boolean, cp:Array, l:uint, i:uint, child:IUpdater, updater:IUpdater; |
|---|
| | 137 | |
|---|
| | 138 | bezierUpdater.target = target; |
|---|
| | 139 | |
|---|
| | 140 | updaters.push(bezierUpdater); |
|---|
| | 141 | |
|---|
| | 142 | if (source != null) { |
|---|
| | 143 | for (name in source) { |
|---|
| | 144 | if ((value = source[name]) is Number) { |
|---|
| | 145 | if ((isRelative = /^\$/.test(name))) { |
|---|
| | 146 | name = name.substr(1); |
|---|
| | 147 | } |
|---|
| | 148 | bezierUpdater.setSourceValue(name, Number(value), isRelative); |
|---|
| | 149 | } |
|---|
| | 150 | else { |
|---|
| | 151 | if (!map[name]) { |
|---|
| | 152 | child = createBezier(bezierUpdater.getObject(name), dest != null ? dest[name] : null, value, controlPoint != null ? controlPoint[name] : null); |
|---|
| | 153 | updaters.push(new UpdaterLadder(bezierUpdater, child, name)); |
|---|
| | 154 | map[name] = true; |
|---|
| | 155 | } |
|---|
| | 156 | } |
|---|
| | 157 | } |
|---|
| | 158 | } |
|---|
| | 159 | if (dest != null) { |
|---|
| | 160 | for (name in dest) { |
|---|
| | 161 | if ((value = dest[name]) is Number) { |
|---|
| | 162 | if ((isRelative = /^\$/.test(name))) { |
|---|
| | 163 | name = name.substr(1); |
|---|
| | 164 | } |
|---|
| | 165 | bezierUpdater.setDestinationValue(name, Number(value), isRelative); |
|---|
| | 166 | } |
|---|
| | 167 | else { |
|---|
| | 168 | if (!map[name]) { |
|---|
| | 169 | child = createBezier(bezierUpdater.getObject(name), null, source != null ? source[name] : null, controlPoint != null ? controlPoint[name] : null); |
|---|
| | 170 | updaters.push(new UpdaterLadder(bezierUpdater, child, name)); |
|---|
| | 171 | map[name] = true; |
|---|
| | 172 | } |
|---|
| | 173 | } |
|---|
| | 174 | } |
|---|
| | 175 | } |
|---|
| | 176 | if (controlPoint != null) { |
|---|
| | 177 | for (name in controlPoint) { |
|---|
| | 178 | if ((value = controlPoint[name]) is Number) { |
|---|
| | 179 | value = [value]; |
|---|
| | 180 | } |
|---|
| | 181 | if (value is Array) { |
|---|
| | 182 | if ((isRelative = /^\$/.test(name))) { |
|---|
| | 183 | name = name.substr(1); |
|---|
| | 184 | } |
|---|
| | 185 | cp = value as Array; |
|---|
| | 186 | l = cp.length; |
|---|
| | 187 | for (i = 0; i < l; ++i) { |
|---|
| | 188 | bezierUpdater.addControlPoint(name, cp[i], isRelative); |
|---|
| | 189 | } |
|---|
| | 190 | } |
|---|
| | 191 | else { |
|---|
| | 192 | if (!map[name]) { |
|---|
| | 193 | child = createBezier(bezierUpdater.getObject(name), dest != null ? dest[name] : null, source != null ? source[name] : null, value); |
|---|
| | 194 | updaters.push(new UpdaterLadder(bezierUpdater, child, name)); |
|---|
| | 195 | map[name] = true; |
|---|
| | 196 | } |
|---|
| | 197 | } |
|---|
| | 198 | } |
|---|
| | 199 | } |
|---|
| | 200 | |
|---|
| | 201 | if (updaters.length == 1) { |
|---|
| | 202 | updater = updaters[0]; |
|---|
| | 203 | } |
|---|
| | 204 | else if (updaters.length > 1) { |
|---|
| | 205 | updater = new CompositeUpdater(target, updaters); |
|---|
| | 206 | } |
|---|
| | 207 | |
|---|
| | 208 | return updater; |
|---|
| | 209 | } |
|---|