2020-07-01 16:55:10 +08:00
var _ _extends = ( this && this . _ _extends ) || ( function ( ) {
var extendStatics = Object . setPrototypeOf ||
( { _ _proto _ _ : [ ] } instanceof Array && function ( d , b ) { d . _ _proto _ _ = b ; } ) ||
function ( d , b ) { for ( var p in b ) if ( b . hasOwnProperty ( p ) ) d [ p ] = b [ p ] ; } ;
2020-07-01 06:57:39 +00:00
return function ( d , b ) {
2020-07-01 16:55:10 +08:00
extendStatics ( d , b ) ;
function _ _ ( ) { this . constructor = d ; }
d . prototype = b === null ? Object . create ( b ) : ( _ _ . prototype = b . prototype , new _ _ ( ) ) ;
} ;
} ) ( ) ;
var _ _awaiter = ( this && this . _ _awaiter ) || function ( thisArg , _arguments , P , generator ) {
2020-07-01 06:57:39 +00:00
return new ( P || ( P = Promise ) ) ( function ( resolve , reject ) {
2020-07-01 16:55:10 +08:00
function fulfilled ( value ) { try { step ( generator . next ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function rejected ( value ) { try { step ( generator [ "throw" ] ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function step ( result ) { result . done ? resolve ( result . value ) : new P ( function ( resolve ) { resolve ( result . value ) ; } ) . then ( fulfilled , rejected ) ; }
step ( ( generator = generator . apply ( thisArg , _arguments || [ ] ) ) . next ( ) ) ;
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
} ;
var _ _generator = ( this && this . _ _generator ) || function ( thisArg , body ) {
var _ = { label : 0 , sent : function ( ) { if ( t [ 0 ] & 1 ) throw t [ 1 ] ; return t [ 1 ] ; } , trys : [ ] , ops : [ ] } , f , y , t , g ;
return g = { next : verb ( 0 ) , "throw" : verb ( 1 ) , "return" : verb ( 2 ) } , typeof Symbol === "function" && ( g [ Symbol . iterator ] = function ( ) { return this ; } ) , g ;
function verb ( n ) { return function ( v ) { return step ( [ n , v ] ) ; } ; }
2020-07-01 06:57:39 +00:00
function step ( op ) {
2020-07-01 16:55:10 +08:00
if ( f ) throw new TypeError ( "Generator is already executing." ) ;
while ( _ ) try {
if ( f = 1 , y && ( t = op [ 0 ] & 2 ? y [ "return" ] : op [ 0 ] ? y [ "throw" ] || ( ( t = y [ "return" ] ) && t . call ( y ) , 0 ) : y . next ) && ! ( t = t . call ( y , op [ 1 ] ) ) . done ) return t ;
if ( y = 0 , t ) op = [ op [ 0 ] & 2 , t . value ] ;
switch ( op [ 0 ] ) {
case 0 : case 1 : t = op ; break ;
case 4 : _ . label ++ ; return { value : op [ 1 ] , done : false } ;
case 5 : _ . label ++ ; y = op [ 1 ] ; op = [ 0 ] ; continue ;
case 7 : op = _ . ops . pop ( ) ; _ . trys . pop ( ) ; continue ;
default :
if ( ! ( t = _ . trys , t = t . length > 0 && t [ t . length - 1 ] ) && ( op [ 0 ] === 6 || op [ 0 ] === 2 ) ) { _ = 0 ; continue ; }
if ( op [ 0 ] === 3 && ( ! t || ( op [ 1 ] > t [ 0 ] && op [ 1 ] < t [ 3 ] ) ) ) { _ . label = op [ 1 ] ; break ; }
if ( op [ 0 ] === 6 && _ . label < t [ 1 ] ) { _ . label = t [ 1 ] ; t = op ; break ; }
if ( t && _ . label < t [ 2 ] ) { _ . label = t [ 2 ] ; _ . ops . push ( op ) ; break ; }
if ( t [ 2 ] ) _ . ops . pop ( ) ;
_ . trys . pop ( ) ; continue ;
}
op = body . call ( thisArg , _ ) ;
} catch ( e ) { op = [ 6 , e ] ; y = 0 ; } finally { f = t = 0 ; }
if ( op [ 0 ] & 5 ) throw op [ 1 ] ; return { value : op [ 0 ] ? op [ 1 ] : void 0 , done : true } ;
2020-07-01 06:57:39 +00:00
}
2020-07-01 16:55:10 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . findIndex = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function findIndex ( array , predicate ) {
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
if ( predicate . call ( arguments [ 2 ] , array [ i ] , i , array ) ) {
return i ;
}
}
return - 1 ;
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return findIndex ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . any = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function any ( array , predicate ) {
return array . findIndex ( predicate ) > - 1 ;
}
return any ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . firstOrDefault = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function firstOrDefault ( array , predicate ) {
var index = array . findIndex ( predicate ) ;
return index == - 1 ? null : array [ index ] ;
}
return firstOrDefault ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . find = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function find ( array , predicate ) {
return array . firstOrDefault ( predicate ) ;
}
return find ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . where = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function where ( array , predicate ) {
if ( typeof ( array . reduce ) === "function" ) {
return array . reduce ( function ( ret , element , index ) {
if ( predicate . call ( arguments [ 2 ] , element , index , array ) ) {
ret . push ( element ) ;
}
return ret ;
} , [ ] ) ;
}
else {
var ret = [ ] ;
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
var element = array [ i ] ;
if ( predicate . call ( arguments [ 2 ] , element , i , array ) ) {
ret . push ( element ) ;
}
}
return ret ;
2020-06-08 11:49:45 +08:00
}
}
2020-07-01 16:55:10 +08:00
return where ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . count = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function count ( array , predicate ) {
return array . where ( predicate ) . length ;
}
return count ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . findAll = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function findAll ( array , predicate ) {
return array . where ( predicate ) ;
}
return findAll ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . contains = function ( value ) {
2020-07-01 16:55:10 +08:00
function contains ( array , value ) {
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
if ( array [ i ] == value ) {
return true ;
}
}
return false ;
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return contains ( this , value ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . removeAll = function ( predicate ) {
2020-07-01 16:55:10 +08:00
function removeAll ( array , predicate ) {
var index ;
do {
index = array . findIndex ( predicate ) ;
if ( index >= 0 ) {
array . splice ( index , 1 ) ;
}
} while ( index >= 0 ) ;
}
removeAll ( this , predicate ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . remove = function ( element ) {
2020-07-01 16:55:10 +08:00
function remove ( array , element ) {
var index = array . findIndex ( function ( x ) {
return x === element ;
} ) ;
if ( index >= 0 ) {
array . splice ( index , 1 ) ;
return true ;
}
else {
return false ;
}
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return remove ( this , element ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . removeAt = function ( index ) {
2020-07-01 16:55:10 +08:00
function removeAt ( array , index ) {
array . splice ( index , 1 ) ;
}
return removeAt ( this , index ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . removeRange = function ( index , count ) {
2020-07-01 16:55:10 +08:00
function removeRange ( array , index , count ) {
array . splice ( index , count ) ;
}
return removeRange ( this , index , count ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . select = function ( selector ) {
2020-07-01 16:55:10 +08:00
function select ( array , selector ) {
if ( typeof ( array . reduce ) === "function" ) {
return array . reduce ( function ( ret , element , index ) {
ret . push ( selector . call ( arguments [ 2 ] , element , index , array ) ) ;
return ret ;
} , [ ] ) ;
}
else {
var ret = [ ] ;
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
ret . push ( selector . call ( arguments [ 2 ] , array [ i ] , i , array ) ) ;
}
return ret ;
}
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return select ( this , selector ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . orderBy = function ( keySelector , comparer ) {
2020-07-01 16:55:10 +08:00
function orderBy ( array , keySelector , comparer ) {
array . sort ( function ( x , y ) {
var v1 = keySelector ( x ) ;
var v2 = keySelector ( y ) ;
if ( comparer ) {
return comparer ( v1 , v2 ) ;
}
else {
return ( v1 > v2 ) ? 1 : - 1 ;
}
} ) ;
return array ;
}
return orderBy ( this , keySelector , comparer ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . orderByDescending = function ( keySelector , comparer ) {
2020-07-01 16:55:10 +08:00
function orderByDescending ( array , keySelector , comparer ) {
array . sort ( function ( x , y ) {
var v1 = keySelector ( x ) ;
var v2 = keySelector ( y ) ;
if ( comparer ) {
return - comparer ( v1 , v2 ) ;
}
else {
return ( v1 < v2 ) ? 1 : - 1 ;
}
} ) ;
return array ;
}
return orderByDescending ( this , keySelector , comparer ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . groupBy = function ( keySelector ) {
2020-07-01 16:55:10 +08:00
function groupBy ( array , keySelector ) {
if ( typeof ( array . reduce ) === "function" ) {
var keys _1 = [ ] ;
return array . reduce ( function ( groups , element , index ) {
var key = JSON . stringify ( keySelector . call ( arguments [ 1 ] , element , index , array ) ) ;
var index2 = keys _1 . findIndex ( function ( x ) { return x === key ; } ) ;
if ( index2 < 0 ) {
index2 = keys _1 . push ( key ) - 1 ;
}
if ( ! groups [ index2 ] ) {
groups [ index2 ] = [ ] ;
}
groups [ index2 ] . push ( element ) ;
return groups ;
} , [ ] ) ;
}
else {
var groups = [ ] ;
var keys = [ ] ;
var _loop _1 = function ( i , len ) {
var key = JSON . stringify ( keySelector . call ( arguments _1 [ 1 ] , array [ i ] , i , array ) ) ;
var index = keys . findIndex ( function ( x ) { return x === key ; } ) ;
if ( index < 0 ) {
index = keys . push ( key ) - 1 ;
}
if ( ! groups [ index ] ) {
groups [ index ] = [ ] ;
}
groups [ index ] . push ( array [ i ] ) ;
} ;
var arguments _1 = arguments ;
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
_loop _1 ( i , len ) ;
}
return groups ;
}
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return groupBy ( this , keySelector ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
Array . prototype . sum = function ( selector ) {
2020-07-01 16:55:10 +08:00
function sum ( array , selector ) {
var ret ;
for ( var i = 0 , len = array . length ; i < len ; i ++ ) {
if ( i == 0 ) {
if ( selector ) {
ret = selector . call ( arguments [ 2 ] , array [ i ] , i , array ) ;
}
else {
ret = array [ i ] ;
}
}
else {
if ( selector ) {
ret += selector . call ( arguments [ 2 ] , array [ i ] , i , array ) ;
}
else {
ret += array [ i ] ;
}
}
}
return ret ;
2020-06-08 11:49:45 +08:00
}
2020-07-01 16:55:10 +08:00
return sum ( this , selector ) ;
2020-06-08 11:49:45 +08:00
} ;
2020-07-01 06:57:39 +00:00
var PriorityQueueNode = ( function ( ) {
2020-07-01 16:55:10 +08:00
function PriorityQueueNode ( ) {
this . priority = 0 ;
this . insertionIndex = 0 ;
this . queueIndex = 0 ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
return PriorityQueueNode ;
} ( ) ) ;
var AStarPathfinder = ( function ( ) {
function AStarPathfinder ( ) {
}
AStarPathfinder . search = function ( graph , start , goal ) {
var _this = this ;
var foundPath = false ;
var cameFrom = new Map ( ) ;
cameFrom . set ( start , start ) ;
var costSoFar = new Map ( ) ;
var frontier = new PriorityQueue ( 1000 ) ;
frontier . enqueue ( new AStarNode ( start ) , 0 ) ;
costSoFar . set ( start , 0 ) ;
var _loop _2 = function ( ) {
var current = frontier . dequeue ( ) ;
if ( JSON . stringify ( current . data ) == JSON . stringify ( goal ) ) {
foundPath = true ;
return "break" ;
}
graph . getNeighbors ( current . data ) . forEach ( function ( next ) {
2020-07-10 11:24:42 +08:00
console . log ( next ) ;
2020-07-01 16:55:10 +08:00
var newCost = costSoFar . get ( current . data ) + graph . cost ( current . data , next ) ;
if ( ! _this . hasKey ( costSoFar , next ) || newCost < costSoFar . get ( next ) ) {
costSoFar . set ( next , newCost ) ;
var priority = newCost + graph . heuristic ( next , goal ) ;
frontier . enqueue ( new AStarNode ( next ) , priority ) ;
cameFrom . set ( next , current . data ) ;
}
} ) ;
} ;
while ( frontier . count > 0 ) {
var state _1 = _loop _2 ( ) ;
if ( state _1 === "break" )
break ;
}
return foundPath ? this . recontructPath ( cameFrom , start , goal ) : null ;
} ;
AStarPathfinder . hasKey = function ( map , compareKey ) {
var iterator = map . keys ( ) ;
var r ;
while ( r = iterator . next ( ) , ! r . done ) {
if ( JSON . stringify ( r . value ) == JSON . stringify ( compareKey ) )
return true ;
}
return false ;
} ;
AStarPathfinder . getKey = function ( map , compareKey ) {
var iterator = map . keys ( ) ;
var valueIterator = map . values ( ) ;
var r ;
var v ;
while ( r = iterator . next ( ) , v = valueIterator . next ( ) , ! r . done ) {
if ( JSON . stringify ( r . value ) == JSON . stringify ( compareKey ) )
return v . value ;
}
return null ;
} ;
AStarPathfinder . recontructPath = function ( cameFrom , start , goal ) {
var path = [ ] ;
var current = goal ;
path . push ( goal ) ;
while ( current != start ) {
current = this . getKey ( cameFrom , current ) ;
path . push ( current ) ;
}
path . reverse ( ) ;
return path ;
} ;
return AStarPathfinder ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var AStarNode = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( AStarNode , _super ) ;
function AStarNode ( data ) {
var _this = _super . call ( this ) || this ;
_this . data = data ;
return _this ;
}
return AStarNode ;
} ( PriorityQueueNode ) ) ;
2020-07-01 06:57:39 +00:00
var AstarGridGraph = ( function ( ) {
2020-07-01 16:55:10 +08:00
function AstarGridGraph ( width , height ) {
this . dirs = [
2020-07-08 15:15:15 +08:00
new Vector2 ( 1 , 0 ) ,
new Vector2 ( 0 , - 1 ) ,
new Vector2 ( - 1 , 0 ) ,
new Vector2 ( 0 , 1 )
2020-07-01 16:55:10 +08:00
] ;
this . walls = [ ] ;
this . weightedNodes = [ ] ;
this . defaultWeight = 1 ;
this . weightedNodeWeight = 5 ;
this . _neighbors = new Array ( 4 ) ;
this . _width = width ;
this . _height = height ;
}
AstarGridGraph . prototype . isNodeInBounds = function ( node ) {
return 0 <= node . x && node . x < this . _width && 0 <= node . y && node . y < this . _height ;
} ;
AstarGridGraph . prototype . isNodePassable = function ( node ) {
return ! this . walls . firstOrDefault ( function ( wall ) { return JSON . stringify ( wall ) == JSON . stringify ( node ) ; } ) ;
} ;
AstarGridGraph . prototype . search = function ( start , goal ) {
return AStarPathfinder . search ( this , start , goal ) ;
} ;
AstarGridGraph . prototype . getNeighbors = function ( node ) {
var _this = this ;
this . _neighbors . length = 0 ;
this . dirs . forEach ( function ( dir ) {
2020-07-08 15:15:15 +08:00
var next = new Vector2 ( node . x + dir . x , node . y + dir . y ) ;
2020-07-01 16:55:10 +08:00
if ( _this . isNodeInBounds ( next ) && _this . isNodePassable ( next ) )
_this . _neighbors . push ( next ) ;
} ) ;
return this . _neighbors ;
} ;
AstarGridGraph . prototype . cost = function ( from , to ) {
return this . weightedNodes . find ( function ( p ) { return JSON . stringify ( p ) == JSON . stringify ( to ) ; } ) ? this . weightedNodeWeight : this . defaultWeight ;
} ;
AstarGridGraph . prototype . heuristic = function ( node , goal ) {
return Math . abs ( node . x - goal . x ) + Math . abs ( node . y - goal . y ) ;
} ;
return AstarGridGraph ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var PriorityQueue = ( function ( ) {
2020-07-01 16:55:10 +08:00
function PriorityQueue ( maxNodes ) {
this . _numNodes = 0 ;
this . _nodes = new Array ( maxNodes + 1 ) ;
this . _numNodesEverEnqueued = 0 ;
}
PriorityQueue . prototype . clear = function ( ) {
this . _nodes . splice ( 1 , this . _numNodes ) ;
this . _numNodes = 0 ;
} ;
Object . defineProperty ( PriorityQueue . prototype , "count" , {
get : function ( ) {
return this . _numNodes ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-09 16:36:42 +08:00
Object . defineProperty ( PriorityQueue . prototype , "maxSize" , {
get : function ( ) {
return this . _nodes . length - 1 ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-01 16:55:10 +08:00
PriorityQueue . prototype . contains = function ( node ) {
2020-07-09 16:36:42 +08:00
if ( ! node ) {
console . error ( "node cannot be null" ) ;
return false ;
}
if ( node . queueIndex < 0 || node . queueIndex >= this . _nodes . length ) {
console . error ( "node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?" ) ;
return false ;
}
2020-07-01 16:55:10 +08:00
return ( this . _nodes [ node . queueIndex ] == node ) ;
} ;
PriorityQueue . prototype . enqueue = function ( node , priority ) {
node . priority = priority ;
this . _numNodes ++ ;
this . _nodes [ this . _numNodes ] = node ;
node . queueIndex = this . _numNodes ;
node . insertionIndex = this . _numNodesEverEnqueued ++ ;
this . cascadeUp ( this . _nodes [ this . _numNodes ] ) ;
} ;
PriorityQueue . prototype . dequeue = function ( ) {
var returnMe = this . _nodes [ 1 ] ;
this . remove ( returnMe ) ;
return returnMe ;
} ;
PriorityQueue . prototype . remove = function ( node ) {
if ( node . queueIndex == this . _numNodes ) {
this . _nodes [ this . _numNodes ] = null ;
this . _numNodes -- ;
return ;
}
var formerLastNode = this . _nodes [ this . _numNodes ] ;
this . swap ( node , formerLastNode ) ;
delete this . _nodes [ this . _numNodes ] ;
this . _numNodes -- ;
this . onNodeUpdated ( formerLastNode ) ;
} ;
PriorityQueue . prototype . isValidQueue = function ( ) {
for ( var i = 1 ; i < this . _nodes . length ; i ++ ) {
if ( this . _nodes [ i ] ) {
var childLeftIndex = 2 * i ;
if ( childLeftIndex < this . _nodes . length && this . _nodes [ childLeftIndex ] &&
this . hasHigherPriority ( this . _nodes [ childLeftIndex ] , this . _nodes [ i ] ) )
return false ;
var childRightIndex = childLeftIndex + 1 ;
if ( childRightIndex < this . _nodes . length && this . _nodes [ childRightIndex ] &&
this . hasHigherPriority ( this . _nodes [ childRightIndex ] , this . _nodes [ i ] ) )
return false ;
}
}
return true ;
} ;
PriorityQueue . prototype . onNodeUpdated = function ( node ) {
var parentIndex = Math . floor ( node . queueIndex / 2 ) ;
var parentNode = this . _nodes [ parentIndex ] ;
if ( parentIndex > 0 && this . hasHigherPriority ( node , parentNode ) ) {
this . cascadeUp ( node ) ;
}
else {
this . cascadeDown ( node ) ;
}
} ;
PriorityQueue . prototype . cascadeDown = function ( node ) {
var newParent ;
var finalQueueIndex = node . queueIndex ;
while ( true ) {
newParent = node ;
var childLeftIndex = 2 * finalQueueIndex ;
if ( childLeftIndex > this . _numNodes ) {
node . queueIndex = finalQueueIndex ;
this . _nodes [ finalQueueIndex ] = node ;
break ;
}
var childLeft = this . _nodes [ childLeftIndex ] ;
if ( this . hasHigherPriority ( childLeft , newParent ) ) {
newParent = childLeft ;
}
var childRightIndex = childLeftIndex + 1 ;
if ( childRightIndex <= this . _numNodes ) {
var childRight = this . _nodes [ childRightIndex ] ;
if ( this . hasHigherPriority ( childRight , newParent ) ) {
newParent = childRight ;
}
}
if ( newParent != node ) {
this . _nodes [ finalQueueIndex ] = newParent ;
var temp = newParent . queueIndex ;
newParent . queueIndex = finalQueueIndex ;
finalQueueIndex = temp ;
}
else {
node . queueIndex = finalQueueIndex ;
this . _nodes [ finalQueueIndex ] = node ;
break ;
}
}
} ;
PriorityQueue . prototype . cascadeUp = function ( node ) {
var parent = Math . floor ( node . queueIndex / 2 ) ;
while ( parent >= 1 ) {
var parentNode = this . _nodes [ parent ] ;
if ( this . hasHigherPriority ( parentNode , node ) )
break ;
this . swap ( node , parentNode ) ;
parent = Math . floor ( node . queueIndex / 2 ) ;
}
} ;
PriorityQueue . prototype . swap = function ( node1 , node2 ) {
this . _nodes [ node1 . queueIndex ] = node2 ;
this . _nodes [ node2 . queueIndex ] = node1 ;
var temp = node1 . queueIndex ;
node1 . queueIndex = node2 . queueIndex ;
node2 . queueIndex = temp ;
} ;
PriorityQueue . prototype . hasHigherPriority = function ( higher , lower ) {
return ( higher . priority < lower . priority ||
( higher . priority == lower . priority && higher . insertionIndex < lower . insertionIndex ) ) ;
} ;
return PriorityQueue ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var BreadthFirstPathfinder = ( function ( ) {
2020-07-01 16:55:10 +08:00
function BreadthFirstPathfinder ( ) {
}
BreadthFirstPathfinder . search = function ( graph , start , goal ) {
var _this = this ;
var foundPath = false ;
var frontier = [ ] ;
frontier . unshift ( start ) ;
var cameFrom = new Map ( ) ;
cameFrom . set ( start , start ) ;
var _loop _3 = function ( ) {
var current = frontier . shift ( ) ;
if ( JSON . stringify ( current ) == JSON . stringify ( goal ) ) {
foundPath = true ;
return "break" ;
}
graph . getNeighbors ( current ) . forEach ( function ( next ) {
if ( ! _this . hasKey ( cameFrom , next ) ) {
frontier . unshift ( next ) ;
cameFrom . set ( next , current ) ;
}
} ) ;
} ;
while ( frontier . length > 0 ) {
var state _2 = _loop _3 ( ) ;
if ( state _2 === "break" )
break ;
}
return foundPath ? AStarPathfinder . recontructPath ( cameFrom , start , goal ) : null ;
} ;
BreadthFirstPathfinder . hasKey = function ( map , compareKey ) {
var iterator = map . keys ( ) ;
var r ;
while ( r = iterator . next ( ) , ! r . done ) {
if ( JSON . stringify ( r . value ) == JSON . stringify ( compareKey ) )
return true ;
}
return false ;
} ;
return BreadthFirstPathfinder ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var UnweightedGraph = ( function ( ) {
2020-07-01 16:55:10 +08:00
function UnweightedGraph ( ) {
this . edges = new Map ( ) ;
}
UnweightedGraph . prototype . addEdgesForNode = function ( node , edges ) {
this . edges . set ( node , edges ) ;
return this ;
} ;
UnweightedGraph . prototype . getNeighbors = function ( node ) {
return this . edges . get ( node ) ;
} ;
return UnweightedGraph ;
} ( ) ) ;
2020-07-08 15:15:15 +08:00
var Vector2 = ( function ( ) {
function Vector2 ( x , y ) {
this . x = 0 ;
this . y = 0 ;
2020-07-01 16:55:10 +08:00
this . x = x ? x : 0 ;
this . y = y ? y : this . x ;
2020-06-11 00:03:26 +08:00
}
2020-07-08 15:15:15 +08:00
Object . defineProperty ( Vector2 , "zero" , {
get : function ( ) {
return Vector2 . zeroVector2 ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Vector2 , "one" , {
get : function ( ) {
return Vector2 . unitVector2 ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Vector2 , "unitX" , {
get : function ( ) {
return Vector2 . unitXVector ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Vector2 , "unitY" , {
get : function ( ) {
return Vector2 . unitYVector ;
} ,
enumerable : true ,
configurable : true
} ) ;
Vector2 . add = function ( value1 , value2 ) {
var result = new Vector2 ( 0 , 0 ) ;
result . x = value1 . x + value2 . x ;
result . y = value1 . y + value2 . y ;
return result ;
} ;
Vector2 . divide = function ( value1 , value2 ) {
var result = new Vector2 ( 0 , 0 ) ;
result . x = value1 . x / value2 . x ;
result . y = value1 . y / value2 . y ;
return result ;
} ;
Vector2 . multiply = function ( value1 , value2 ) {
var result = new Vector2 ( 0 , 0 ) ;
result . x = value1 . x * value2 . x ;
result . y = value1 . y * value2 . y ;
return result ;
} ;
Vector2 . subtract = function ( value1 , value2 ) {
var result = new Vector2 ( 0 , 0 ) ;
result . x = value1 . x - value2 . x ;
result . y = value1 . y - value2 . y ;
return result ;
} ;
Vector2 . prototype . normalize = function ( ) {
var val = 1 / Math . sqrt ( ( this . x * this . x ) + ( this . y * this . y ) ) ;
this . x *= val ;
this . y *= val ;
} ;
Vector2 . prototype . length = function ( ) {
return Math . sqrt ( ( this . x * this . x ) + ( this . y * this . y ) ) ;
} ;
Vector2 . prototype . round = function ( ) {
return new Vector2 ( Math . round ( this . x ) , Math . round ( this . y ) ) ;
} ;
Vector2 . normalize = function ( value ) {
var val = 1 / Math . sqrt ( ( value . x * value . x ) + ( value . y * value . y ) ) ;
value . x *= val ;
value . y *= val ;
return value ;
} ;
Vector2 . dot = function ( value1 , value2 ) {
return ( value1 . x * value2 . x ) + ( value1 . y * value2 . y ) ;
} ;
Vector2 . distanceSquared = function ( value1 , value2 ) {
var v1 = value1 . x - value2 . x , v2 = value1 . y - value2 . y ;
return ( v1 * v1 ) + ( v2 * v2 ) ;
} ;
Vector2 . clamp = function ( value1 , min , max ) {
return new Vector2 ( MathHelper . clamp ( value1 . x , min . x , max . x ) , MathHelper . clamp ( value1 . y , min . y , max . y ) ) ;
} ;
Vector2 . lerp = function ( value1 , value2 , amount ) {
return new Vector2 ( MathHelper . lerp ( value1 . x , value2 . x , amount ) , MathHelper . lerp ( value1 . y , value2 . y , amount ) ) ;
} ;
Vector2 . transform = function ( position , matrix ) {
return new Vector2 ( ( position . x * matrix . m11 ) + ( position . y * matrix . m21 ) , ( position . x * matrix . m12 ) + ( position . y * matrix . m22 ) ) ;
} ;
Vector2 . distance = function ( value1 , value2 ) {
var v1 = value1 . x - value2 . x , v2 = value1 . y - value2 . y ;
return Math . sqrt ( ( v1 * v1 ) + ( v2 * v2 ) ) ;
} ;
Vector2 . negate = function ( value ) {
var result = new Vector2 ( ) ;
result . x = - value . x ;
result . y = - value . y ;
return result ;
} ;
Vector2 . unitYVector = new Vector2 ( 0 , 1 ) ;
Vector2 . unitXVector = new Vector2 ( 1 , 0 ) ;
Vector2 . unitVector2 = new Vector2 ( 1 , 1 ) ;
Vector2 . zeroVector2 = new Vector2 ( 0 , 0 ) ;
return Vector2 ;
2020-07-01 16:55:10 +08:00
} ( ) ) ;
var UnweightedGridGraph = ( function ( ) {
function UnweightedGridGraph ( width , height , allowDiagonalSearch ) {
if ( allowDiagonalSearch === void 0 ) { allowDiagonalSearch = false ; }
this . walls = [ ] ;
this . _neighbors = new Array ( 4 ) ;
this . _width = width ;
this . _hegiht = height ;
this . _dirs = allowDiagonalSearch ? UnweightedGridGraph . COMPASS _DIRS : UnweightedGridGraph . CARDINAL _DIRS ;
}
UnweightedGridGraph . prototype . isNodeInBounds = function ( node ) {
return 0 <= node . x && node . x < this . _width && 0 <= node . y && node . y < this . _hegiht ;
} ;
UnweightedGridGraph . prototype . isNodePassable = function ( node ) {
return ! this . walls . firstOrDefault ( function ( wall ) { return JSON . stringify ( wall ) == JSON . stringify ( node ) ; } ) ;
} ;
UnweightedGridGraph . prototype . getNeighbors = function ( node ) {
var _this = this ;
this . _neighbors . length = 0 ;
this . _dirs . forEach ( function ( dir ) {
2020-07-08 15:15:15 +08:00
var next = new Vector2 ( node . x + dir . x , node . y + dir . y ) ;
2020-07-01 16:55:10 +08:00
if ( _this . isNodeInBounds ( next ) && _this . isNodePassable ( next ) )
_this . _neighbors . push ( next ) ;
} ) ;
return this . _neighbors ;
} ;
UnweightedGridGraph . prototype . search = function ( start , goal ) {
return BreadthFirstPathfinder . search ( this , start , goal ) ;
} ;
UnweightedGridGraph . CARDINAL _DIRS = [
2020-07-08 15:15:15 +08:00
new Vector2 ( 1 , 0 ) ,
new Vector2 ( 0 , - 1 ) ,
new Vector2 ( - 1 , 0 ) ,
new Vector2 ( 0 , - 1 )
2020-07-01 16:55:10 +08:00
] ;
UnweightedGridGraph . COMPASS _DIRS = [
2020-07-08 15:15:15 +08:00
new Vector2 ( 1 , 0 ) ,
new Vector2 ( 1 , - 1 ) ,
new Vector2 ( 0 , - 1 ) ,
new Vector2 ( - 1 , - 1 ) ,
new Vector2 ( - 1 , 0 ) ,
new Vector2 ( - 1 , 1 ) ,
new Vector2 ( 0 , 1 ) ,
new Vector2 ( 1 , 1 ) ,
2020-07-01 16:55:10 +08:00
] ;
return UnweightedGridGraph ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var WeightedGridGraph = ( function ( ) {
2020-07-01 16:55:10 +08:00
function WeightedGridGraph ( width , height , allowDiagonalSearch ) {
if ( allowDiagonalSearch === void 0 ) { allowDiagonalSearch = false ; }
this . walls = [ ] ;
this . weightedNodes = [ ] ;
this . defaultWeight = 1 ;
this . weightedNodeWeight = 5 ;
this . _neighbors = new Array ( 4 ) ;
this . _width = width ;
this . _height = height ;
this . _dirs = allowDiagonalSearch ? WeightedGridGraph . COMPASS _DIRS : WeightedGridGraph . CARDINAL _DIRS ;
}
WeightedGridGraph . prototype . isNodeInBounds = function ( node ) {
return 0 <= node . x && node . x < this . _width && 0 <= node . y && node . y < this . _height ;
} ;
WeightedGridGraph . prototype . isNodePassable = function ( node ) {
return ! this . walls . firstOrDefault ( function ( wall ) { return JSON . stringify ( wall ) == JSON . stringify ( node ) ; } ) ;
} ;
WeightedGridGraph . prototype . search = function ( start , goal ) {
return WeightedPathfinder . search ( this , start , goal ) ;
} ;
WeightedGridGraph . prototype . getNeighbors = function ( node ) {
var _this = this ;
this . _neighbors . length = 0 ;
this . _dirs . forEach ( function ( dir ) {
2020-07-08 15:15:15 +08:00
var next = new Vector2 ( node . x + dir . x , node . y + dir . y ) ;
2020-07-01 16:55:10 +08:00
if ( _this . isNodeInBounds ( next ) && _this . isNodePassable ( next ) )
_this . _neighbors . push ( next ) ;
} ) ;
return this . _neighbors ;
} ;
WeightedGridGraph . prototype . cost = function ( from , to ) {
return this . weightedNodes . find ( function ( t ) { return JSON . stringify ( t ) == JSON . stringify ( to ) ; } ) ? this . weightedNodeWeight : this . defaultWeight ;
} ;
WeightedGridGraph . CARDINAL _DIRS = [
2020-07-08 15:15:15 +08:00
new Vector2 ( 1 , 0 ) ,
new Vector2 ( 0 , - 1 ) ,
new Vector2 ( - 1 , 0 ) ,
new Vector2 ( 0 , 1 )
2020-07-01 16:55:10 +08:00
] ;
WeightedGridGraph . COMPASS _DIRS = [
2020-07-08 15:15:15 +08:00
new Vector2 ( 1 , 0 ) ,
new Vector2 ( 1 , - 1 ) ,
new Vector2 ( 0 , - 1 ) ,
new Vector2 ( - 1 , - 1 ) ,
new Vector2 ( - 1 , 0 ) ,
new Vector2 ( - 1 , 1 ) ,
new Vector2 ( 0 , 1 ) ,
new Vector2 ( 1 , 1 ) ,
2020-07-01 16:55:10 +08:00
] ;
return WeightedGridGraph ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var WeightedNode = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( WeightedNode , _super ) ;
function WeightedNode ( data ) {
var _this = _super . call ( this ) || this ;
_this . data = data ;
return _this ;
}
return WeightedNode ;
} ( PriorityQueueNode ) ) ;
2020-07-01 06:57:39 +00:00
var WeightedPathfinder = ( function ( ) {
2020-07-01 16:55:10 +08:00
function WeightedPathfinder ( ) {
}
WeightedPathfinder . search = function ( graph , start , goal ) {
var _this = this ;
var foundPath = false ;
var cameFrom = new Map ( ) ;
cameFrom . set ( start , start ) ;
var costSoFar = new Map ( ) ;
var frontier = new PriorityQueue ( 1000 ) ;
frontier . enqueue ( new WeightedNode ( start ) , 0 ) ;
costSoFar . set ( start , 0 ) ;
var _loop _4 = function ( ) {
var current = frontier . dequeue ( ) ;
if ( JSON . stringify ( current . data ) == JSON . stringify ( goal ) ) {
foundPath = true ;
return "break" ;
}
graph . getNeighbors ( current . data ) . forEach ( function ( next ) {
var newCost = costSoFar . get ( current . data ) + graph . cost ( current . data , next ) ;
if ( ! _this . hasKey ( costSoFar , next ) || newCost < costSoFar . get ( next ) ) {
costSoFar . set ( next , newCost ) ;
var priprity = newCost ;
frontier . enqueue ( new WeightedNode ( next ) , priprity ) ;
cameFrom . set ( next , current . data ) ;
}
} ) ;
} ;
while ( frontier . count > 0 ) {
var state _3 = _loop _4 ( ) ;
if ( state _3 === "break" )
break ;
}
return foundPath ? this . recontructPath ( cameFrom , start , goal ) : null ;
} ;
WeightedPathfinder . hasKey = function ( map , compareKey ) {
var iterator = map . keys ( ) ;
var r ;
while ( r = iterator . next ( ) , ! r . done ) {
if ( JSON . stringify ( r . value ) == JSON . stringify ( compareKey ) )
return true ;
}
return false ;
} ;
WeightedPathfinder . getKey = function ( map , compareKey ) {
var iterator = map . keys ( ) ;
var valueIterator = map . values ( ) ;
var r ;
var v ;
while ( r = iterator . next ( ) , v = valueIterator . next ( ) , ! r . done ) {
if ( JSON . stringify ( r . value ) == JSON . stringify ( compareKey ) )
return v . value ;
}
return null ;
} ;
WeightedPathfinder . recontructPath = function ( cameFrom , start , goal ) {
var path = [ ] ;
var current = goal ;
path . push ( goal ) ;
while ( current != start ) {
current = this . getKey ( cameFrom , current ) ;
path . push ( current ) ;
}
path . reverse ( ) ;
return path ;
} ;
return WeightedPathfinder ;
} ( ) ) ;
2020-07-09 16:16:04 +08:00
var Debug = ( function ( ) {
function Debug ( ) {
}
Debug . drawHollowRect = function ( rectanle , color , duration ) {
if ( duration === void 0 ) { duration = 0 ; }
this . _debugDrawItems . push ( new DebugDrawItem ( rectanle , color , duration ) ) ;
} ;
Debug . render = function ( ) {
if ( this . _debugDrawItems . length > 0 ) {
var debugShape = new egret . Shape ( ) ;
if ( SceneManager . scene ) {
SceneManager . scene . addChild ( debugShape ) ;
}
for ( var i = this . _debugDrawItems . length - 1 ; i >= 0 ; i -- ) {
var item = this . _debugDrawItems [ i ] ;
if ( item . draw ( debugShape ) )
this . _debugDrawItems . removeAt ( i ) ;
}
}
} ;
Debug . _debugDrawItems = [ ] ;
return Debug ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var DebugDefaults = ( function ( ) {
2020-07-01 16:55:10 +08:00
function DebugDefaults ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
DebugDefaults . verletParticle = 0xDC345E ;
DebugDefaults . verletConstraintEdge = 0x433E36 ;
return DebugDefaults ;
} ( ) ) ;
2020-07-09 16:16:04 +08:00
var DebugDrawType ;
( function ( DebugDrawType ) {
DebugDrawType [ DebugDrawType [ "line" ] = 0 ] = "line" ;
DebugDrawType [ DebugDrawType [ "hollowRectangle" ] = 1 ] = "hollowRectangle" ;
DebugDrawType [ DebugDrawType [ "pixel" ] = 2 ] = "pixel" ;
DebugDrawType [ DebugDrawType [ "text" ] = 3 ] = "text" ;
} ) ( DebugDrawType || ( DebugDrawType = { } ) ) ;
var DebugDrawItem = ( function ( ) {
function DebugDrawItem ( rectangle , color , duration ) {
this . rectangle = rectangle ;
this . color = color ;
this . duration = duration ;
this . drawType = DebugDrawType . hollowRectangle ;
}
DebugDrawItem . prototype . draw = function ( shape ) {
switch ( this . drawType ) {
case DebugDrawType . line :
DrawUtils . drawLine ( shape , this . start , this . end , this . color ) ;
break ;
case DebugDrawType . hollowRectangle :
DrawUtils . drawHollowRect ( shape , this . rectangle , this . color ) ;
break ;
case DebugDrawType . pixel :
DrawUtils . drawPixel ( shape , new Vector2 ( this . x , this . y ) , this . color , this . size ) ;
break ;
case DebugDrawType . text :
break ;
}
this . duration -= Time . deltaTime ;
return this . duration < 0 ;
} ;
return DebugDrawItem ;
} ( ) ) ;
2020-07-01 16:55:10 +08:00
var Component = ( function ( _super ) {
_ _extends ( Component , _super ) ;
function Component ( ) {
var _this = _super !== null && _super . apply ( this , arguments ) || this ;
_this . _enabled = true ;
_this . updateInterval = 1 ;
2020-07-10 11:24:42 +08:00
_this . _updateOrder = 0 ;
2020-07-01 16:55:10 +08:00
return _this ;
}
Object . defineProperty ( Component . prototype , "enabled" , {
get : function ( ) {
return this . entity ? this . entity . enabled && this . _enabled : this . _enabled ;
} ,
set : function ( value ) {
this . setEnabled ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-09 14:16:10 +08:00
Object . defineProperty ( Component . prototype , "localPosition" , {
get : function ( ) {
return new Vector2 ( this . entity . x + this . x , this . entity . y + this . y ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-01 16:55:10 +08:00
Component . prototype . setEnabled = function ( isEnabled ) {
if ( this . _enabled != isEnabled ) {
this . _enabled = isEnabled ;
if ( this . _enabled ) {
this . onEnabled ( ) ;
}
else {
this . onDisabled ( ) ;
}
}
return this ;
} ;
2020-07-10 11:24:42 +08:00
Object . defineProperty ( Component . prototype , "updateOrder" , {
get : function ( ) {
return this . _updateOrder ;
} ,
set : function ( value ) {
this . setUpdateOrder ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Component . prototype . setUpdateOrder = function ( updateOrder ) {
if ( this . _updateOrder != updateOrder ) {
this . _updateOrder = updateOrder ;
}
return this ;
} ;
2020-07-01 16:55:10 +08:00
Component . prototype . initialize = function ( ) {
} ;
Component . prototype . onAddedToEntity = function ( ) {
} ;
Component . prototype . onRemovedFromEntity = function ( ) {
} ;
Component . prototype . onEnabled = function ( ) {
} ;
Component . prototype . onDisabled = function ( ) {
} ;
Component . prototype . debugRender = function ( ) {
} ;
2020-07-08 18:12:17 +08:00
Component . prototype . onEntityTransformChanged = function ( comp ) {
} ;
2020-07-01 16:55:10 +08:00
Component . prototype . registerComponent = function ( ) {
this . entity . componentBits . set ( ComponentTypeManager . getIndexFor ( this ) , false ) ;
this . entity . scene . entityProcessors . onComponentAdded ( this . entity ) ;
} ;
Component . prototype . deregisterComponent = function ( ) {
this . entity . componentBits . set ( ComponentTypeManager . getIndexFor ( this ) ) ;
this . entity . scene . entityProcessors . onComponentRemoved ( this . entity ) ;
} ;
return Component ;
} ( egret . DisplayObjectContainer ) ) ;
2020-07-12 14:51:20 +08:00
var CoreEvents ;
( function ( CoreEvents ) {
CoreEvents [ CoreEvents [ "SceneChanged" ] = 0 ] = "SceneChanged" ;
} ) ( CoreEvents || ( CoreEvents = { } ) ) ;
2020-07-01 06:57:39 +00:00
var Entity = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( Entity , _super ) ;
function Entity ( name ) {
var _this = _super . call ( this ) || this ;
_this . _updateOrder = 0 ;
_this . _enabled = true ;
_this . _tag = 0 ;
_this . name = name ;
_this . components = new ComponentList ( _this ) ;
_this . id = Entity . _idGenerator ++ ;
_this . componentBits = new BitSet ( ) ;
2020-07-09 14:16:10 +08:00
_this . addEventListener ( egret . Event . ADDED _TO _STAGE , _this . onAddToStage , _this ) ;
2020-07-01 16:55:10 +08:00
return _this ;
}
Object . defineProperty ( Entity . prototype , "isDestoryed" , {
get : function ( ) {
return this . _isDestoryed ;
} ,
enumerable : true ,
configurable : true
2020-06-21 10:27:15 +08:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( Entity . prototype , "position" , {
get : function ( ) {
2020-07-08 18:12:17 +08:00
return new Vector2 ( this . x , this . y ) ;
2020-07-01 16:55:10 +08:00
} ,
set : function ( value ) {
2020-07-08 18:12:17 +08:00
this . $setX ( value . x ) ;
this . $setY ( value . y ) ;
this . onEntityTransformChanged ( TransformComponent . position ) ;
2020-07-01 16:55:10 +08:00
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Entity . prototype , "scale" , {
get : function ( ) {
return new Vector2 ( this . scaleX , this . scaleY ) ;
} ,
set : function ( value ) {
2020-07-08 18:12:17 +08:00
this . $setScaleX ( value . x ) ;
this . $setScaleY ( value . y ) ;
this . onEntityTransformChanged ( TransformComponent . scale ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Entity . prototype , "rotation" , {
2020-07-09 14:16:10 +08:00
get : function ( ) {
return this . $getRotation ( ) ;
} ,
2020-07-08 18:12:17 +08:00
set : function ( value ) {
this . $setRotation ( value ) ;
this . onEntityTransformChanged ( TransformComponent . rotation ) ;
2020-07-01 16:55:10 +08:00
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Entity . prototype , "enabled" , {
get : function ( ) {
return this . _enabled ;
} ,
set : function ( value ) {
this . setEnabled ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Entity . prototype . setEnabled = function ( isEnabled ) {
if ( this . _enabled != isEnabled ) {
this . _enabled = isEnabled ;
}
return this ;
} ;
Object . defineProperty ( Entity . prototype , "tag" , {
get : function ( ) {
return this . _tag ;
} ,
set : function ( value ) {
this . setTag ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Entity . prototype , "stage" , {
get : function ( ) {
if ( ! this . scene )
return null ;
return this . scene . stage ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-09 14:16:10 +08:00
Entity . prototype . onAddToStage = function ( ) {
this . onEntityTransformChanged ( TransformComponent . position ) ;
} ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( Entity . prototype , "updateOrder" , {
get : function ( ) {
return this . _updateOrder ;
} ,
set : function ( value ) {
this . setUpdateOrder ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Entity . prototype . roundPosition = function ( ) {
this . position = Vector2Ext . round ( this . position ) ;
} ;
Entity . prototype . setUpdateOrder = function ( updateOrder ) {
if ( this . _updateOrder != updateOrder ) {
this . _updateOrder = updateOrder ;
if ( this . scene ) {
}
return this ;
}
} ;
Entity . prototype . setTag = function ( tag ) {
if ( this . _tag != tag ) {
if ( this . scene ) {
this . scene . entities . removeFromTagList ( this ) ;
}
this . _tag = tag ;
if ( this . scene ) {
this . scene . entities . addToTagList ( this ) ;
}
}
return this ;
} ;
Entity . prototype . attachToScene = function ( newScene ) {
this . scene = newScene ;
newScene . entities . add ( this ) ;
this . components . registerAllComponents ( ) ;
for ( var i = 0 ; i < this . numChildren ; i ++ ) {
this . getChildAt ( i ) . entity . attachToScene ( newScene ) ;
}
} ;
Entity . prototype . detachFromScene = function ( ) {
this . scene . entities . remove ( this ) ;
this . components . deregisterAllComponents ( ) ;
for ( var i = 0 ; i < this . numChildren ; i ++ )
this . getChildAt ( i ) . entity . detachFromScene ( ) ;
} ;
Entity . prototype . addComponent = function ( component ) {
component . entity = this ;
this . components . add ( component ) ;
this . addChild ( component ) ;
component . initialize ( ) ;
return component ;
} ;
Entity . prototype . hasComponent = function ( type ) {
return this . components . getComponent ( type , false ) != null ;
} ;
Entity . prototype . getOrCreateComponent = function ( type ) {
var comp = this . components . getComponent ( type , true ) ;
if ( ! comp ) {
comp = this . addComponent ( type ) ;
}
return comp ;
} ;
Entity . prototype . getComponent = function ( type ) {
return this . components . getComponent ( type , false ) ;
} ;
Entity . prototype . getComponents = function ( typeName , componentList ) {
return this . components . getComponents ( typeName , componentList ) ;
} ;
2020-07-08 18:12:17 +08:00
Entity . prototype . onEntityTransformChanged = function ( comp ) {
this . components . onEntityTransformChanged ( comp ) ;
} ;
2020-07-01 16:55:10 +08:00
Entity . prototype . removeComponentForType = function ( type ) {
var comp = this . getComponent ( type ) ;
if ( comp ) {
this . removeComponent ( comp ) ;
return true ;
}
return false ;
} ;
Entity . prototype . removeComponent = function ( component ) {
this . components . remove ( component ) ;
} ;
Entity . prototype . removeAllComponents = function ( ) {
for ( var i = 0 ; i < this . components . count ; i ++ ) {
this . removeComponent ( this . components . buffer [ i ] ) ;
}
} ;
Entity . prototype . update = function ( ) {
this . components . update ( ) ;
} ;
Entity . prototype . onAddedToScene = function ( ) {
} ;
Entity . prototype . onRemovedFromScene = function ( ) {
if ( this . _isDestoryed )
this . components . removeAllComponents ( ) ;
} ;
Entity . prototype . destroy = function ( ) {
this . _isDestoryed = true ;
2020-07-09 14:16:10 +08:00
this . removeEventListener ( egret . Event . ADDED _TO _STAGE , this . onAddToStage , this ) ;
2020-07-01 16:55:10 +08:00
this . scene . entities . remove ( this ) ;
this . removeChildren ( ) ;
2020-07-09 14:16:10 +08:00
if ( this . parent )
this . parent . removeChild ( this ) ;
2020-07-01 16:55:10 +08:00
for ( var i = this . numChildren - 1 ; i >= 0 ; i -- ) {
var child = this . getChildAt ( i ) ;
child . entity . destroy ( ) ;
}
} ;
return Entity ;
} ( egret . DisplayObjectContainer ) ) ;
2020-07-08 18:12:17 +08:00
var TransformComponent ;
( function ( TransformComponent ) {
TransformComponent [ TransformComponent [ "rotation" ] = 0 ] = "rotation" ;
TransformComponent [ TransformComponent [ "scale" ] = 1 ] = "scale" ;
TransformComponent [ TransformComponent [ "position" ] = 2 ] = "position" ;
} ) ( TransformComponent || ( TransformComponent = { } ) ) ;
2020-07-01 16:55:10 +08:00
var Scene = ( function ( _super ) {
_ _extends ( Scene , _super ) ;
function Scene ( ) {
var _this = _super . call ( this ) || this ;
_this . enablePostProcessing = true ;
_this . _renderers = [ ] ;
_this . _postProcessors = [ ] ;
_this . entityProcessors = new EntityProcessorList ( ) ;
_this . renderableComponents = new RenderableComponentList ( ) ;
_this . entities = new EntityList ( _this ) ;
_this . content = new ContentManager ( ) ;
_this . width = SceneManager . stage . stageWidth ;
_this . height = SceneManager . stage . stageHeight ;
_this . addEventListener ( egret . Event . ACTIVATE , _this . onActive , _this ) ;
_this . addEventListener ( egret . Event . DEACTIVATE , _this . onDeactive , _this ) ;
return _this ;
}
Scene . prototype . createEntity = function ( name ) {
var entity = new Entity ( name ) ;
entity . position = new Vector2 ( 0 , 0 ) ;
return this . addEntity ( entity ) ;
} ;
Scene . prototype . addEntity = function ( entity ) {
this . entities . add ( entity ) ;
entity . scene = this ;
this . addChild ( entity ) ;
for ( var i = 0 ; i < entity . numChildren ; i ++ )
this . addEntity ( entity . getChildAt ( i ) . entity ) ;
return entity ;
} ;
Scene . prototype . destroyAllEntities = function ( ) {
for ( var i = 0 ; i < this . entities . count ; i ++ ) {
this . entities . buffer [ i ] . destroy ( ) ;
}
} ;
Scene . prototype . findEntity = function ( name ) {
return this . entities . findEntity ( name ) ;
} ;
Scene . prototype . addEntityProcessor = function ( processor ) {
processor . scene = this ;
this . entityProcessors . add ( processor ) ;
return processor ;
} ;
Scene . prototype . removeEntityProcessor = function ( processor ) {
this . entityProcessors . remove ( processor ) ;
} ;
Scene . prototype . getEntityProcessor = function ( ) {
return this . entityProcessors . getProcessor ( ) ;
} ;
Scene . prototype . addRenderer = function ( renderer ) {
this . _renderers . push ( renderer ) ;
this . _renderers . sort ( ) ;
renderer . onAddedToScene ( this ) ;
return renderer ;
} ;
Scene . prototype . getRenderer = function ( type ) {
for ( var i = 0 ; i < this . _renderers . length ; i ++ ) {
if ( this . _renderers [ i ] instanceof type )
return this . _renderers [ i ] ;
}
return null ;
} ;
Scene . prototype . removeRenderer = function ( renderer ) {
this . _renderers . remove ( renderer ) ;
renderer . unload ( ) ;
} ;
Scene . prototype . begin = function ( ) {
if ( SceneManager . sceneTransition ) {
SceneManager . stage . addChildAt ( this , SceneManager . stage . numChildren - 1 ) ;
}
else {
SceneManager . stage . addChild ( this ) ;
}
if ( this . _renderers . length == 0 ) {
this . addRenderer ( new DefaultRenderer ( ) ) ;
console . warn ( "场景开始时没有渲染器 自动添加DefaultRenderer以保证能够正常渲染" ) ;
}
this . camera = this . createEntity ( "camera" ) . getOrCreateComponent ( new Camera ( ) ) ;
Physics . reset ( ) ;
if ( this . entityProcessors )
this . entityProcessors . begin ( ) ;
this . camera . onSceneSizeChanged ( this . stage . stageWidth , this . stage . stageHeight ) ;
this . _didSceneBegin = true ;
this . onStart ( ) ;
} ;
Scene . prototype . end = function ( ) {
this . _didSceneBegin = false ;
this . removeEventListener ( egret . Event . DEACTIVATE , this . onDeactive , this ) ;
this . removeEventListener ( egret . Event . ACTIVATE , this . onActive , this ) ;
for ( var i = 0 ; i < this . _renderers . length ; i ++ ) {
this . _renderers [ i ] . unload ( ) ;
}
for ( var i = 0 ; i < this . _postProcessors . length ; i ++ ) {
this . _postProcessors [ i ] . unload ( ) ;
}
this . entities . removeAllEntities ( ) ;
this . removeChildren ( ) ;
Physics . clear ( ) ;
this . camera = null ;
this . content . dispose ( ) ;
if ( this . entityProcessors )
this . entityProcessors . end ( ) ;
this . unload ( ) ;
2020-07-08 15:15:15 +08:00
if ( this . parent )
this . parent . removeChild ( this ) ;
2020-07-01 16:55:10 +08:00
} ;
Scene . prototype . onStart = function ( ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
return _ _generator ( this , function ( _a ) {
return [ 2 ] ;
} ) ;
} ) ;
} ;
Scene . prototype . onActive = function ( ) {
} ;
Scene . prototype . onDeactive = function ( ) {
} ;
Scene . prototype . unload = function ( ) { } ;
Scene . prototype . update = function ( ) {
this . entities . updateLists ( ) ;
if ( this . entityProcessors )
this . entityProcessors . update ( ) ;
this . entities . update ( ) ;
if ( this . entityProcessors )
this . entityProcessors . lateUpdate ( ) ;
this . renderableComponents . updateList ( ) ;
} ;
Scene . prototype . postRender = function ( ) {
var enabledCounter = 0 ;
if ( this . enablePostProcessing ) {
for ( var i = 0 ; i < this . _postProcessors . length ; i ++ ) {
if ( this . _postProcessors [ i ] . enable ) {
var isEven = MathHelper . isEven ( enabledCounter ) ;
enabledCounter ++ ;
this . _postProcessors [ i ] . process ( ) ;
}
}
}
} ;
Scene . prototype . render = function ( ) {
for ( var i = 0 ; i < this . _renderers . length ; i ++ ) {
this . _renderers [ i ] . render ( this ) ;
}
} ;
Scene . prototype . addPostProcessor = function ( postProcessor ) {
this . _postProcessors . push ( postProcessor ) ;
this . _postProcessors . sort ( ) ;
postProcessor . onAddedToScene ( this ) ;
if ( this . _didSceneBegin ) {
postProcessor . onSceneBackBufferSizeChanged ( this . stage . stageWidth , this . stage . stageHeight ) ;
}
return postProcessor ;
} ;
return Scene ;
} ( egret . DisplayObjectContainer ) ) ;
var SceneManager = ( function ( ) {
function SceneManager ( stage ) {
stage . addEventListener ( egret . Event . ENTER _FRAME , SceneManager . update , this ) ;
2020-07-12 14:51:20 +08:00
SceneManager . _instnace = this ;
SceneManager . emitter = new Emitter ( ) ;
SceneManager . content = new ContentManager ( ) ;
2020-07-01 16:55:10 +08:00
SceneManager . stage = stage ;
SceneManager . initialize ( stage ) ;
}
2020-07-12 14:51:20 +08:00
Object . defineProperty ( SceneManager , "Instance" , {
get : function ( ) {
return this . _instnace ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( SceneManager , "scene" , {
get : function ( ) {
return this . _scene ;
} ,
set : function ( value ) {
if ( ! value )
throw new Error ( "场景不能为空" ) ;
if ( this . _scene == null ) {
this . _scene = value ;
this . _scene . begin ( ) ;
2020-07-12 14:51:20 +08:00
SceneManager . Instance . onSceneChanged ( ) ;
2020-07-01 16:55:10 +08:00
}
else {
this . _nextScene = value ;
}
2020-07-12 14:51:20 +08:00
this . registerActiveSceneChanged ( this . _scene , this . _nextScene ) ;
2020-07-01 16:55:10 +08:00
} ,
enumerable : true ,
configurable : true
} ) ;
SceneManager . initialize = function ( stage ) {
Input . initialize ( stage ) ;
} ;
SceneManager . update = function ( ) {
Time . update ( egret . getTimer ( ) ) ;
if ( SceneManager . _scene ) {
for ( var i = GlobalManager . globalManagers . length - 1 ; i >= 0 ; i -- ) {
if ( GlobalManager . globalManagers [ i ] . enabled )
GlobalManager . globalManagers [ i ] . update ( ) ;
}
if ( ! SceneManager . sceneTransition ||
( SceneManager . sceneTransition && ( ! SceneManager . sceneTransition . loadsNewScene || SceneManager . sceneTransition . isNewSceneLoaded ) ) ) {
SceneManager . _scene . update ( ) ;
}
if ( SceneManager . _nextScene ) {
SceneManager . _scene . end ( ) ;
SceneManager . _scene = SceneManager . _nextScene ;
SceneManager . _nextScene = null ;
2020-07-12 14:51:20 +08:00
SceneManager . _instnace . onSceneChanged ( ) ;
2020-07-01 16:55:10 +08:00
SceneManager . _scene . begin ( ) ;
}
}
SceneManager . render ( ) ;
} ;
SceneManager . render = function ( ) {
if ( this . sceneTransition ) {
this . sceneTransition . preRender ( ) ;
if ( this . _scene && ! this . sceneTransition . hasPreviousSceneRender ) {
this . _scene . render ( ) ;
this . _scene . postRender ( ) ;
this . sceneTransition . onBeginTransition ( ) ;
}
else if ( this . sceneTransition ) {
if ( this . _scene && this . sceneTransition . isNewSceneLoaded ) {
this . _scene . render ( ) ;
this . _scene . postRender ( ) ;
}
this . sceneTransition . render ( ) ;
}
}
else if ( this . _scene ) {
this . _scene . render ( ) ;
2020-07-09 16:16:04 +08:00
Debug . render ( ) ;
2020-07-01 16:55:10 +08:00
this . _scene . postRender ( ) ;
}
} ;
SceneManager . startSceneTransition = function ( sceneTransition ) {
if ( this . sceneTransition ) {
console . warn ( "在前一个场景完成之前,不能开始一个新的场景转换。" ) ;
return ;
}
this . sceneTransition = sceneTransition ;
return sceneTransition ;
} ;
2020-07-12 14:51:20 +08:00
SceneManager . registerActiveSceneChanged = function ( current , next ) {
if ( this . activeSceneChanged )
this . activeSceneChanged ( current , next ) ;
} ;
SceneManager . prototype . onSceneChanged = function ( ) {
} ;
2020-07-01 16:55:10 +08:00
return SceneManager ;
} ( ) ) ;
var Camera = ( function ( _super ) {
_ _extends ( Camera , _super ) ;
function Camera ( ) {
var _this = _super . call ( this ) || this ;
_this . _origin = Vector2 . zero ;
_this . _minimumZoom = 0.3 ;
_this . _maximumZoom = 3 ;
2020-07-08 18:12:17 +08:00
_this . _position = Vector2 . zero ;
2020-07-01 16:55:10 +08:00
_this . followLerp = 0.1 ;
_this . deadzone = new Rectangle ( ) ;
_this . focusOffset = new Vector2 ( ) ;
_this . mapLockEnabled = false ;
_this . mapSize = new Vector2 ( ) ;
_this . _worldSpaceDeadZone = new Rectangle ( ) ;
_this . _desiredPositionDelta = new Vector2 ( ) ;
_this . cameraStyle = CameraStyle . lockOn ;
_this . width = SceneManager . stage . stageWidth ;
_this . height = SceneManager . stage . stageHeight ;
_this . setZoom ( 0 ) ;
return _this ;
}
Object . defineProperty ( Camera . prototype , "zoom" , {
get : function ( ) {
if ( this . _zoom == 0 )
return 1 ;
if ( this . _zoom < 1 )
return MathHelper . map ( this . _zoom , this . _minimumZoom , 1 , - 1 , 0 ) ;
return MathHelper . map ( this . _zoom , 1 , this . _maximumZoom , 0 , 1 ) ;
} ,
set : function ( value ) {
this . setZoom ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "minimumZoom" , {
get : function ( ) {
return this . _minimumZoom ;
} ,
set : function ( value ) {
this . setMinimumZoom ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "maximumZoom" , {
get : function ( ) {
return this . _maximumZoom ;
} ,
set : function ( value ) {
this . setMaximumZoom ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "origin" , {
get : function ( ) {
return this . _origin ;
} ,
set : function ( value ) {
if ( this . _origin != value ) {
this . _origin = value ;
}
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "position" , {
get : function ( ) {
2020-07-08 18:12:17 +08:00
return this . _position ;
} ,
set : function ( value ) {
this . _position = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "x" , {
get : function ( ) {
return this . _position . x ;
} ,
set : function ( value ) {
this . _position . x = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Camera . prototype , "y" , {
get : function ( ) {
return this . _position . y ;
2020-07-01 16:55:10 +08:00
} ,
set : function ( value ) {
2020-07-08 18:12:17 +08:00
this . _position . y = value ;
2020-07-01 16:55:10 +08:00
} ,
enumerable : true ,
configurable : true
} ) ;
Camera . prototype . onSceneSizeChanged = function ( newWidth , newHeight ) {
var oldOrigin = this . _origin ;
this . origin = new Vector2 ( newWidth / 2 , newHeight / 2 ) ;
this . entity . position = Vector2 . add ( this . entity . position , Vector2 . subtract ( this . _origin , oldOrigin ) ) ;
} ;
Camera . prototype . setMinimumZoom = function ( minZoom ) {
if ( this . _zoom < minZoom )
this . _zoom = this . minimumZoom ;
this . _minimumZoom = minZoom ;
return this ;
} ;
Camera . prototype . setMaximumZoom = function ( maxZoom ) {
if ( this . _zoom > maxZoom )
this . _zoom = maxZoom ;
this . _maximumZoom = maxZoom ;
return this ;
} ;
Camera . prototype . setZoom = function ( zoom ) {
var newZoom = MathHelper . clamp ( zoom , - 1 , 1 ) ;
if ( newZoom == 0 ) {
this . _zoom = 1 ;
}
else if ( newZoom < 0 ) {
this . _zoom = MathHelper . map ( newZoom , - 1 , 0 , this . _minimumZoom , 1 ) ;
}
else {
this . _zoom = MathHelper . map ( newZoom , 0 , 1 , 1 , this . _maximumZoom ) ;
}
SceneManager . scene . scaleX = this . _zoom ;
SceneManager . scene . scaleY = this . _zoom ;
return this ;
} ;
Camera . prototype . setRotation = function ( rotation ) {
SceneManager . scene . rotation = rotation ;
return this ;
} ;
Camera . prototype . setPosition = function ( position ) {
this . entity . position = position ;
return this ;
} ;
Camera . prototype . follow = function ( targetEntity , cameraStyle ) {
if ( cameraStyle === void 0 ) { cameraStyle = CameraStyle . cameraWindow ; }
this . targetEntity = targetEntity ;
this . cameraStyle = cameraStyle ;
var cameraBounds = new Rectangle ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
switch ( this . cameraStyle ) {
case CameraStyle . cameraWindow :
var w = cameraBounds . width / 6 ;
var h = cameraBounds . height / 3 ;
this . deadzone = new Rectangle ( ( cameraBounds . width - w ) / 2 , ( cameraBounds . height - h ) / 2 , w , h ) ;
break ;
case CameraStyle . lockOn :
this . deadzone = new Rectangle ( cameraBounds . width / 2 , cameraBounds . height / 2 , 10 , 10 ) ;
break ;
}
} ;
Camera . prototype . update = function ( ) {
var cameraBounds = new Rectangle ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
var halfScreen = Vector2 . multiply ( new Vector2 ( cameraBounds . width , cameraBounds . height ) , new Vector2 ( 0.5 ) ) ;
this . _worldSpaceDeadZone . x = this . position . x - halfScreen . x + this . deadzone . x + this . focusOffset . x ;
this . _worldSpaceDeadZone . y = this . position . y - halfScreen . y + this . deadzone . y + this . focusOffset . y ;
this . _worldSpaceDeadZone . width = this . deadzone . width ;
this . _worldSpaceDeadZone . height = this . deadzone . height ;
if ( this . targetEntity )
this . updateFollow ( ) ;
this . position = Vector2 . lerp ( this . position , Vector2 . add ( this . position , this . _desiredPositionDelta ) , this . followLerp ) ;
this . entity . roundPosition ( ) ;
if ( this . mapLockEnabled ) {
this . position = this . clampToMapSize ( this . position ) ;
this . entity . roundPosition ( ) ;
}
} ;
Camera . prototype . clampToMapSize = function ( position ) {
var cameraBounds = new Rectangle ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
var halfScreen = Vector2 . multiply ( new Vector2 ( cameraBounds . width , cameraBounds . height ) , new Vector2 ( 0.5 ) ) ;
var cameraMax = new Vector2 ( this . mapSize . x - halfScreen . x , this . mapSize . y - halfScreen . y ) ;
return Vector2 . clamp ( position , halfScreen , cameraMax ) ;
} ;
Camera . prototype . updateFollow = function ( ) {
this . _desiredPositionDelta . x = this . _desiredPositionDelta . y = 0 ;
if ( this . cameraStyle == CameraStyle . lockOn ) {
var targetX = this . targetEntity . position . x ;
var targetY = this . targetEntity . position . y ;
if ( this . _worldSpaceDeadZone . x > targetX )
this . _desiredPositionDelta . x = targetX - this . _worldSpaceDeadZone . x ;
else if ( this . _worldSpaceDeadZone . x < targetX )
this . _desiredPositionDelta . x = targetX - this . _worldSpaceDeadZone . x ;
if ( this . _worldSpaceDeadZone . y < targetY )
this . _desiredPositionDelta . y = targetY - this . _worldSpaceDeadZone . y ;
else if ( this . _worldSpaceDeadZone . y > targetY )
this . _desiredPositionDelta . y = targetY - this . _worldSpaceDeadZone . y ;
}
else {
if ( ! this . _targetCollider ) {
this . _targetCollider = this . targetEntity . getComponent ( Collider ) ;
if ( ! this . _targetCollider )
return ;
}
var targetBounds = this . targetEntity . getComponent ( Collider ) . bounds ;
if ( ! this . _worldSpaceDeadZone . containsRect ( targetBounds ) ) {
if ( this . _worldSpaceDeadZone . left > targetBounds . left )
this . _desiredPositionDelta . x = targetBounds . left - this . _worldSpaceDeadZone . left ;
else if ( this . _worldSpaceDeadZone . right < targetBounds . right )
this . _desiredPositionDelta . x = targetBounds . right - this . _worldSpaceDeadZone . right ;
if ( this . _worldSpaceDeadZone . bottom < targetBounds . bottom )
this . _desiredPositionDelta . y = targetBounds . bottom - this . _worldSpaceDeadZone . bottom ;
else if ( this . _worldSpaceDeadZone . top > targetBounds . top )
this . _desiredPositionDelta . y = targetBounds . top - this . _worldSpaceDeadZone . top ;
}
}
} ;
return Camera ;
} ( Component ) ) ;
var CameraStyle ;
( function ( CameraStyle ) {
CameraStyle [ CameraStyle [ "lockOn" ] = 0 ] = "lockOn" ;
CameraStyle [ CameraStyle [ "cameraWindow" ] = 1 ] = "cameraWindow" ;
2020-06-19 09:16:49 +08:00
} ) ( CameraStyle || ( CameraStyle = { } ) ) ;
2020-07-01 06:57:39 +00:00
var ComponentPool = ( function ( ) {
2020-07-01 16:55:10 +08:00
function ComponentPool ( typeClass ) {
this . _type = typeClass ;
this . _cache = [ ] ;
2020-06-10 08:57:17 +08:00
}
2020-07-01 16:55:10 +08:00
ComponentPool . prototype . obtain = function ( ) {
try {
return this . _cache . length > 0 ? this . _cache . shift ( ) : new this . _type ( ) ;
}
catch ( err ) {
throw new Error ( this . _type + err ) ;
}
} ;
ComponentPool . prototype . free = function ( component ) {
component . reset ( ) ;
this . _cache . push ( component ) ;
} ;
return ComponentPool ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var PooledComponent = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( PooledComponent , _super ) ;
function PooledComponent ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
}
return PooledComponent ;
} ( Component ) ) ;
2020-07-01 06:57:39 +00:00
var RenderableComponent = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( RenderableComponent , _super ) ;
function RenderableComponent ( ) {
var _this = _super !== null && _super . apply ( this , arguments ) || this ;
_this . _areBoundsDirty = true ;
_this . _bounds = new Rectangle ( ) ;
_this . _localOffset = Vector2 . zero ;
_this . color = 0x000000 ;
return _this ;
}
Object . defineProperty ( RenderableComponent . prototype , "width" , {
get : function ( ) {
return this . getWidth ( ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( RenderableComponent . prototype , "height" , {
get : function ( ) {
return this . getHeight ( ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( RenderableComponent . prototype , "isVisible" , {
get : function ( ) {
return this . _isVisible ;
} ,
set : function ( value ) {
this . _isVisible = value ;
if ( this . _isVisible )
this . onBecameVisible ( ) ;
else
this . onBecameInvisible ( ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( RenderableComponent . prototype , "bounds" , {
get : function ( ) {
return new Rectangle ( this . getBounds ( ) . x , this . getBounds ( ) . y , this . getBounds ( ) . width , this . getBounds ( ) . height ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
RenderableComponent . prototype . getWidth = function ( ) {
return this . bounds . width ;
} ;
RenderableComponent . prototype . getHeight = function ( ) {
return this . bounds . height ;
} ;
RenderableComponent . prototype . onBecameVisible = function ( ) { } ;
RenderableComponent . prototype . onBecameInvisible = function ( ) { } ;
RenderableComponent . prototype . isVisibleFromCamera = function ( camera ) {
this . isVisible = camera . getBounds ( ) . intersects ( this . getBounds ( ) ) ;
return this . isVisible ;
} ;
return RenderableComponent ;
} ( PooledComponent ) ) ;
var Mesh = ( function ( _super ) {
_ _extends ( Mesh , _super ) ;
function Mesh ( ) {
var _this = _super . call ( this ) || this ;
_this . _mesh = new egret . Mesh ( ) ;
return _this ;
}
Mesh . prototype . setTexture = function ( texture ) {
this . _mesh . texture = texture ;
return this ;
} ;
Mesh . prototype . onAddedToEntity = function ( ) {
this . addChild ( this . _mesh ) ;
} ;
Mesh . prototype . onRemovedFromEntity = function ( ) {
this . removeChild ( this . _mesh ) ;
} ;
Mesh . prototype . render = function ( camera ) {
this . x = this . entity . position . x - camera . position . x + camera . origin . x ;
this . y = this . entity . position . y - camera . position . y + camera . origin . y ;
} ;
Mesh . prototype . reset = function ( ) {
} ;
return Mesh ;
} ( RenderableComponent ) ) ;
2020-07-01 06:57:39 +00:00
var SpriteRenderer = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( SpriteRenderer , _super ) ;
function SpriteRenderer ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-03 16:45:52 +08:00
Object . defineProperty ( SpriteRenderer . prototype , "sprite" , {
get : function ( ) {
return this . _sprite ;
} ,
set : function ( value ) {
this . setSprite ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
2020-07-01 16:55:10 +08:00
SpriteRenderer . prototype . setSprite = function ( sprite ) {
this . removeChildren ( ) ;
this . _sprite = sprite ;
2020-07-08 18:12:17 +08:00
if ( this . _sprite ) {
this . anchorOffsetX = this . _sprite . origin . x / this . _sprite . sourceRect . width ;
this . anchorOffsetY = this . _sprite . origin . y / this . _sprite . sourceRect . height ;
}
2020-07-03 17:51:18 +08:00
this . bitmap = new egret . Bitmap ( sprite . texture2D ) ;
this . addChild ( this . bitmap ) ;
2020-07-01 16:55:10 +08:00
return this ;
} ;
SpriteRenderer . prototype . setColor = function ( color ) {
var colorMatrix = [
1 , 0 , 0 , 0 , 0 ,
0 , 1 , 0 , 0 , 0 ,
0 , 0 , 1 , 0 , 0 ,
0 , 0 , 0 , 1 , 0
] ;
colorMatrix [ 0 ] = Math . floor ( color / 256 / 256 ) / 255 ;
colorMatrix [ 6 ] = Math . floor ( color / 256 % 256 ) / 255 ;
colorMatrix [ 12 ] = color % 256 / 255 ;
var colorFilter = new egret . ColorMatrixFilter ( colorMatrix ) ;
this . filters = [ colorFilter ] ;
return this ;
} ;
SpriteRenderer . prototype . isVisibleFromCamera = function ( camera ) {
this . isVisible = new Rectangle ( 0 , 0 , this . stage . stageWidth , this . stage . stageHeight ) . intersects ( this . bounds ) ;
this . visible = this . isVisible ;
return this . isVisible ;
} ;
SpriteRenderer . prototype . render = function ( camera ) {
2020-07-08 18:12:17 +08:00
this . x = - camera . position . x + camera . origin . x ;
this . y = - camera . position . y + camera . origin . y ;
2020-07-01 16:55:10 +08:00
} ;
SpriteRenderer . prototype . onRemovedFromEntity = function ( ) {
if ( this . parent )
this . parent . removeChild ( this ) ;
} ;
SpriteRenderer . prototype . reset = function ( ) {
} ;
return SpriteRenderer ;
} ( RenderableComponent ) ) ;
2020-07-07 21:40:57 +08:00
var TiledSpriteRenderer = ( function ( _super ) {
_ _extends ( TiledSpriteRenderer , _super ) ;
function TiledSpriteRenderer ( sprite ) {
var _this = _super . call ( this ) || this ;
_this . leftTexture = new egret . Bitmap ( ) ;
_this . rightTexture = new egret . Bitmap ( ) ;
_this . leftTexture . texture = sprite . texture2D ;
_this . rightTexture . texture = sprite . texture2D ;
_this . setSprite ( sprite ) ;
_this . sourceRect = sprite . sourceRect ;
return _this ;
}
Object . defineProperty ( TiledSpriteRenderer . prototype , "scrollX" , {
get : function ( ) {
return this . sourceRect . x ;
} ,
set : function ( value ) {
this . sourceRect . x = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( TiledSpriteRenderer . prototype , "scrollY" , {
get : function ( ) {
return this . sourceRect . y ;
} ,
set : function ( value ) {
this . sourceRect . y = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
TiledSpriteRenderer . prototype . render = function ( camera ) {
if ( ! this . sprite )
return ;
_super . prototype . render . call ( this , camera ) ;
var renderTexture = new egret . RenderTexture ( ) ;
var cacheBitmap = new egret . DisplayObjectContainer ( ) ;
cacheBitmap . removeChildren ( ) ;
cacheBitmap . addChild ( this . leftTexture ) ;
cacheBitmap . addChild ( this . rightTexture ) ;
this . leftTexture . x = this . sourceRect . x ;
2020-07-12 14:51:20 +08:00
this . rightTexture . x = this . sourceRect . x - this . sourceRect . width ;
2020-07-07 21:40:57 +08:00
this . leftTexture . y = this . sourceRect . y ;
this . rightTexture . y = this . sourceRect . y ;
cacheBitmap . cacheAsBitmap = true ;
renderTexture . drawToTexture ( cacheBitmap , new egret . Rectangle ( 0 , 0 , this . sourceRect . width , this . sourceRect . height ) ) ;
this . bitmap . texture = renderTexture ;
} ;
return TiledSpriteRenderer ;
} ( SpriteRenderer ) ) ;
var ScrollingSpriteRenderer = ( function ( _super ) {
_ _extends ( ScrollingSpriteRenderer , _super ) ;
function ScrollingSpriteRenderer ( ) {
var _this = _super !== null && _super . apply ( this , arguments ) || this ;
_this . scrollSpeedX = 15 ;
_this . scroolSpeedY = 0 ;
_this . _scrollX = 0 ;
_this . _scrollY = 0 ;
return _this ;
}
ScrollingSpriteRenderer . prototype . update = function ( ) {
2020-07-12 14:51:20 +08:00
this . _scrollX += this . scrollSpeedX * Time . deltaTime ;
this . _scrollY += this . scroolSpeedY * Time . deltaTime ;
2020-07-07 21:40:57 +08:00
this . sourceRect . x = this . _scrollX ;
this . sourceRect . y = this . _scrollY ;
} ;
2020-07-12 14:51:20 +08:00
ScrollingSpriteRenderer . prototype . render = function ( camera ) {
if ( ! this . sprite )
return ;
_super . prototype . render . call ( this , camera ) ;
var renderTexture = new egret . RenderTexture ( ) ;
var cacheBitmap = new egret . DisplayObjectContainer ( ) ;
cacheBitmap . removeChildren ( ) ;
cacheBitmap . addChild ( this . leftTexture ) ;
cacheBitmap . addChild ( this . rightTexture ) ;
this . leftTexture . x = this . sourceRect . x ;
this . rightTexture . x = this . sourceRect . x - this . sourceRect . width ;
this . leftTexture . y = this . sourceRect . y ;
this . rightTexture . y = this . sourceRect . y ;
cacheBitmap . cacheAsBitmap = true ;
renderTexture . drawToTexture ( cacheBitmap , new egret . Rectangle ( 0 , 0 , this . sourceRect . width , this . sourceRect . height ) ) ;
this . bitmap . texture = renderTexture ;
} ;
2020-07-07 21:40:57 +08:00
return ScrollingSpriteRenderer ;
} ( TiledSpriteRenderer ) ) ;
var Sprite = ( function ( ) {
function Sprite ( texture , sourceRect , origin ) {
if ( sourceRect === void 0 ) { sourceRect = new Rectangle ( 0 , 0 , texture . textureWidth , texture . textureHeight ) ; }
if ( origin === void 0 ) { origin = sourceRect . getHalfSize ( ) ; }
this . uvs = new Rectangle ( ) ;
this . texture2D = texture ;
this . sourceRect = sourceRect ;
this . center = new Vector2 ( sourceRect . width * 0.5 , sourceRect . height * 0.5 ) ;
this . origin = origin ;
var inverseTexW = 1 / texture . textureWidth ;
var inverseTexH = 1 / texture . textureHeight ;
this . uvs . x = sourceRect . x * inverseTexW ;
this . uvs . y = sourceRect . y * inverseTexH ;
this . uvs . width = sourceRect . width * inverseTexW ;
this . uvs . height = sourceRect . height * inverseTexH ;
}
return Sprite ;
} ( ) ) ;
var SpriteAnimation = ( function ( ) {
function SpriteAnimation ( sprites , frameRate ) {
this . sprites = sprites ;
this . frameRate = frameRate ;
}
return SpriteAnimation ;
} ( ) ) ;
2020-07-03 16:45:52 +08:00
var SpriteAnimator = ( function ( _super ) {
_ _extends ( SpriteAnimator , _super ) ;
function SpriteAnimator ( sprite ) {
var _this = _super . call ( this ) || this ;
_this . speed = 1 ;
_this . animationState = State . none ;
_this . _animations = new Map ( ) ;
_this . _elapsedTime = 0 ;
if ( sprite )
_this . setSprite ( sprite ) ;
return _this ;
}
Object . defineProperty ( SpriteAnimator . prototype , "isRunning" , {
get : function ( ) {
return this . animationState == State . running ;
} ,
enumerable : true ,
configurable : true
} ) ;
SpriteAnimator . prototype . addAnimation = function ( name , animation ) {
if ( ! this . sprite && animation . sprites . length > 0 )
this . setSprite ( animation . sprites [ 0 ] ) ;
this . _animations [ name ] = animation ;
return this ;
} ;
SpriteAnimator . prototype . play = function ( name , loopMode ) {
if ( loopMode === void 0 ) { loopMode = null ; }
this . currentAnimation = this . _animations [ name ] ;
this . currentAnimationName = name ;
this . currentFrame = 0 ;
this . animationState = State . running ;
this . sprite = this . currentAnimation . sprites [ 0 ] ;
this . _elapsedTime = 0 ;
this . _loopMode = loopMode ? loopMode : LoopMode . loop ;
} ;
SpriteAnimator . prototype . isAnimationActive = function ( name ) {
return this . currentAnimation && this . currentAnimationName == name ;
} ;
SpriteAnimator . prototype . pause = function ( ) {
this . animationState = State . paused ;
} ;
SpriteAnimator . prototype . unPause = function ( ) {
this . animationState = State . running ;
} ;
SpriteAnimator . prototype . stop = function ( ) {
this . currentAnimation = null ;
this . currentAnimationName = null ;
this . currentFrame = 0 ;
this . animationState = State . none ;
} ;
SpriteAnimator . prototype . update = function ( ) {
if ( this . animationState != State . running || ! this . currentAnimation )
return ;
var animation = this . currentAnimation ;
var secondsPerFrame = 1 / ( animation . frameRate * this . speed ) ;
var iterationDuration = secondsPerFrame * animation . sprites . length ;
this . _elapsedTime += Time . deltaTime ;
var time = Math . abs ( this . _elapsedTime ) ;
if ( this . _loopMode == LoopMode . once && time > iterationDuration ||
this . _loopMode == LoopMode . pingPongOnce && time > iterationDuration * 2 ) {
this . animationState = State . completed ;
this . _elapsedTime = 0 ;
this . currentFrame = 0 ;
this . sprite = animation . sprites [ this . currentFrame ] ;
return ;
}
var i = Math . floor ( time / secondsPerFrame ) ;
var n = animation . sprites . length ;
if ( n > 2 && ( this . _loopMode == LoopMode . pingPong || this . _loopMode == LoopMode . pingPongOnce ) ) {
var maxIndex = n - 1 ;
this . currentFrame = maxIndex - Math . abs ( maxIndex - i % ( maxIndex * 2 ) ) ;
}
else {
this . currentFrame = i % n ;
}
this . sprite = animation . sprites [ this . currentFrame ] ;
} ;
return SpriteAnimator ;
} ( SpriteRenderer ) ) ;
var LoopMode ;
( function ( LoopMode ) {
LoopMode [ LoopMode [ "loop" ] = 0 ] = "loop" ;
LoopMode [ LoopMode [ "once" ] = 1 ] = "once" ;
LoopMode [ LoopMode [ "clampForever" ] = 2 ] = "clampForever" ;
LoopMode [ LoopMode [ "pingPong" ] = 3 ] = "pingPong" ;
LoopMode [ LoopMode [ "pingPongOnce" ] = 4 ] = "pingPongOnce" ;
} ) ( LoopMode || ( LoopMode = { } ) ) ;
var State ;
( function ( State ) {
State [ State [ "none" ] = 0 ] = "none" ;
State [ State [ "running" ] = 1 ] = "running" ;
State [ State [ "paused" ] = 2 ] = "paused" ;
State [ State [ "completed" ] = 3 ] = "completed" ;
} ) ( State || ( State = { } ) ) ;
2020-07-01 06:57:39 +00:00
var Mover = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( Mover , _super ) ;
function Mover ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Mover . prototype . onAddedToEntity = function ( ) {
this . _triggerHelper = new ColliderTriggerHelper ( this . entity ) ;
} ;
Mover . prototype . calculateMovement = function ( motion ) {
var collisionResult = new CollisionResult ( ) ;
if ( ! this . entity . getComponent ( Collider ) || ! this . _triggerHelper ) {
return null ;
}
var colliders = this . entity . getComponents ( Collider ) ;
for ( var i = 0 ; i < colliders . length ; i ++ ) {
var collider = colliders [ i ] ;
if ( collider . isTrigger )
continue ;
var bounds = collider . bounds ;
bounds . x += motion . x ;
bounds . y += motion . y ;
2020-07-07 18:54:19 +08:00
var boxcastResult = Physics . boxcastBroadphaseExcludingSelf ( collider , bounds , collider . collidesWithLayers ) ;
bounds = boxcastResult . bounds ;
var neighbors = boxcastResult . tempHashSet ;
2020-07-01 16:55:10 +08:00
for ( var j = 0 ; j < neighbors . length ; j ++ ) {
var neighbor = neighbors [ j ] ;
if ( neighbor . isTrigger )
continue ;
var _internalcollisionResult = collider . collidesWith ( neighbor , motion ) ;
if ( _internalcollisionResult ) {
motion = Vector2 . subtract ( motion , _internalcollisionResult . minimumTranslationVector ) ;
if ( _internalcollisionResult . collider ) {
collisionResult = _internalcollisionResult ;
}
}
}
}
ListPool . free ( colliders ) ;
2020-07-07 18:54:19 +08:00
return { collisionResult : collisionResult , motion : motion } ;
2020-07-01 16:55:10 +08:00
} ;
Mover . prototype . applyMovement = function ( motion ) {
this . entity . position = Vector2 . add ( this . entity . position , motion ) ;
if ( this . _triggerHelper )
this . _triggerHelper . update ( ) ;
} ;
Mover . prototype . move = function ( motion ) {
2020-07-07 18:54:19 +08:00
var movementResult = this . calculateMovement ( motion ) ;
var collisionResult = movementResult . collisionResult ;
motion = movementResult . motion ;
2020-07-01 16:55:10 +08:00
this . applyMovement ( motion ) ;
return collisionResult ;
} ;
return Mover ;
} ( Component ) ) ;
2020-07-01 06:57:39 +00:00
var Collider = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( Collider , _super ) ;
function Collider ( ) {
var _this = _super !== null && _super . apply ( this , arguments ) || this ;
_this . physicsLayer = 1 << 0 ;
2020-07-08 18:12:17 +08:00
_this . registeredPhysicsBounds = new Rectangle ( ) ;
_this . shouldColliderScaleAndRotateWithTransform = true ;
2020-07-01 16:55:10 +08:00
_this . collidesWithLayers = Physics . allLayers ;
_this . _localOffset = new Vector2 ( 0 , 0 ) ;
return _this ;
}
Object . defineProperty ( Collider . prototype , "bounds" , {
get : function ( ) {
2020-07-09 14:16:10 +08:00
this . shape . recalculateBounds ( this ) ;
2020-07-01 16:55:10 +08:00
return this . shape . bounds ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Collider . prototype , "localOffset" , {
get : function ( ) {
return this . _localOffset ;
} ,
set : function ( value ) {
this . setLocalOffset ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Collider . prototype . setLocalOffset = function ( offset ) {
if ( this . _localOffset != offset ) {
this . unregisterColliderWithPhysicsSystem ( ) ;
this . _localOffset = offset ;
this . _localOffsetLength = this . _localOffset . length ( ) ;
this . registerColliderWithPhysicsSystem ( ) ;
}
} ;
Collider . prototype . registerColliderWithPhysicsSystem = function ( ) {
if ( this . _isParentEntityAddedToScene && ! this . _isColliderRegistered ) {
Physics . addCollider ( this ) ;
this . _isColliderRegistered = true ;
}
} ;
Collider . prototype . unregisterColliderWithPhysicsSystem = function ( ) {
if ( this . _isParentEntityAddedToScene && this . _isColliderRegistered ) {
Physics . removeCollider ( this ) ;
}
this . _isColliderRegistered = false ;
} ;
Collider . prototype . overlaps = function ( other ) {
return this . shape . overlaps ( other . shape ) ;
} ;
Collider . prototype . collidesWith = function ( collider , motion ) {
var oldPosition = this . shape . position ;
this . shape . position = Vector2 . add ( this . shape . position , motion ) ;
var result = this . shape . collidesWithShape ( collider . shape ) ;
if ( result )
result . collider = collider ;
this . shape . position = oldPosition ;
return result ;
} ;
Collider . prototype . onAddedToEntity = function ( ) {
if ( this . _colliderRequiresAutoSizing ) {
2020-07-09 15:11:30 +08:00
if ( ! ( this instanceof BoxCollider || this instanceof CircleCollider ) ) {
2020-07-01 16:55:10 +08:00
console . error ( "Only box and circle colliders can be created automatically" ) ;
}
var renderable = this . entity . getComponent ( RenderableComponent ) ;
if ( renderable ) {
2020-07-09 14:16:10 +08:00
var bounds = renderable . bounds ;
var width = bounds . width / this . entity . scale . x ;
var height = bounds . height / this . entity . scale . y ;
2020-07-09 15:11:30 +08:00
if ( this instanceof CircleCollider ) {
var circleCollider = this ;
circleCollider . radius = Math . max ( width , height ) * 0.5 ;
this . localOffset = bounds . location ;
}
else {
2020-07-01 16:55:10 +08:00
var boxCollider = this ;
boxCollider . width = width ;
boxCollider . height = height ;
2020-07-09 14:16:10 +08:00
this . localOffset = bounds . location ;
2020-07-01 16:55:10 +08:00
}
}
2020-07-09 14:16:10 +08:00
else {
console . warn ( "Collider has no shape and no RenderableComponent. Can't figure out how to size it." ) ;
2020-07-01 16:55:10 +08:00
}
}
this . _isParentEntityAddedToScene = true ;
this . registerColliderWithPhysicsSystem ( ) ;
} ;
Collider . prototype . onRemovedFromEntity = function ( ) {
this . unregisterColliderWithPhysicsSystem ( ) ;
this . _isParentEntityAddedToScene = false ;
} ;
Collider . prototype . onEnabled = function ( ) {
this . registerColliderWithPhysicsSystem ( ) ;
} ;
Collider . prototype . onDisabled = function ( ) {
this . unregisterColliderWithPhysicsSystem ( ) ;
} ;
2020-07-08 18:12:17 +08:00
Collider . prototype . onEntityTransformChanged = function ( comp ) {
if ( this . _isColliderRegistered )
Physics . updateCollider ( this ) ;
2020-07-08 15:15:15 +08:00
} ;
2020-07-09 14:16:10 +08:00
Collider . prototype . update = function ( ) {
var renderable = this . entity . getComponent ( RenderableComponent ) ;
if ( renderable ) {
this . $setX ( renderable . x + this . localOffset . x ) ;
this . $setY ( renderable . y + this . localOffset . y ) ;
}
} ;
2020-07-01 16:55:10 +08:00
return Collider ;
} ( Component ) ) ;
2020-07-01 06:57:39 +00:00
var BoxCollider = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( BoxCollider , _super ) ;
function BoxCollider ( ) {
var _this = _super . call ( this ) || this ;
_this . shape = new Box ( 1 , 1 ) ;
_this . _colliderRequiresAutoSizing = true ;
return _this ;
}
Object . defineProperty ( BoxCollider . prototype , "width" , {
get : function ( ) {
return this . shape . width ;
} ,
set : function ( value ) {
this . setWidth ( value ) ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
BoxCollider . prototype . setWidth = function ( width ) {
this . _colliderRequiresAutoSizing = false ;
var box = this . shape ;
if ( width != box . width ) {
box . updateBox ( width , box . height ) ;
if ( this . entity && this . _isParentEntityAddedToScene )
Physics . updateCollider ( this ) ;
}
return this ;
} ;
Object . defineProperty ( BoxCollider . prototype , "height" , {
get : function ( ) {
return this . shape . height ;
} ,
set : function ( value ) {
this . setHeight ( value ) ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
BoxCollider . prototype . setHeight = function ( height ) {
this . _colliderRequiresAutoSizing = false ;
var box = this . shape ;
if ( height != box . height ) {
box . updateBox ( box . width , height ) ;
if ( this . entity && this . _isParentEntityAddedToScene )
Physics . updateCollider ( this ) ;
}
} ;
BoxCollider . prototype . setSize = function ( width , height ) {
this . _colliderRequiresAutoSizing = false ;
var box = this . shape ;
if ( width != box . width || height != box . height ) {
box . updateBox ( width , height ) ;
if ( this . entity && this . _isParentEntityAddedToScene )
Physics . updateCollider ( this ) ;
}
return this ;
} ;
return BoxCollider ;
} ( Collider ) ) ;
2020-07-09 15:11:30 +08:00
var CircleCollider = ( function ( _super ) {
_ _extends ( CircleCollider , _super ) ;
function CircleCollider ( radius ) {
var _this = _super . call ( this ) || this ;
if ( radius )
_this . _colliderRequiresAutoSizing = true ;
_this . shape = new Circle ( radius ? radius : 1 ) ;
return _this ;
}
Object . defineProperty ( CircleCollider . prototype , "radius" , {
get : function ( ) {
return this . shape . radius ;
} ,
set : function ( value ) {
this . setRadius ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
CircleCollider . prototype . setRadius = function ( radius ) {
this . _colliderRequiresAutoSizing = false ;
var circle = this . shape ;
if ( radius != circle . radius ) {
circle . radius = radius ;
circle . _originalRadius = radius ;
if ( this . entity && this . _isParentEntityAddedToScene )
Physics . updateCollider ( this ) ;
}
return this ;
} ;
return CircleCollider ;
} ( Collider ) ) ;
var PolygonCollider = ( function ( _super ) {
_ _extends ( PolygonCollider , _super ) ;
function PolygonCollider ( points ) {
var _this = _super . call ( this ) || this ;
var isPolygonClosed = points [ 0 ] == points [ points . length - 1 ] ;
if ( isPolygonClosed )
points . splice ( points . length - 1 , 1 ) ;
var center = Polygon . findPolygonCenter ( points ) ;
_this . setLocalOffset ( center ) ;
Polygon . recenterPolygonVerts ( points ) ;
_this . shape = new Polygon ( points ) ;
return _this ;
}
return PolygonCollider ;
} ( Collider ) ) ;
2020-07-01 16:55:10 +08:00
var EntitySystem = ( function ( ) {
function EntitySystem ( matcher ) {
this . _entities = [ ] ;
this . _matcher = matcher ? matcher : Matcher . empty ( ) ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Object . defineProperty ( EntitySystem . prototype , "matcher" , {
get : function ( ) {
return this . _matcher ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( EntitySystem . prototype , "scene" , {
get : function ( ) {
return this . _scene ;
} ,
set : function ( value ) {
this . _scene = value ;
this . _entities = [ ] ;
} ,
enumerable : true ,
configurable : true
} ) ;
EntitySystem . prototype . initialize = function ( ) {
} ;
EntitySystem . prototype . onChanged = function ( entity ) {
var contains = this . _entities . contains ( entity ) ;
var interest = this . _matcher . IsIntersted ( entity ) ;
if ( interest && ! contains )
this . add ( entity ) ;
else if ( ! interest && contains )
this . remove ( entity ) ;
} ;
EntitySystem . prototype . add = function ( entity ) {
this . _entities . push ( entity ) ;
this . onAdded ( entity ) ;
} ;
EntitySystem . prototype . onAdded = function ( entity ) {
} ;
EntitySystem . prototype . remove = function ( entity ) {
this . _entities . remove ( entity ) ;
this . onRemoved ( entity ) ;
} ;
EntitySystem . prototype . onRemoved = function ( entity ) {
} ;
EntitySystem . prototype . update = function ( ) {
this . begin ( ) ;
this . process ( this . _entities ) ;
} ;
EntitySystem . prototype . lateUpdate = function ( ) {
this . lateProcess ( this . _entities ) ;
this . end ( ) ;
} ;
EntitySystem . prototype . begin = function ( ) {
} ;
EntitySystem . prototype . process = function ( entities ) {
} ;
EntitySystem . prototype . lateProcess = function ( entities ) {
} ;
EntitySystem . prototype . end = function ( ) {
} ;
return EntitySystem ;
} ( ) ) ;
var EntityProcessingSystem = ( function ( _super ) {
_ _extends ( EntityProcessingSystem , _super ) ;
function EntityProcessingSystem ( matcher ) {
return _super . call ( this , matcher ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
EntityProcessingSystem . prototype . lateProcessEntity = function ( entity ) {
} ;
EntityProcessingSystem . prototype . process = function ( entities ) {
var _this = this ;
entities . forEach ( function ( entity ) { return _this . processEntity ( entity ) ; } ) ;
} ;
EntityProcessingSystem . prototype . lateProcess = function ( entities ) {
var _this = this ;
entities . forEach ( function ( entity ) { return _this . lateProcessEntity ( entity ) ; } ) ;
} ;
return EntityProcessingSystem ;
} ( EntitySystem ) ) ;
var PassiveSystem = ( function ( _super ) {
_ _extends ( PassiveSystem , _super ) ;
function PassiveSystem ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
PassiveSystem . prototype . onChanged = function ( entity ) {
} ;
PassiveSystem . prototype . process = function ( entities ) {
this . begin ( ) ;
this . end ( ) ;
} ;
return PassiveSystem ;
} ( EntitySystem ) ) ;
var ProcessingSystem = ( function ( _super ) {
_ _extends ( ProcessingSystem , _super ) ;
function ProcessingSystem ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
ProcessingSystem . prototype . onChanged = function ( entity ) {
} ;
ProcessingSystem . prototype . process = function ( entities ) {
this . begin ( ) ;
this . processSystem ( ) ;
this . end ( ) ;
} ;
return ProcessingSystem ;
} ( EntitySystem ) ) ;
var BitSet = ( function ( ) {
function BitSet ( nbits ) {
if ( nbits === void 0 ) { nbits = 64 ; }
var length = nbits >> 6 ;
if ( ( nbits & BitSet . LONG _MASK ) != 0 )
length ++ ;
this . _bits = new Array ( length ) ;
}
BitSet . prototype . and = function ( bs ) {
var max = Math . min ( this . _bits . length , bs . _bits . length ) ;
var i ;
for ( var i _1 = 0 ; i _1 < max ; ++ i _1 )
this . _bits [ i _1 ] &= bs . _bits [ i _1 ] ;
while ( i < this . _bits . length )
this . _bits [ i ++ ] = 0 ;
} ;
BitSet . prototype . andNot = function ( bs ) {
var i = Math . min ( this . _bits . length , bs . _bits . length ) ;
while ( -- i >= 0 )
this . _bits [ i ] &= ~ bs . _bits [ i ] ;
} ;
BitSet . prototype . cardinality = function ( ) {
var card = 0 ;
for ( var i = this . _bits . length - 1 ; i >= 0 ; i -- ) {
var a = this . _bits [ i ] ;
if ( a == 0 )
continue ;
if ( a == - 1 ) {
card += 64 ;
continue ;
}
a = ( ( a >> 1 ) & 0x5555555555555555 ) + ( a & 0x5555555555555555 ) ;
a = ( ( a >> 2 ) & 0x3333333333333333 ) + ( a & 0x3333333333333333 ) ;
var b = ( ( a >> 32 ) + a ) ;
b = ( ( b >> 4 ) & 0x0f0f0f0f ) + ( b & 0x0f0f0f0f ) ;
b = ( ( b >> 8 ) & 0x00ff00ff ) + ( b & 0x00ff00ff ) ;
card += ( ( b >> 16 ) & 0x0000ffff ) + ( b & 0x0000ffff ) ;
}
return card ;
} ;
BitSet . prototype . clear = function ( pos ) {
if ( pos != undefined ) {
var offset = pos >> 6 ;
this . ensure ( offset ) ;
this . _bits [ offset ] &= ~ ( 1 << pos ) ;
}
else {
for ( var i = 0 ; i < this . _bits . length ; i ++ )
this . _bits [ i ] = 0 ;
}
} ;
BitSet . prototype . ensure = function ( lastElt ) {
if ( lastElt >= this . _bits . length ) {
var nd = new Number [ lastElt + 1 ] ;
nd = this . _bits . copyWithin ( 0 , 0 , this . _bits . length ) ;
this . _bits = nd ;
}
} ;
BitSet . prototype . get = function ( pos ) {
var offset = pos >> 6 ;
if ( offset >= this . _bits . length )
return false ;
return ( this . _bits [ offset ] & ( 1 << pos ) ) != 0 ;
} ;
BitSet . prototype . intersects = function ( set ) {
var i = Math . min ( this . _bits . length , set . _bits . length ) ;
while ( -- i >= 0 ) {
if ( ( this . _bits [ i ] & set . _bits [ i ] ) != 0 )
return true ;
}
return false ;
} ;
BitSet . prototype . isEmpty = function ( ) {
for ( var i = this . _bits . length - 1 ; i >= 0 ; i -- ) {
if ( this . _bits [ i ] )
return false ;
}
return true ;
} ;
BitSet . prototype . nextSetBit = function ( from ) {
var offset = from >> 6 ;
var mask = 1 << from ;
while ( offset < this . _bits . length ) {
var h = this . _bits [ offset ] ;
do {
if ( ( h & mask ) != 0 )
return from ;
mask <<= 1 ;
from ++ ;
} while ( mask != 0 ) ;
mask = 1 ;
offset ++ ;
}
return - 1 ;
} ;
BitSet . prototype . set = function ( pos , value ) {
if ( value === void 0 ) { value = true ; }
if ( value ) {
var offset = pos >> 6 ;
this . ensure ( offset ) ;
this . _bits [ offset ] |= 1 << pos ;
}
else {
this . clear ( pos ) ;
}
} ;
BitSet . LONG _MASK = 0x3f ;
return BitSet ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var ComponentList = ( function ( ) {
2020-07-01 16:55:10 +08:00
function ComponentList ( entity ) {
this . _components = [ ] ;
this . _componentsToAdd = [ ] ;
this . _componentsToRemove = [ ] ;
2020-07-10 11:24:42 +08:00
this . _updatableComponents = [ ] ;
2020-07-01 16:55:10 +08:00
this . _tempBufferList = [ ] ;
this . _entity = entity ;
}
Object . defineProperty ( ComponentList . prototype , "count" , {
get : function ( ) {
return this . _components . length ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( ComponentList . prototype , "buffer" , {
get : function ( ) {
return this . _components ;
} ,
enumerable : true ,
configurable : true
} ) ;
ComponentList . prototype . add = function ( component ) {
this . _componentsToAdd . push ( component ) ;
} ;
ComponentList . prototype . remove = function ( component ) {
2020-07-10 11:24:42 +08:00
if ( this . _componentsToRemove . contains ( component ) )
console . warn ( "You are trying to remove a Component (" + component + ") that you already removed" ) ;
2020-07-01 16:55:10 +08:00
if ( this . _componentsToAdd . contains ( component ) ) {
this . _componentsToAdd . remove ( component ) ;
return ;
}
this . _componentsToRemove . push ( component ) ;
} ;
ComponentList . prototype . removeAllComponents = function ( ) {
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
this . handleRemove ( this . _components [ i ] ) ;
}
this . _components . length = 0 ;
2020-07-10 11:24:42 +08:00
this . _updatableComponents . length = 0 ;
2020-07-01 16:55:10 +08:00
this . _componentsToAdd . length = 0 ;
this . _componentsToRemove . length = 0 ;
} ;
ComponentList . prototype . deregisterAllComponents = function ( ) {
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
var component = this . _components [ i ] ;
if ( component instanceof RenderableComponent )
this . _entity . scene . renderableComponents . remove ( component ) ;
2020-07-10 11:24:42 +08:00
if ( egret . is ( component , "IUpdatable" ) )
this . _updatableComponents . remove ( component ) ;
2020-07-01 16:55:10 +08:00
this . _entity . componentBits . set ( ComponentTypeManager . getIndexFor ( component ) , false ) ;
this . _entity . scene . entityProcessors . onComponentRemoved ( this . _entity ) ;
}
} ;
ComponentList . prototype . registerAllComponents = function ( ) {
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
var component = this . _components [ i ] ;
if ( component instanceof RenderableComponent )
this . _entity . scene . renderableComponents . add ( component ) ;
2020-07-10 11:24:42 +08:00
if ( egret . is ( component , "IUpdatable" ) )
this . _updatableComponents . push ( component ) ;
2020-07-01 16:55:10 +08:00
this . _entity . componentBits . set ( ComponentTypeManager . getIndexFor ( component ) ) ;
this . _entity . scene . entityProcessors . onComponentAdded ( this . _entity ) ;
}
} ;
ComponentList . prototype . updateLists = function ( ) {
if ( this . _componentsToRemove . length > 0 ) {
for ( var i = 0 ; i < this . _componentsToRemove . length ; i ++ ) {
this . handleRemove ( this . _componentsToRemove [ i ] ) ;
this . _components . remove ( this . _componentsToRemove [ i ] ) ;
}
this . _componentsToRemove . length = 0 ;
}
if ( this . _componentsToAdd . length > 0 ) {
for ( var i = 0 , count = this . _componentsToAdd . length ; i < count ; i ++ ) {
var component = this . _componentsToAdd [ i ] ;
if ( component instanceof RenderableComponent )
this . _entity . scene . renderableComponents . add ( component ) ;
2020-07-10 11:24:42 +08:00
if ( egret . is ( component , "IUpdatable" ) )
this . _updatableComponents . push ( component ) ;
2020-07-01 16:55:10 +08:00
this . _entity . componentBits . set ( ComponentTypeManager . getIndexFor ( component ) ) ;
this . _entity . scene . entityProcessors . onComponentAdded ( this . _entity ) ;
this . _components . push ( component ) ;
this . _tempBufferList . push ( component ) ;
}
this . _componentsToAdd . length = 0 ;
for ( var i = 0 ; i < this . _tempBufferList . length ; i ++ ) {
var component = this . _tempBufferList [ i ] ;
component . onAddedToEntity ( ) ;
if ( component . enabled ) {
component . onEnabled ( ) ;
}
}
this . _tempBufferList . length = 0 ;
}
} ;
2020-07-08 18:12:17 +08:00
ComponentList . prototype . onEntityTransformChanged = function ( comp ) {
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
if ( this . _components [ i ] . enabled )
this . _components [ i ] . onEntityTransformChanged ( comp ) ;
}
for ( var i = 0 ; i < this . _componentsToAdd . length ; i ++ ) {
if ( this . _componentsToAdd [ i ] . enabled )
this . _componentsToAdd [ i ] . onEntityTransformChanged ( comp ) ;
}
} ;
2020-07-01 16:55:10 +08:00
ComponentList . prototype . handleRemove = function ( component ) {
2020-06-29 15:41:02 +08:00
if ( component instanceof RenderableComponent )
2020-07-01 16:55:10 +08:00
this . _entity . scene . renderableComponents . remove ( component ) ;
2020-07-10 11:24:42 +08:00
if ( egret . is ( component , "IUpdatable" ) )
this . _updatableComponents . remove ( component ) ;
2020-07-01 16:55:10 +08:00
this . _entity . componentBits . set ( ComponentTypeManager . getIndexFor ( component ) , false ) ;
this . _entity . scene . entityProcessors . onComponentRemoved ( this . _entity ) ;
component . onRemovedFromEntity ( ) ;
component . entity = null ;
} ;
ComponentList . prototype . getComponent = function ( type , onlyReturnInitializedComponents ) {
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
var component = this . _components [ i ] ;
if ( component instanceof type )
return component ;
2020-06-08 23:04:57 +08:00
}
2020-07-01 16:55:10 +08:00
if ( ! onlyReturnInitializedComponents ) {
for ( var i = 0 ; i < this . _componentsToAdd . length ; i ++ ) {
var component = this . _componentsToAdd [ i ] ;
if ( component instanceof type )
return component ;
}
2020-06-08 23:04:57 +08:00
}
2020-07-01 16:55:10 +08:00
return null ;
} ;
ComponentList . prototype . getComponents = function ( typeName , components ) {
if ( ! components )
components = [ ] ;
for ( var i = 0 ; i < this . _components . length ; i ++ ) {
var component = this . _components [ i ] ;
if ( typeof ( typeName ) == "string" ) {
if ( egret . is ( component , typeName ) ) {
components . push ( component ) ;
}
}
else {
if ( component instanceof typeName ) {
components . push ( component ) ;
}
}
}
for ( var i = 0 ; i < this . _componentsToAdd . length ; i ++ ) {
var component = this . _componentsToAdd [ i ] ;
if ( typeof ( typeName ) == "string" ) {
if ( egret . is ( component , typeName ) ) {
components . push ( component ) ;
}
}
else {
if ( component instanceof typeName ) {
components . push ( component ) ;
}
}
}
return components ;
} ;
ComponentList . prototype . update = function ( ) {
this . updateLists ( ) ;
2020-07-10 11:24:42 +08:00
for ( var i = 0 ; i < this . _updatableComponents . length ; i ++ ) {
var updatable = this . _updatableComponents [ i ] ;
var updateableComponent = void 0 ;
if ( updatable instanceof Component )
updateableComponent = updatable ;
if ( updatable . enabled &&
updateableComponent . enabled &&
( updateableComponent . updateInterval == 1 ||
Time . frameCount % updateableComponent . updateInterval == 0 ) )
updatable . update ( ) ;
2020-07-01 16:55:10 +08:00
}
} ;
return ComponentList ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var ComponentTypeManager = ( function ( ) {
2020-07-01 16:55:10 +08:00
function ComponentTypeManager ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
ComponentTypeManager . add = function ( type ) {
if ( ! this . _componentTypesMask . has ( type ) )
this . _componentTypesMask [ type ] = this . _componentTypesMask . size ;
} ;
ComponentTypeManager . getIndexFor = function ( type ) {
var v = - 1 ;
if ( ! this . _componentTypesMask . has ( type ) ) {
this . add ( type ) ;
v = this . _componentTypesMask . get ( type ) ;
}
return v ;
} ;
ComponentTypeManager . _componentTypesMask = new Map ( ) ;
return ComponentTypeManager ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var EntityList = ( function ( ) {
2020-07-01 16:55:10 +08:00
function EntityList ( scene ) {
this . _entitiesToRemove = [ ] ;
this . _entitiesToAdded = [ ] ;
this . _tempEntityList = [ ] ;
this . _entities = [ ] ;
this . _entityDict = new Map ( ) ;
this . _unsortedTags = [ ] ;
this . scene = scene ;
}
Object . defineProperty ( EntityList . prototype , "count" , {
get : function ( ) {
return this . _entities . length ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( EntityList . prototype , "buffer" , {
get : function ( ) {
return this . _entities ;
} ,
enumerable : true ,
configurable : true
} ) ;
EntityList . prototype . add = function ( entity ) {
if ( this . _entitiesToAdded . indexOf ( entity ) == - 1 )
this . _entitiesToAdded . push ( entity ) ;
} ;
EntityList . prototype . remove = function ( entity ) {
if ( this . _entitiesToAdded . contains ( entity ) ) {
this . _entitiesToAdded . remove ( entity ) ;
return ;
}
if ( ! this . _entitiesToRemove . contains ( entity ) )
this . _entitiesToRemove . push ( entity ) ;
} ;
EntityList . prototype . findEntity = function ( name ) {
for ( var i = 0 ; i < this . _entities . length ; i ++ ) {
if ( this . _entities [ i ] . name == name )
return this . _entities [ i ] ;
}
return this . _entitiesToAdded . firstOrDefault ( function ( entity ) { return entity . name == name ; } ) ;
} ;
EntityList . prototype . getTagList = function ( tag ) {
var list = this . _entityDict . get ( tag ) ;
if ( ! list ) {
list = [ ] ;
this . _entityDict . set ( tag , list ) ;
}
return this . _entityDict . get ( tag ) ;
} ;
EntityList . prototype . addToTagList = function ( entity ) {
var list = this . getTagList ( entity . tag ) ;
if ( ! list . contains ( entity ) ) {
list . push ( entity ) ;
this . _unsortedTags . push ( entity . tag ) ;
}
} ;
EntityList . prototype . removeFromTagList = function ( entity ) {
var list = this . _entityDict . get ( entity . tag ) ;
if ( list ) {
list . remove ( entity ) ;
}
} ;
EntityList . prototype . update = function ( ) {
for ( var i = 0 ; i < this . _entities . length ; i ++ ) {
var entity = this . _entities [ i ] ;
if ( entity . enabled )
entity . update ( ) ;
}
} ;
EntityList . prototype . removeAllEntities = function ( ) {
this . _entitiesToAdded . length = 0 ;
this . updateLists ( ) ;
for ( var i = 0 ; i < this . _entities . length ; i ++ ) {
this . _entities [ i ] . _isDestoryed = true ;
this . _entities [ i ] . onRemovedFromScene ( ) ;
this . _entities [ i ] . scene = null ;
}
this . _entities . length = 0 ;
this . _entityDict . clear ( ) ;
} ;
EntityList . prototype . updateLists = function ( ) {
var _this = this ;
if ( this . _entitiesToRemove . length > 0 ) {
var temp = this . _entitiesToRemove ;
this . _entitiesToRemove = this . _tempEntityList ;
this . _tempEntityList = temp ;
this . _tempEntityList . forEach ( function ( entity ) {
_this . _entities . remove ( entity ) ;
entity . scene = null ;
_this . scene . entityProcessors . onEntityRemoved ( entity ) ;
} ) ;
this . _tempEntityList . length = 0 ;
}
if ( this . _entitiesToAdded . length > 0 ) {
var temp = this . _entitiesToAdded ;
this . _entitiesToAdded = this . _tempEntityList ;
this . _tempEntityList = temp ;
this . _tempEntityList . forEach ( function ( entity ) {
if ( ! _this . _entities . contains ( entity ) ) {
_this . _entities . push ( entity ) ;
entity . scene = _this . scene ;
_this . scene . entityProcessors . onEntityAdded ( entity ) ;
}
} ) ;
this . _tempEntityList . forEach ( function ( entity ) { return entity . onAddedToScene ( ) ; } ) ;
this . _tempEntityList . length = 0 ;
}
if ( this . _unsortedTags . length > 0 ) {
this . _unsortedTags . forEach ( function ( tag ) {
_this . _entityDict . get ( tag ) . sort ( ) ;
} ) ;
this . _unsortedTags . length = 0 ;
}
} ;
return EntityList ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var EntityProcessorList = ( function ( ) {
2020-07-01 16:55:10 +08:00
function EntityProcessorList ( ) {
this . _processors = [ ] ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
EntityProcessorList . prototype . add = function ( processor ) {
this . _processors . push ( processor ) ;
} ;
EntityProcessorList . prototype . remove = function ( processor ) {
this . _processors . remove ( processor ) ;
} ;
EntityProcessorList . prototype . onComponentAdded = function ( entity ) {
this . notifyEntityChanged ( entity ) ;
} ;
EntityProcessorList . prototype . onComponentRemoved = function ( entity ) {
this . notifyEntityChanged ( entity ) ;
} ;
EntityProcessorList . prototype . onEntityAdded = function ( entity ) {
this . notifyEntityChanged ( entity ) ;
} ;
EntityProcessorList . prototype . onEntityRemoved = function ( entity ) {
this . removeFromProcessors ( entity ) ;
} ;
EntityProcessorList . prototype . notifyEntityChanged = function ( entity ) {
for ( var i = 0 ; i < this . _processors . length ; i ++ ) {
this . _processors [ i ] . onChanged ( entity ) ;
}
} ;
EntityProcessorList . prototype . removeFromProcessors = function ( entity ) {
for ( var i = 0 ; i < this . _processors . length ; i ++ ) {
this . _processors [ i ] . remove ( entity ) ;
}
} ;
EntityProcessorList . prototype . begin = function ( ) {
} ;
EntityProcessorList . prototype . update = function ( ) {
for ( var i = 0 ; i < this . _processors . length ; i ++ ) {
this . _processors [ i ] . update ( ) ;
}
} ;
EntityProcessorList . prototype . lateUpdate = function ( ) {
for ( var i = 0 ; i < this . _processors . length ; i ++ ) {
this . _processors [ i ] . lateUpdate ( ) ;
}
} ;
EntityProcessorList . prototype . end = function ( ) {
} ;
EntityProcessorList . prototype . getProcessor = function ( ) {
for ( var i = 0 ; i < this . _processors . length ; i ++ ) {
var processor = this . _processors [ i ] ;
if ( processor instanceof EntitySystem )
return processor ;
}
return null ;
} ;
return EntityProcessorList ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Matcher = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Matcher ( ) {
this . allSet = new BitSet ( ) ;
this . exclusionSet = new BitSet ( ) ;
this . oneSet = new BitSet ( ) ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Matcher . empty = function ( ) {
return new Matcher ( ) ;
} ;
Matcher . prototype . getAllSet = function ( ) {
return this . allSet ;
} ;
Matcher . prototype . getExclusionSet = function ( ) {
return this . exclusionSet ;
} ;
Matcher . prototype . getOneSet = function ( ) {
return this . oneSet ;
} ;
Matcher . prototype . IsIntersted = function ( e ) {
if ( ! this . allSet . isEmpty ( ) ) {
for ( var i = this . allSet . nextSetBit ( 0 ) ; i >= 0 ; i = this . allSet . nextSetBit ( i + 1 ) ) {
if ( ! e . componentBits . get ( i ) )
return false ;
}
}
if ( ! this . exclusionSet . isEmpty ( ) && this . exclusionSet . intersects ( e . componentBits ) )
return false ;
if ( ! this . oneSet . isEmpty ( ) && ! this . oneSet . intersects ( e . componentBits ) )
return false ;
return true ;
} ;
Matcher . prototype . all = function ( ) {
var _this = this ;
var types = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
types [ _i ] = arguments [ _i ] ;
}
types . forEach ( function ( type ) {
_this . allSet . set ( ComponentTypeManager . getIndexFor ( type ) ) ;
} ) ;
return this ;
} ;
Matcher . prototype . exclude = function ( ) {
var _this = this ;
var types = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
types [ _i ] = arguments [ _i ] ;
}
types . forEach ( function ( type ) {
_this . exclusionSet . set ( ComponentTypeManager . getIndexFor ( type ) ) ;
} ) ;
return this ;
} ;
Matcher . prototype . one = function ( ) {
var _this = this ;
var types = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
types [ _i ] = arguments [ _i ] ;
}
types . forEach ( function ( type ) {
_this . oneSet . set ( ComponentTypeManager . getIndexFor ( type ) ) ;
} ) ;
return this ;
} ;
return Matcher ;
} ( ) ) ;
var RenderableComponentList = ( function ( ) {
function RenderableComponentList ( ) {
this . _components = [ ] ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Object . defineProperty ( RenderableComponentList . prototype , "count" , {
get : function ( ) {
return this . _components . length ;
} ,
enumerable : true ,
configurable : true
2020-06-18 16:35:51 +08:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( RenderableComponentList . prototype , "buffer" , {
get : function ( ) {
return this . _components ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
RenderableComponentList . prototype . add = function ( component ) {
this . _components . push ( component ) ;
} ;
RenderableComponentList . prototype . remove = function ( component ) {
this . _components . remove ( component ) ;
} ;
RenderableComponentList . prototype . updateList = function ( ) {
} ;
return RenderableComponentList ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Time = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Time ( ) {
}
;
Time . update = function ( currentTime ) {
var dt = ( currentTime - this . _lastTime ) / 1000 ;
this . deltaTime = dt * this . timeScale ;
this . unscaledDeltaTime = dt ;
this . frameCount ++ ;
this . _lastTime = currentTime ;
} ;
Time . deltaTime = 0 ;
Time . timeScale = 1 ;
Time . frameCount = 0 ;
Time . _lastTime = 0 ;
return Time ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var GraphicsCapabilities = ( function ( ) {
2020-07-01 16:55:10 +08:00
function GraphicsCapabilities ( ) {
}
GraphicsCapabilities . prototype . initialize = function ( device ) {
this . platformInitialize ( device ) ;
} ;
GraphicsCapabilities . prototype . platformInitialize = function ( device ) {
var gl = new egret . sys . RenderBuffer ( ) . context . getInstance ( ) ;
this . supportsNonPowerOfTwo = false ;
this . supportsTextureFilterAnisotropic = gl . getExtension ( "EXT_texture_filter_anisotropic" ) != null ;
this . supportsDepth24 = true ;
this . supportsPackedDepthStencil = true ;
this . supportsDepthNonLinear = false ;
this . supportsTextureMaxLevel = true ;
this . supportsS3tc = gl . getExtension ( "WEBGL_compressed_texture_s3tc" ) != null ||
gl . getExtension ( "WEBGL_compressed_texture_s3tc_srgb" ) != null ;
this . supportsDxt1 = this . supportsS3tc ;
this . supportsPvrtc = false ;
this . supportsAtitc = gl . getExtension ( "WEBGL_compressed_texture_astc" ) != null ;
this . supportsFramebufferObjectARB = false ;
} ;
return GraphicsCapabilities ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var GraphicsDevice = ( function ( ) {
2020-07-01 16:55:10 +08:00
function GraphicsDevice ( ) {
this . graphicsCapabilities = new GraphicsCapabilities ( ) ;
this . graphicsCapabilities . initialize ( this ) ;
}
return GraphicsDevice ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Viewport = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Viewport ( x , y , width , height ) {
this . _x = x ;
this . _y = y ;
this . _width = width ;
this . _height = height ;
this . _minDepth = 0 ;
this . _maxDepth = 1 ;
}
Object . defineProperty ( Viewport . prototype , "aspectRatio" , {
get : function ( ) {
if ( ( this . _height != 0 ) && ( this . _width != 0 ) )
return ( this . _width / this . _height ) ;
return 0 ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Viewport . prototype , "bounds" , {
get : function ( ) {
return new Rectangle ( this . _x , this . _y , this . _width , this . _height ) ;
} ,
set : function ( value ) {
this . _x = value . x ;
this . _y = value . y ;
this . _width = value . width ;
this . _height = value . height ;
} ,
enumerable : true ,
configurable : true
} ) ;
return Viewport ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var GaussianBlurEffect = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( GaussianBlurEffect , _super ) ;
function GaussianBlurEffect ( ) {
return _super . call ( this , PostProcessor . default _vert , GaussianBlurEffect . blur _frag , {
screenWidth : SceneManager . stage . stageWidth ,
screenHeight : SceneManager . stage . stageHeight
} ) || this ;
}
GaussianBlurEffect . blur _frag = "precision mediump float;\n" +
"uniform sampler2D uSampler;\n" +
"uniform float screenWidth;\n" +
"uniform float screenHeight;\n" +
"float normpdf(in float x, in float sigma)\n" +
"{\n" +
"return 0.39894*exp(-0.5*x*x/(sigma*sigma))/sigma;\n" +
"}\n" +
"void main()\n" +
"{\n" +
"vec3 c = texture2D(uSampler, gl_FragCoord.xy / vec2(screenWidth, screenHeight).xy).rgb;\n" +
"const int mSize = 11;\n" +
"const int kSize = (mSize - 1)/2;\n" +
"float kernel[mSize];\n" +
"vec3 final_colour = vec3(0.0);\n" +
"float sigma = 7.0;\n" +
"float z = 0.0;\n" +
"for (int j = 0; j <= kSize; ++j)\n" +
"{\n" +
"kernel[kSize+j] = kernel[kSize-j] = normpdf(float(j),sigma);\n" +
"}\n" +
"for (int j = 0; j < mSize; ++j)\n" +
"{\n" +
"z += kernel[j];\n" +
"}\n" +
"for (int i = -kSize; i <= kSize; ++i)\n" +
"{\n" +
"for (int j = -kSize; j <= kSize; ++j)\n" +
"{\n" +
"final_colour += kernel[kSize+j]*kernel[kSize+i]*texture2D(uSampler, (gl_FragCoord.xy+vec2(float(i),float(j))) / vec2(screenWidth, screenHeight).xy).rgb;\n" +
"}\n}\n" +
"gl_FragColor = vec4(final_colour/(z*z), 1.0);\n" +
"}" ;
return GaussianBlurEffect ;
} ( egret . CustomFilter ) ) ;
2020-07-01 06:57:39 +00:00
var PolygonLightEffect = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( PolygonLightEffect , _super ) ;
function PolygonLightEffect ( ) {
return _super . call ( this , PolygonLightEffect . vertSrc , PolygonLightEffect . fragmentSrc ) || this ;
}
PolygonLightEffect . vertSrc = "attribute vec2 aVertexPosition;\n" +
"attribute vec2 aTextureCoord;\n" +
"uniform vec2 projectionVector;\n" +
"varying vec2 vTextureCoord;\n" +
"const vec2 center = vec2(-1.0, 1.0);\n" +
"void main(void) {\n" +
" gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
" vTextureCoord = aTextureCoord;\n" +
"}" ;
PolygonLightEffect . fragmentSrc = "precision lowp float;\n" +
"varying vec2 vTextureCoord;\n" +
"uniform sampler2D uSampler;\n" +
"#define SAMPLE_COUNT 15\n" +
"uniform vec2 _sampleOffsets[SAMPLE_COUNT];\n" +
"uniform float _sampleWeights[SAMPLE_COUNT];\n" +
"void main(void) {\n" +
"vec4 c = vec4(0, 0, 0, 0);\n" +
"for( int i = 0; i < SAMPLE_COUNT; i++ )\n" +
" c += texture2D( uSampler, vTextureCoord + _sampleOffsets[i] ) * _sampleWeights[i];\n" +
"gl_FragColor = c;\n" +
"}" ;
return PolygonLightEffect ;
} ( egret . CustomFilter ) ) ;
2020-07-01 06:57:39 +00:00
var PostProcessor = ( function ( ) {
2020-07-01 16:55:10 +08:00
function PostProcessor ( effect ) {
if ( effect === void 0 ) { effect = null ; }
this . enable = true ;
this . effect = effect ;
}
PostProcessor . prototype . onAddedToScene = function ( scene ) {
this . scene = scene ;
this . shape = new egret . Shape ( ) ;
this . shape . graphics . beginFill ( 0xFFFFFF , 1 ) ;
this . shape . graphics . drawRect ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
this . shape . graphics . endFill ( ) ;
scene . addChild ( this . shape ) ;
} ;
PostProcessor . prototype . process = function ( ) {
this . drawFullscreenQuad ( ) ;
} ;
PostProcessor . prototype . onSceneBackBufferSizeChanged = function ( newWidth , newHeight ) { } ;
PostProcessor . prototype . drawFullscreenQuad = function ( ) {
this . scene . filters = [ this . effect ] ;
} ;
PostProcessor . prototype . unload = function ( ) {
if ( this . effect ) {
this . effect = null ;
}
this . scene . removeChild ( this . shape ) ;
this . scene = null ;
} ;
PostProcessor . default _vert = "attribute vec2 aVertexPosition;\n" +
"attribute vec2 aTextureCoord;\n" +
"attribute vec2 aColor;\n" +
"uniform vec2 projectionVector;\n" +
"varying vec2 vTextureCoord;\n" +
"varying vec4 vColor;\n" +
"const vec2 center = vec2(-1.0, 1.0);\n" +
"void main(void) {\n" +
"gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
"vTextureCoord = aTextureCoord;\n" +
"vColor = vec4(aColor.x, aColor.x, aColor.x, aColor.x);\n" +
"}" ;
return PostProcessor ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var GaussianBlurPostProcessor = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( GaussianBlurPostProcessor , _super ) ;
function GaussianBlurPostProcessor ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
}
GaussianBlurPostProcessor . prototype . onAddedToScene = function ( scene ) {
_super . prototype . onAddedToScene . call ( this , scene ) ;
this . effect = new GaussianBlurEffect ( ) ;
} ;
return GaussianBlurPostProcessor ;
} ( PostProcessor ) ) ;
2020-07-01 06:57:39 +00:00
var Renderer = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Renderer ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Renderer . prototype . onAddedToScene = function ( scene ) { } ;
Renderer . prototype . beginRender = function ( cam ) {
} ;
Renderer . prototype . unload = function ( ) { } ;
Renderer . prototype . renderAfterStateCheck = function ( renderable , cam ) {
renderable . render ( cam ) ;
} ;
return Renderer ;
} ( ) ) ;
var DefaultRenderer = ( function ( _super ) {
_ _extends ( DefaultRenderer , _super ) ;
function DefaultRenderer ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
}
DefaultRenderer . prototype . render = function ( scene ) {
var cam = this . camera ? this . camera : scene . camera ;
this . beginRender ( cam ) ;
for ( var i = 0 ; i < scene . renderableComponents . count ; i ++ ) {
var renderable = scene . renderableComponents . buffer [ i ] ;
if ( renderable . enabled && renderable . isVisibleFromCamera ( cam ) )
this . renderAfterStateCheck ( renderable , cam ) ;
}
} ;
return DefaultRenderer ;
} ( Renderer ) ) ;
2020-07-01 06:57:39 +00:00
var ScreenSpaceRenderer = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( ScreenSpaceRenderer , _super ) ;
function ScreenSpaceRenderer ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
ScreenSpaceRenderer . prototype . render = function ( scene ) {
} ;
return ScreenSpaceRenderer ;
} ( Renderer ) ) ;
var PolyLight = ( function ( _super ) {
_ _extends ( PolyLight , _super ) ;
function PolyLight ( radius , color , power ) {
var _this = _super . call ( this ) || this ;
_this . _indices = [ ] ;
_this . radius = radius ;
_this . power = power ;
_this . color = color ;
_this . computeTriangleIndices ( ) ;
return _this ;
}
Object . defineProperty ( PolyLight . prototype , "radius" , {
get : function ( ) {
return this . _radius ;
} ,
set : function ( value ) {
this . setRadius ( value ) ;
} ,
enumerable : true ,
configurable : true
2020-06-29 15:41:02 +08:00
} ) ;
2020-07-01 16:55:10 +08:00
PolyLight . prototype . computeTriangleIndices = function ( totalTris ) {
if ( totalTris === void 0 ) { totalTris = 20 ; }
this . _indices . length = 0 ;
for ( var i = 0 ; i < totalTris ; i += 2 ) {
this . _indices . push ( 0 ) ;
this . _indices . push ( i + 2 ) ;
this . _indices . push ( i + 1 ) ;
}
} ;
PolyLight . prototype . setRadius = function ( radius ) {
if ( radius != this . _radius ) {
this . _radius = radius ;
this . _areBoundsDirty = true ;
}
} ;
PolyLight . prototype . render = function ( camera ) {
} ;
PolyLight . prototype . reset = function ( ) {
} ;
return PolyLight ;
} ( RenderableComponent ) ) ;
var SceneTransition = ( function ( ) {
function SceneTransition ( sceneLoadAction ) {
this . sceneLoadAction = sceneLoadAction ;
this . loadsNewScene = sceneLoadAction != null ;
}
Object . defineProperty ( SceneTransition . prototype , "hasPreviousSceneRender" , {
get : function ( ) {
if ( ! this . _hasPreviousSceneRender ) {
this . _hasPreviousSceneRender = true ;
return false ;
2020-07-01 06:57:39 +00:00
}
2020-07-01 16:55:10 +08:00
return true ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:33 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
SceneTransition . prototype . preRender = function ( ) { } ;
SceneTransition . prototype . render = function ( ) {
} ;
SceneTransition . prototype . onBeginTransition = function ( ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
return _ _generator ( this , function ( _a ) {
2020-07-01 06:57:39 +00:00
switch ( _a . label ) {
2020-07-01 16:55:10 +08:00
case 0 : return [ 4 , this . loadNextScene ( ) ] ;
case 1 :
_a . sent ( ) ;
this . transitionComplete ( ) ;
return [ 2 ] ;
2020-07-01 06:57:39 +00:00
}
2020-07-01 06:57:33 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
} ) ;
} ;
SceneTransition . prototype . transitionComplete = function ( ) {
SceneManager . sceneTransition = null ;
if ( this . onTransitionCompleted ) {
this . onTransitionCompleted ( ) ;
}
} ;
SceneTransition . prototype . loadNextScene = function ( ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
var _a ;
return _ _generator ( this , function ( _b ) {
switch ( _b . label ) {
case 0 :
if ( this . onScreenObscured )
this . onScreenObscured ( ) ;
if ( ! this . loadsNewScene ) {
this . isNewSceneLoaded = true ;
}
_a = SceneManager ;
return [ 4 , this . sceneLoadAction ( ) ] ;
case 1 :
_a . scene = _b . sent ( ) ;
this . isNewSceneLoaded = true ;
return [ 2 ] ;
}
} ) ;
} ) ;
} ;
SceneTransition . prototype . tickEffectProgressProperty = function ( filter , duration , easeType , reverseDirection ) {
if ( reverseDirection === void 0 ) { reverseDirection = false ; }
return new Promise ( function ( resolve ) {
var start = reverseDirection ? 1 : 0 ;
var end = reverseDirection ? 0 : 1 ;
egret . Tween . get ( filter . uniforms ) . set ( { _progress : start } ) . to ( { _progress : end } , duration * 1000 , easeType ) . call ( function ( ) {
resolve ( ) ;
} ) ;
} ) ;
} ;
return SceneTransition ;
} ( ) ) ;
var FadeTransition = ( function ( _super ) {
_ _extends ( FadeTransition , _super ) ;
function FadeTransition ( sceneLoadAction ) {
var _this = _super . call ( this , sceneLoadAction ) || this ;
_this . fadeToColor = 0x000000 ;
_this . fadeOutDuration = 0.4 ;
_this . fadeEaseType = egret . Ease . quadInOut ;
_this . delayBeforeFadeInDuration = 0.1 ;
_this . _alpha = 0 ;
_this . _mask = new egret . Shape ( ) ;
return _this ;
}
FadeTransition . prototype . onBeginTransition = function ( ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
var _this = this ;
return _ _generator ( this , function ( _a ) {
this . _mask . graphics . beginFill ( this . fadeToColor , 1 ) ;
this . _mask . graphics . drawRect ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
this . _mask . graphics . endFill ( ) ;
SceneManager . stage . addChild ( this . _mask ) ;
egret . Tween . get ( this ) . to ( { _alpha : 1 } , this . fadeOutDuration * 1000 , this . fadeEaseType )
. call ( function ( ) { return _ _awaiter ( _this , void 0 , void 0 , function ( ) {
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 : return [ 4 , this . loadNextScene ( ) ] ;
case 1 :
_a . sent ( ) ;
return [ 2 ] ;
}
} ) ;
} ) ; } ) . wait ( this . delayBeforeFadeInDuration ) . call ( function ( ) {
egret . Tween . get ( _this ) . to ( { _alpha : 0 } , _this . fadeOutDuration * 1000 , _this . fadeEaseType ) . call ( function ( ) {
_this . transitionComplete ( ) ;
SceneManager . stage . removeChild ( _this . _mask ) ;
} ) ;
} ) ;
return [ 2 ] ;
} ) ;
} ) ;
} ;
FadeTransition . prototype . render = function ( ) {
this . _mask . graphics . clear ( ) ;
this . _mask . graphics . beginFill ( this . fadeToColor , this . _alpha ) ;
this . _mask . graphics . drawRect ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
this . _mask . graphics . endFill ( ) ;
} ;
return FadeTransition ;
} ( SceneTransition ) ) ;
2020-07-01 06:57:39 +00:00
var WindTransition = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( WindTransition , _super ) ;
function WindTransition ( sceneLoadAction ) {
var _this = _super . call ( this , sceneLoadAction ) || this ;
_this . duration = 1 ;
_this . easeType = egret . Ease . quadOut ;
var vertexSrc = "attribute vec2 aVertexPosition;\n" +
"attribute vec2 aTextureCoord;\n" +
"uniform vec2 projectionVector;\n" +
"varying vec2 vTextureCoord;\n" +
"const vec2 center = vec2(-1.0, 1.0);\n" +
"void main(void) {\n" +
" gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
" vTextureCoord = aTextureCoord;\n" +
"}" ;
var fragmentSrc = "precision lowp float;\n" +
"varying vec2 vTextureCoord;\n" +
"uniform sampler2D uSampler;\n" +
"uniform float _progress;\n" +
"uniform float _size;\n" +
"uniform float _windSegments;\n" +
"void main(void) {\n" +
"vec2 co = floor(vec2(0.0, vTextureCoord.y * _windSegments));\n" +
"float x = sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453;\n" +
"float r = x - floor(x);\n" +
"float m = smoothstep(0.0, -_size, vTextureCoord.x * (1.0 - _size) + _size * r - (_progress * (1.0 + _size)));\n" +
"vec4 fg = texture2D(uSampler, vTextureCoord);\n" +
"gl_FragColor = mix(fg, vec4(0, 0, 0, 0), m);\n" +
"}" ;
_this . _windEffect = new egret . CustomFilter ( vertexSrc , fragmentSrc , {
_progress : 0 ,
_size : 0.3 ,
_windSegments : 100
} ) ;
_this . _mask = new egret . Shape ( ) ;
_this . _mask . graphics . beginFill ( 0xFFFFFF , 1 ) ;
_this . _mask . graphics . drawRect ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
_this . _mask . graphics . endFill ( ) ;
_this . _mask . filters = [ _this . _windEffect ] ;
SceneManager . stage . addChild ( _this . _mask ) ;
return _this ;
}
Object . defineProperty ( WindTransition . prototype , "windSegments" , {
set : function ( value ) {
this . _windEffect . uniforms . _windSegments = value ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( WindTransition . prototype , "size" , {
set : function ( value ) {
this . _windEffect . uniforms . _size = value ;
} ,
enumerable : true ,
configurable : true
2020-06-21 10:27:15 +08:00
} ) ;
2020-07-01 16:55:10 +08:00
WindTransition . prototype . onBeginTransition = function ( ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
this . loadNextScene ( ) ;
return [ 4 , this . tickEffectProgressProperty ( this . _windEffect , this . duration , this . easeType ) ] ;
case 1 :
_a . sent ( ) ;
this . transitionComplete ( ) ;
SceneManager . stage . removeChild ( this . _mask ) ;
return [ 2 ] ;
}
} ) ;
} ) ;
} ;
return WindTransition ;
} ( SceneTransition ) ) ;
2020-07-01 06:57:39 +00:00
var Flags = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Flags ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Flags . isFlagSet = function ( self , flag ) {
return ( self & flag ) != 0 ;
} ;
Flags . isUnshiftedFlagSet = function ( self , flag ) {
flag = 1 << flag ;
return ( self & flag ) != 0 ;
} ;
Flags . setFlagExclusive = function ( self , flag ) {
return 1 << flag ;
} ;
Flags . setFlag = function ( self , flag ) {
return ( self | 1 << flag ) ;
} ;
Flags . unsetFlag = function ( self , flag ) {
flag = 1 << flag ;
return ( self & ( ~ flag ) ) ;
} ;
Flags . invertFlags = function ( self ) {
return ~ self ;
} ;
return Flags ;
} ( ) ) ;
var MathHelper = ( function ( ) {
function MathHelper ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
MathHelper . toDegrees = function ( radians ) {
return radians * 57.295779513082320876798154814105 ;
} ;
MathHelper . toRadians = function ( degrees ) {
return degrees * 0.017453292519943295769236907684886 ;
} ;
MathHelper . map = function ( value , leftMin , leftMax , rightMin , rightMax ) {
return rightMin + ( value - leftMin ) * ( rightMax - rightMin ) / ( leftMax - leftMin ) ;
} ;
MathHelper . lerp = function ( value1 , value2 , amount ) {
return value1 + ( value2 - value1 ) * amount ;
} ;
MathHelper . clamp = function ( value , min , max ) {
if ( value < min )
return min ;
if ( value > max )
return max ;
return value ;
} ;
MathHelper . pointOnCirlce = function ( circleCenter , radius , angleInDegrees ) {
var radians = MathHelper . toRadians ( angleInDegrees ) ;
return new Vector2 ( Math . cos ( radians ) * radians + circleCenter . x , Math . sin ( radians ) * radians + circleCenter . y ) ;
} ;
MathHelper . isEven = function ( value ) {
return value % 2 == 0 ;
} ;
2020-07-09 16:16:04 +08:00
MathHelper . angleBetweenVectors = function ( from , to ) {
return Math . atan2 ( to . y - from . y , to . x - from . x ) ;
} ;
2020-07-01 16:55:10 +08:00
MathHelper . Epsilon = 0.00001 ;
MathHelper . Rad2Deg = 57.29578 ;
MathHelper . Deg2Rad = 0.0174532924 ;
return MathHelper ;
} ( ) ) ;
var Matrix2D = ( function ( ) {
function Matrix2D ( m11 , m12 , m21 , m22 , m31 , m32 ) {
this . m11 = 0 ;
this . m12 = 0 ;
this . m21 = 0 ;
this . m22 = 0 ;
this . m31 = 0 ;
this . m32 = 0 ;
this . m11 = m11 ? m11 : 1 ;
this . m12 = m12 ? m12 : 0 ;
this . m21 = m21 ? m21 : 0 ;
this . m22 = m22 ? m22 : 1 ;
this . m31 = m31 ? m31 : 0 ;
this . m32 = m32 ? m32 : 0 ;
}
Object . defineProperty ( Matrix2D , "identity" , {
get : function ( ) {
return Matrix2D . _identity ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Matrix2D . prototype , "translation" , {
get : function ( ) {
return new Vector2 ( this . m31 , this . m32 ) ;
} ,
set : function ( value ) {
this . m31 = value . x ;
this . m32 = value . y ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Matrix2D . prototype , "rotation" , {
get : function ( ) {
return Math . atan2 ( this . m21 , this . m11 ) ;
} ,
set : function ( value ) {
var val1 = Math . cos ( value ) ;
var val2 = Math . sin ( value ) ;
this . m11 = val1 ;
this . m12 = val2 ;
this . m21 = - val2 ;
this . m22 = val1 ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Matrix2D . prototype , "rotationDegrees" , {
get : function ( ) {
return MathHelper . toDegrees ( this . rotation ) ;
} ,
set : function ( value ) {
this . rotation = MathHelper . toRadians ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Matrix2D . prototype , "scale" , {
get : function ( ) {
return new Vector2 ( this . m11 , this . m22 ) ;
} ,
set : function ( value ) {
this . m11 = value . x ;
this . m12 = value . y ;
} ,
enumerable : true ,
configurable : true
} ) ;
Matrix2D . add = function ( matrix1 , matrix2 ) {
matrix1 . m11 += matrix2 . m11 ;
matrix1 . m12 += matrix2 . m12 ;
matrix1 . m21 += matrix2 . m21 ;
matrix1 . m22 += matrix2 . m22 ;
matrix1 . m31 += matrix2 . m31 ;
matrix1 . m32 += matrix2 . m32 ;
return matrix1 ;
} ;
Matrix2D . divide = function ( matrix1 , matrix2 ) {
matrix1 . m11 /= matrix2 . m11 ;
matrix1 . m12 /= matrix2 . m12 ;
matrix1 . m21 /= matrix2 . m21 ;
matrix1 . m22 /= matrix2 . m22 ;
matrix1 . m31 /= matrix2 . m31 ;
matrix1 . m32 /= matrix2 . m32 ;
return matrix1 ;
} ;
Matrix2D . multiply = function ( matrix1 , matrix2 ) {
var result = new Matrix2D ( ) ;
var m11 = ( matrix1 . m11 * matrix2 . m11 ) + ( matrix1 . m12 * matrix2 . m21 ) ;
var m12 = ( matrix1 . m11 * matrix2 . m12 ) + ( matrix1 . m12 * matrix2 . m22 ) ;
var m21 = ( matrix1 . m21 * matrix2 . m11 ) + ( matrix1 . m22 * matrix2 . m21 ) ;
var m22 = ( matrix1 . m21 * matrix2 . m12 ) + ( matrix1 . m22 * matrix2 . m22 ) ;
var m31 = ( matrix1 . m31 * matrix2 . m11 ) + ( matrix1 . m32 * matrix2 . m21 ) + matrix2 . m31 ;
var m32 = ( matrix1 . m31 * matrix2 . m12 ) + ( matrix1 . m32 * matrix2 . m22 ) + matrix2 . m32 ;
result . m11 = m11 ;
result . m12 = m12 ;
result . m21 = m21 ;
result . m22 = m22 ;
result . m31 = m31 ;
result . m32 = m32 ;
return result ;
} ;
Matrix2D . multiplyTranslation = function ( matrix , x , y ) {
var trans = Matrix2D . createTranslation ( x , y ) ;
return Matrix2D . multiply ( matrix , trans ) ;
} ;
Matrix2D . prototype . determinant = function ( ) {
return this . m11 * this . m22 - this . m12 * this . m21 ;
} ;
Matrix2D . invert = function ( matrix , result ) {
if ( result === void 0 ) { result = new Matrix2D ( ) ; }
var det = 1 / matrix . determinant ( ) ;
result . m11 = matrix . m22 * det ;
result . m12 = - matrix . m12 * det ;
result . m21 = - matrix . m21 * det ;
result . m22 = matrix . m11 * det ;
result . m31 = ( matrix . m32 * matrix . m21 - matrix . m31 * matrix . m22 ) * det ;
result . m32 = - ( matrix . m32 * matrix . m11 - matrix . m31 * matrix . m12 ) * det ;
return result ;
} ;
2020-07-08 18:12:17 +08:00
Matrix2D . createTranslation = function ( xPosition , yPosition ) {
var result = new Matrix2D ( ) ;
2020-07-01 16:55:10 +08:00
result . m11 = 1 ;
result . m12 = 0 ;
result . m21 = 0 ;
result . m22 = 1 ;
result . m31 = xPosition ;
result . m32 = yPosition ;
return result ;
} ;
2020-07-08 18:12:17 +08:00
Matrix2D . createTranslationVector = function ( position ) {
return this . createTranslation ( position . x , position . y ) ;
} ;
2020-07-01 16:55:10 +08:00
Matrix2D . createRotation = function ( radians , result ) {
result = new Matrix2D ( ) ;
var val1 = Math . cos ( radians ) ;
var val2 = Math . sin ( radians ) ;
result . m11 = val1 ;
result . m12 = val2 ;
result . m21 = - val2 ;
result . m22 = val1 ;
return result ;
} ;
Matrix2D . createScale = function ( xScale , yScale , result ) {
if ( result === void 0 ) { result = new Matrix2D ( ) ; }
result . m11 = xScale ;
result . m12 = 0 ;
result . m21 = 0 ;
result . m22 = yScale ;
result . m31 = 0 ;
result . m32 = 0 ;
return result ;
} ;
Matrix2D . prototype . toEgretMatrix = function ( ) {
var matrix = new egret . Matrix ( this . m11 , this . m12 , this . m21 , this . m22 , this . m31 , this . m32 ) ;
return matrix ;
} ;
Matrix2D . _identity = new Matrix2D ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
return Matrix2D ;
} ( ) ) ;
2020-07-08 18:12:17 +08:00
var Rectangle = ( function ( _super ) {
_ _extends ( Rectangle , _super ) ;
function Rectangle ( ) {
return _super !== null && _super . apply ( this , arguments ) || this ;
2020-07-01 16:55:10 +08:00
}
2020-07-07 12:18:51 +08:00
Object . defineProperty ( Rectangle . prototype , "max" , {
2020-07-01 16:55:10 +08:00
get : function ( ) {
2020-07-07 12:18:51 +08:00
return new Vector2 ( this . right , this . bottom ) ;
2020-07-01 16:55:10 +08:00
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Rectangle . prototype , "center" , {
get : function ( ) {
return new Vector2 ( this . x + ( this . width / 2 ) , this . y + ( this . height / 2 ) ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Rectangle . prototype , "location" , {
get : function ( ) {
return new Vector2 ( this . x , this . y ) ;
} ,
set : function ( value ) {
this . x = value . x ;
this . y = value . y ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Rectangle . prototype , "size" , {
get : function ( ) {
return new Vector2 ( this . width , this . height ) ;
} ,
set : function ( value ) {
this . width = value . x ;
this . height = value . y ;
} ,
enumerable : true ,
configurable : true
} ) ;
Rectangle . prototype . intersects = function ( value ) {
return value . left < this . right &&
this . left < value . right &&
value . top < this . bottom &&
this . top < value . bottom ;
} ;
Rectangle . prototype . containsRect = function ( value ) {
return ( ( ( ( this . x <= value . x ) && ( value . x < ( this . x + this . width ) ) ) &&
( this . y <= value . y ) ) &&
( value . y < ( this . y + this . height ) ) ) ;
} ;
Rectangle . prototype . getHalfSize = function ( ) {
return new Vector2 ( this . width * 0.5 , this . height * 0.5 ) ;
} ;
Rectangle . fromMinMax = function ( minX , minY , maxX , maxY ) {
return new Rectangle ( minX , minY , maxX - minX , maxY - minY ) ;
} ;
Rectangle . prototype . getClosestPointOnRectangleBorderToPoint = function ( point ) {
2020-07-08 18:12:17 +08:00
var edgeNormal = Vector2 . zero ;
var res = new Vector2 ( ) ;
2020-07-01 16:55:10 +08:00
res . x = MathHelper . clamp ( point . x , this . left , this . right ) ;
res . y = MathHelper . clamp ( point . y , this . top , this . bottom ) ;
2020-07-09 14:16:10 +08:00
if ( this . contains ( res . x , res . y ) ) {
2020-07-01 16:55:10 +08:00
var dl = res . x - this . left ;
var dr = this . right - res . x ;
var dt = res . y - this . top ;
var db = this . bottom - res . y ;
var min = Math . min ( dl , dr , dt , db ) ;
if ( min == dt ) {
res . y = this . top ;
edgeNormal . y = - 1 ;
}
else if ( min == db ) {
res . y = this . bottom ;
edgeNormal . y = 1 ;
}
else if ( min == dl ) {
res . x = this . left ;
edgeNormal . x = - 1 ;
}
else {
res . x = this . right ;
edgeNormal . x = 1 ;
}
}
else {
2020-07-08 18:12:17 +08:00
if ( res . x == this . left )
2020-07-01 16:55:10 +08:00
edgeNormal . x = - 1 ;
2020-07-08 18:12:17 +08:00
if ( res . x == this . right )
2020-07-01 16:55:10 +08:00
edgeNormal . x = 1 ;
2020-07-08 18:12:17 +08:00
if ( res . y == this . top )
2020-07-01 16:55:10 +08:00
edgeNormal . y = - 1 ;
2020-07-08 18:12:17 +08:00
if ( res . y == this . bottom )
2020-07-01 16:55:10 +08:00
edgeNormal . y = 1 ;
}
return { res : res , edgeNormal : edgeNormal } ;
} ;
2020-07-07 12:18:51 +08:00
Rectangle . prototype . getClosestPointOnBoundsToOrigin = function ( ) {
var max = this . max ;
var minDist = Math . abs ( this . location . x ) ;
var boundsPoint = new Vector2 ( this . location . x , 0 ) ;
if ( Math . abs ( max . x ) < minDist ) {
minDist = Math . abs ( max . x ) ;
boundsPoint . x = max . x ;
boundsPoint . y = 0 ;
2020-07-01 16:55:10 +08:00
}
2020-07-07 12:18:51 +08:00
if ( Math . abs ( max . y ) < minDist ) {
minDist = Math . abs ( max . y ) ;
boundsPoint . x = 0 ;
boundsPoint . y = max . y ;
}
if ( Math . abs ( this . location . y ) < minDist ) {
minDist = Math . abs ( this . location . y ) ;
boundsPoint . x = 0 ;
boundsPoint . y = this . location . y ;
2020-07-01 16:55:10 +08:00
}
2020-07-07 12:18:51 +08:00
return boundsPoint ;
2020-07-01 16:55:10 +08:00
} ;
Rectangle . rectEncompassingPoints = function ( points ) {
var minX = Number . POSITIVE _INFINITY ;
var minY = Number . POSITIVE _INFINITY ;
var maxX = Number . NEGATIVE _INFINITY ;
var maxY = Number . NEGATIVE _INFINITY ;
for ( var i = 0 ; i < points . length ; i ++ ) {
var pt = points [ i ] ;
2020-07-08 18:12:17 +08:00
if ( pt . x < minX )
2020-07-01 16:55:10 +08:00
minX = pt . x ;
2020-07-08 18:12:17 +08:00
if ( pt . x > maxX )
2020-07-01 16:55:10 +08:00
maxX = pt . x ;
2020-07-08 18:12:17 +08:00
if ( pt . y < minY )
2020-07-01 16:55:10 +08:00
minY = pt . y ;
2020-07-08 18:12:17 +08:00
if ( pt . y > maxY )
2020-07-01 16:55:10 +08:00
maxY = pt . y ;
}
return this . fromMinMax ( minX , minY , maxX , maxY ) ;
} ;
return Rectangle ;
2020-07-08 18:12:17 +08:00
} ( egret . Rectangle ) ) ;
2020-07-01 06:57:39 +00:00
var Vector3 = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Vector3 ( x , y , z ) {
this . x = x ;
this . y = y ;
this . z = z ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
return Vector3 ;
} ( ) ) ;
var ColliderTriggerHelper = ( function ( ) {
function ColliderTriggerHelper ( entity ) {
this . _activeTriggerIntersections = [ ] ;
this . _previousTriggerIntersections = [ ] ;
this . _tempTriggerList = [ ] ;
this . _entity = entity ;
}
ColliderTriggerHelper . prototype . update = function ( ) {
var colliders = this . _entity . getComponents ( Collider ) ;
for ( var i = 0 ; i < colliders . length ; i ++ ) {
var collider = colliders [ i ] ;
2020-07-07 18:54:19 +08:00
var boxcastResult = Physics . boxcastBroadphase ( collider . bounds , collider . collidesWithLayers ) ;
collider . bounds = boxcastResult . rect ;
var neighbors = boxcastResult . colliders ;
2020-07-01 16:55:10 +08:00
var _loop _5 = function ( j ) {
var neighbor = neighbors [ j ] ;
if ( ! collider . isTrigger && ! neighbor . isTrigger )
return "continue" ;
if ( collider . overlaps ( neighbor ) ) {
var pair _1 = new Pair ( collider , neighbor ) ;
var shouldReportTriggerEvent = this _1 . _activeTriggerIntersections . findIndex ( function ( value ) {
return value . first == pair _1 . first && value . second == pair _1 . second ;
} ) == - 1 && this _1 . _previousTriggerIntersections . findIndex ( function ( value ) {
return value . first == pair _1 . first && value . second == pair _1 . second ;
} ) == - 1 ;
if ( shouldReportTriggerEvent )
this _1 . notifyTriggerListeners ( pair _1 , true ) ;
if ( ! this _1 . _activeTriggerIntersections . contains ( pair _1 ) )
this _1 . _activeTriggerIntersections . push ( pair _1 ) ;
}
} ;
var this _1 = this ;
for ( var j = 0 ; j < neighbors . length ; j ++ ) {
_loop _5 ( j ) ;
}
}
ListPool . free ( colliders ) ;
this . checkForExitedColliders ( ) ;
2020-06-09 23:14:47 +08:00
} ;
2020-07-01 16:55:10 +08:00
ColliderTriggerHelper . prototype . checkForExitedColliders = function ( ) {
var _this = this ;
var _loop _6 = function ( i ) {
var index = this _2 . _previousTriggerIntersections . findIndex ( function ( value ) {
if ( value . first == _this . _activeTriggerIntersections [ i ] . first && value . second == _this . _activeTriggerIntersections [ i ] . second )
return true ;
return false ;
} ) ;
if ( index != - 1 )
this _2 . _previousTriggerIntersections . removeAt ( index ) ;
} ;
var this _2 = this ;
for ( var i = 0 ; i < this . _activeTriggerIntersections . length ; i ++ ) {
_loop _6 ( i ) ;
}
for ( var i = 0 ; i < this . _previousTriggerIntersections . length ; i ++ ) {
this . notifyTriggerListeners ( this . _previousTriggerIntersections [ i ] , false ) ;
}
this . _previousTriggerIntersections . length = 0 ;
for ( var i = 0 ; i < this . _activeTriggerIntersections . length ; i ++ ) {
if ( ! this . _previousTriggerIntersections . contains ( this . _activeTriggerIntersections [ i ] ) ) {
this . _previousTriggerIntersections . push ( this . _activeTriggerIntersections [ i ] ) ;
}
}
this . _activeTriggerIntersections . length = 0 ;
} ;
ColliderTriggerHelper . prototype . notifyTriggerListeners = function ( collisionPair , isEntering ) {
collisionPair . first . entity . getComponents ( "ITriggerListener" , this . _tempTriggerList ) ;
for ( var i = 0 ; i < this . _tempTriggerList . length ; i ++ ) {
if ( isEntering ) {
this . _tempTriggerList [ i ] . onTriggerEnter ( collisionPair . second , collisionPair . first ) ;
}
else {
this . _tempTriggerList [ i ] . onTriggerExit ( collisionPair . second , collisionPair . first ) ;
}
this . _tempTriggerList . length = 0 ;
if ( collisionPair . second . entity ) {
collisionPair . second . entity . getComponents ( "ITriggerListener" , this . _tempTriggerList ) ;
for ( var i _2 = 0 ; i _2 < this . _tempTriggerList . length ; i _2 ++ ) {
if ( isEntering ) {
this . _tempTriggerList [ i _2 ] . onTriggerEnter ( collisionPair . first , collisionPair . second ) ;
}
else {
this . _tempTriggerList [ i _2 ] . onTriggerExit ( collisionPair . first , collisionPair . second ) ;
}
}
this . _tempTriggerList . length = 0 ;
}
}
} ;
return ColliderTriggerHelper ;
} ( ) ) ;
2020-07-01 06:57:33 +00:00
var PointSectors ;
2020-07-01 06:57:39 +00:00
( function ( PointSectors ) {
2020-07-01 16:55:10 +08:00
PointSectors [ PointSectors [ "center" ] = 0 ] = "center" ;
PointSectors [ PointSectors [ "top" ] = 1 ] = "top" ;
PointSectors [ PointSectors [ "bottom" ] = 2 ] = "bottom" ;
PointSectors [ PointSectors [ "topLeft" ] = 9 ] = "topLeft" ;
PointSectors [ PointSectors [ "topRight" ] = 5 ] = "topRight" ;
PointSectors [ PointSectors [ "left" ] = 8 ] = "left" ;
PointSectors [ PointSectors [ "right" ] = 4 ] = "right" ;
PointSectors [ PointSectors [ "bottomLeft" ] = 10 ] = "bottomLeft" ;
PointSectors [ PointSectors [ "bottomRight" ] = 6 ] = "bottomRight" ;
2020-07-01 06:57:33 +00:00
} ) ( PointSectors || ( PointSectors = { } ) ) ;
2020-07-01 06:57:39 +00:00
var Collisions = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Collisions ( ) {
}
Collisions . isLineToLine = function ( a1 , a2 , b1 , b2 ) {
var b = Vector2 . subtract ( a2 , a1 ) ;
var d = Vector2 . subtract ( b2 , b1 ) ;
var bDotDPerp = b . x * d . y - b . y * d . x ;
if ( bDotDPerp == 0 )
return false ;
var c = Vector2 . subtract ( b1 , a1 ) ;
var t = ( c . x * d . y - c . y * d . x ) / bDotDPerp ;
if ( t < 0 || t > 1 )
return false ;
var u = ( c . x * b . y - c . y * b . x ) / bDotDPerp ;
if ( u < 0 || u > 1 )
return false ;
2020-07-01 06:57:33 +00:00
return true ;
2020-07-01 16:55:10 +08:00
} ;
Collisions . lineToLineIntersection = function ( a1 , a2 , b1 , b2 ) {
var intersection = new Vector2 ( 0 , 0 ) ;
var b = Vector2 . subtract ( a2 , a1 ) ;
var d = Vector2 . subtract ( b2 , b1 ) ;
var bDotDPerp = b . x * d . y - b . y * d . x ;
if ( bDotDPerp == 0 )
return intersection ;
var c = Vector2 . subtract ( b1 , a1 ) ;
var t = ( c . x * d . y - c . y * d . x ) / bDotDPerp ;
if ( t < 0 || t > 1 )
return intersection ;
var u = ( c . x * b . y - c . y * b . x ) / bDotDPerp ;
if ( u < 0 || u > 1 )
return intersection ;
intersection = Vector2 . add ( a1 , new Vector2 ( t * b . x , t * b . y ) ) ;
return intersection ;
} ;
Collisions . closestPointOnLine = function ( lineA , lineB , closestTo ) {
var v = Vector2 . subtract ( lineB , lineA ) ;
var w = Vector2 . subtract ( closestTo , lineA ) ;
var t = Vector2 . dot ( w , v ) / Vector2 . dot ( v , v ) ;
t = MathHelper . clamp ( t , 0 , 1 ) ;
return Vector2 . add ( lineA , new Vector2 ( v . x * t , v . y * t ) ) ;
} ;
Collisions . isCircleToCircle = function ( circleCenter1 , circleRadius1 , circleCenter2 , circleRadius2 ) {
return Vector2 . distanceSquared ( circleCenter1 , circleCenter2 ) < ( circleRadius1 + circleRadius2 ) * ( circleRadius1 + circleRadius2 ) ;
} ;
Collisions . isCircleToLine = function ( circleCenter , radius , lineFrom , lineTo ) {
return Vector2 . distanceSquared ( circleCenter , this . closestPointOnLine ( lineFrom , lineTo , circleCenter ) ) < radius * radius ;
} ;
Collisions . isCircleToPoint = function ( circleCenter , radius , point ) {
return Vector2 . distanceSquared ( circleCenter , point ) < radius * radius ;
} ;
Collisions . isRectToCircle = function ( rect , cPosition , cRadius ) {
var ew = rect . width * 0.5 ;
var eh = rect . height * 0.5 ;
var vx = Math . max ( 0 , Math . max ( cPosition . x - rect . x ) - ew ) ;
var vy = Math . max ( 0 , Math . max ( cPosition . y - rect . y ) - eh ) ;
return vx * vx + vy * vy < cRadius * cRadius ;
} ;
Collisions . isRectToLine = function ( rect , lineFrom , lineTo ) {
var fromSector = this . getSector ( rect . x , rect . y , rect . width , rect . height , lineFrom ) ;
var toSector = this . getSector ( rect . x , rect . y , rect . width , rect . height , lineTo ) ;
if ( fromSector == PointSectors . center || toSector == PointSectors . center ) {
return true ;
}
else if ( ( fromSector & toSector ) != 0 ) {
return false ;
}
else {
var both = fromSector | toSector ;
var edgeFrom = void 0 ;
var edgeTo = void 0 ;
if ( ( both & PointSectors . top ) != 0 ) {
edgeFrom = new Vector2 ( rect . x , rect . y ) ;
edgeTo = new Vector2 ( rect . x + rect . width , rect . y ) ;
if ( this . isLineToLine ( edgeFrom , edgeTo , lineFrom , lineTo ) )
return true ;
}
if ( ( both & PointSectors . bottom ) != 0 ) {
edgeFrom = new Vector2 ( rect . x , rect . y + rect . height ) ;
edgeTo = new Vector2 ( rect . x + rect . width , rect . y + rect . height ) ;
if ( this . isLineToLine ( edgeFrom , edgeTo , lineFrom , lineTo ) )
return true ;
}
if ( ( both & PointSectors . left ) != 0 ) {
edgeFrom = new Vector2 ( rect . x , rect . y ) ;
edgeTo = new Vector2 ( rect . x , rect . y + rect . height ) ;
if ( this . isLineToLine ( edgeFrom , edgeTo , lineFrom , lineTo ) )
return true ;
}
if ( ( both & PointSectors . right ) != 0 ) {
edgeFrom = new Vector2 ( rect . x + rect . width , rect . y ) ;
edgeTo = new Vector2 ( rect . x + rect . width , rect . y + rect . height ) ;
if ( this . isLineToLine ( edgeFrom , edgeTo , lineFrom , lineTo ) )
return true ;
}
}
return false ;
} ;
Collisions . isRectToPoint = function ( rX , rY , rW , rH , point ) {
return point . x >= rX && point . y >= rY && point . x < rX + rW && point . y < rY + rH ;
} ;
Collisions . getSector = function ( rX , rY , rW , rH , point ) {
var sector = PointSectors . center ;
if ( point . x < rX )
sector |= PointSectors . left ;
else if ( point . x >= rX + rW )
sector |= PointSectors . right ;
if ( point . y < rY )
sector |= PointSectors . top ;
else if ( point . y >= rY + rH )
sector |= PointSectors . bottom ;
return sector ;
} ;
return Collisions ;
} ( ) ) ;
var Physics = ( function ( ) {
function Physics ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Physics . reset = function ( ) {
this . _spatialHash = new SpatialHash ( this . spatialHashCellSize ) ;
} ;
Physics . clear = function ( ) {
this . _spatialHash . clear ( ) ;
} ;
Physics . overlapCircleAll = function ( center , randius , results , layerMask ) {
if ( layerMask === void 0 ) { layerMask = - 1 ; }
return this . _spatialHash . overlapCircle ( center , randius , results , layerMask ) ;
} ;
Physics . boxcastBroadphase = function ( rect , layerMask ) {
if ( layerMask === void 0 ) { layerMask = this . allLayers ; }
2020-07-07 18:54:19 +08:00
var boxcastResult = this . _spatialHash . aabbBroadphase ( rect , null , layerMask ) ;
return { colliders : boxcastResult . tempHashSet , rect : boxcastResult . bounds } ;
2020-07-01 16:55:10 +08:00
} ;
Physics . boxcastBroadphaseExcludingSelf = function ( collider , rect , layerMask ) {
if ( layerMask === void 0 ) { layerMask = this . allLayers ; }
return this . _spatialHash . aabbBroadphase ( rect , collider , layerMask ) ;
} ;
Physics . addCollider = function ( collider ) {
Physics . _spatialHash . register ( collider ) ;
} ;
Physics . removeCollider = function ( collider ) {
Physics . _spatialHash . remove ( collider ) ;
} ;
Physics . updateCollider = function ( collider ) {
this . _spatialHash . remove ( collider ) ;
this . _spatialHash . register ( collider ) ;
} ;
2020-07-09 16:16:04 +08:00
Physics . debugDraw = function ( secondsToDisplay ) {
this . _spatialHash . debugDraw ( secondsToDisplay , 2 ) ;
} ;
2020-07-01 16:55:10 +08:00
Physics . spatialHashCellSize = 100 ;
Physics . allLayers = - 1 ;
return Physics ;
} ( ) ) ;
var Shape = ( function ( ) {
function Shape ( ) {
2020-07-09 14:16:10 +08:00
this . bounds = new Rectangle ( ) ;
this . position = Vector2 . zero ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
return Shape ;
} ( ) ) ;
var Polygon = ( function ( _super ) {
_ _extends ( Polygon , _super ) ;
function Polygon ( points , isBox ) {
var _this = _super . call ( this ) || this ;
_this . isUnrotated = true ;
_this . _areEdgeNormalsDirty = true ;
2020-07-09 14:16:10 +08:00
_this . center = new Vector2 ( ) ;
2020-07-01 16:55:10 +08:00
_this . setPoints ( points ) ;
_this . isBox = isBox ;
return _this ;
}
Object . defineProperty ( Polygon . prototype , "edgeNormals" , {
get : function ( ) {
if ( this . _areEdgeNormalsDirty )
this . buildEdgeNormals ( ) ;
return this . _edgeNormals ;
} ,
enumerable : true ,
configurable : true
} ) ;
Polygon . prototype . buildEdgeNormals = function ( ) {
var totalEdges = this . isBox ? 2 : this . points . length ;
if ( this . _edgeNormals == null || this . _edgeNormals . length != totalEdges )
this . _edgeNormals = new Array ( totalEdges ) ;
var p2 ;
for ( var i = 0 ; i < totalEdges ; i ++ ) {
var p1 = this . points [ i ] ;
if ( i + 1 >= this . points . length )
p2 = this . points [ 0 ] ;
else
p2 = this . points [ i + 1 ] ;
var perp = Vector2Ext . perpendicular ( p1 , p2 ) ;
perp = Vector2 . normalize ( perp ) ;
this . _edgeNormals [ i ] = perp ;
}
} ;
Polygon . prototype . setPoints = function ( points ) {
this . points = points ;
this . recalculateCenterAndEdgeNormals ( ) ;
this . _originalPoints = [ ] ;
for ( var i = 0 ; i < this . points . length ; i ++ ) {
this . _originalPoints . push ( this . points [ i ] ) ;
}
} ;
Polygon . prototype . collidesWithShape = function ( other ) {
var result = new CollisionResult ( ) ;
if ( other instanceof Polygon ) {
return ShapeCollisions . polygonToPolygon ( this , other ) ;
}
if ( other instanceof Circle ) {
result = ShapeCollisions . circleToPolygon ( other , this ) ;
if ( result ) {
result . invertResult ( ) ;
return result ;
}
return null ;
}
throw new Error ( "overlaps of Polygon to " + other + " are not supported" ) ;
} ;
Polygon . prototype . recalculateCenterAndEdgeNormals = function ( ) {
this . _polygonCenter = Polygon . findPolygonCenter ( this . points ) ;
this . _areEdgeNormalsDirty = true ;
} ;
Polygon . prototype . overlaps = function ( other ) {
var result ;
if ( other instanceof Polygon )
return ShapeCollisions . polygonToPolygon ( this , other ) ;
if ( other instanceof Circle ) {
result = ShapeCollisions . circleToPolygon ( other , this ) ;
if ( result ) {
result . invertResult ( ) ;
return true ;
}
return false ;
}
throw new Error ( "overlaps of Pologon to " + other + " are not supported" ) ;
} ;
Polygon . findPolygonCenter = function ( points ) {
var x = 0 , y = 0 ;
for ( var i = 0 ; i < points . length ; i ++ ) {
x += points [ i ] . x ;
y += points [ i ] . y ;
}
return new Vector2 ( x / points . length , y / points . length ) ;
} ;
2020-07-09 15:11:30 +08:00
Polygon . recenterPolygonVerts = function ( points ) {
var center = this . findPolygonCenter ( points ) ;
for ( var i = 0 ; i < points . length ; i ++ )
points [ i ] = Vector2 . subtract ( points [ i ] , center ) ;
} ;
2020-07-01 16:55:10 +08:00
Polygon . getClosestPointOnPolygonToPoint = function ( points , point ) {
var distanceSquared = Number . MAX _VALUE ;
var edgeNormal = new Vector2 ( 0 , 0 ) ;
var closestPoint = new Vector2 ( 0 , 0 ) ;
var tempDistanceSquared ;
for ( var i = 0 ; i < points . length ; i ++ ) {
var j = i + 1 ;
if ( j == points . length )
j = 0 ;
var closest = ShapeCollisions . closestPointOnLine ( points [ i ] , points [ j ] , point ) ;
tempDistanceSquared = Vector2 . distanceSquared ( point , closest ) ;
if ( tempDistanceSquared < distanceSquared ) {
distanceSquared = tempDistanceSquared ;
closestPoint = closest ;
var line = Vector2 . subtract ( points [ j ] , points [ i ] ) ;
edgeNormal . x = - line . y ;
edgeNormal . y = line . x ;
}
}
edgeNormal = Vector2 . normalize ( edgeNormal ) ;
return { closestPoint : closestPoint , distanceSquared : distanceSquared , edgeNormal : edgeNormal } ;
} ;
Polygon . prototype . pointCollidesWithShape = function ( point ) {
return ShapeCollisions . pointToPoly ( point , this ) ;
} ;
Polygon . prototype . containsPoint = function ( point ) {
point = Vector2 . subtract ( point , this . position ) ;
var isInside = false ;
for ( var i = 0 , j = this . points . length - 1 ; i < this . points . length ; j = i ++ ) {
if ( ( ( this . points [ i ] . y > point . y ) != ( this . points [ j ] . y > point . y ) ) &&
( point . x < ( this . points [ j ] . x - this . points [ i ] . x ) * ( point . y - this . points [ i ] . y ) / ( this . points [ j ] . y - this . points [ i ] . y ) +
this . points [ i ] . x ) ) {
isInside = ! isInside ;
}
}
return isInside ;
} ;
Polygon . buildSymmertricalPolygon = function ( vertCount , radius ) {
var verts = new Array ( vertCount ) ;
for ( var i = 0 ; i < vertCount ; i ++ ) {
var a = 2 * Math . PI * ( i / vertCount ) ;
verts [ i ] = new Vector2 ( Math . cos ( a ) , Math . sin ( a ) * radius ) ;
}
return verts ;
} ;
Polygon . prototype . recalculateBounds = function ( collider ) {
2020-07-09 14:16:10 +08:00
var localOffset = collider . localOffset ;
2020-07-08 18:12:17 +08:00
if ( collider . shouldColliderScaleAndRotateWithTransform ) {
2020-07-01 16:55:10 +08:00
var hasUnitScale = true ;
var tempMat = void 0 ;
var combinedMatrix = Matrix2D . createTranslation ( - this . _polygonCenter . x , - this . _polygonCenter . y ) ;
if ( collider . entity . scale != Vector2 . one ) {
tempMat = Matrix2D . createScale ( collider . entity . scale . x , collider . entity . scale . y ) ;
combinedMatrix = Matrix2D . multiply ( combinedMatrix , tempMat ) ;
hasUnitScale = false ;
var scaledOffset = Vector2 . multiply ( collider . localOffset , collider . entity . scale ) ;
2020-07-09 14:16:10 +08:00
localOffset = scaledOffset ;
2020-07-01 16:55:10 +08:00
}
if ( collider . entity . rotation != 0 ) {
2020-07-08 18:12:17 +08:00
tempMat = Matrix2D . createRotation ( collider . entity . rotation , tempMat ) ;
2020-07-01 16:55:10 +08:00
combinedMatrix = Matrix2D . multiply ( combinedMatrix , tempMat ) ;
var offsetAngle = Math . atan2 ( collider . localOffset . y , collider . localOffset . x ) * MathHelper . Rad2Deg ;
var offsetLength = hasUnitScale ? collider . _localOffsetLength : ( Vector2 . multiply ( collider . localOffset , collider . entity . scale ) ) . length ( ) ;
2020-07-09 14:16:10 +08:00
localOffset = MathHelper . pointOnCirlce ( Vector2 . zero , offsetLength , MathHelper . toDegrees ( collider . entity . rotation ) + offsetAngle ) ;
2020-07-01 16:55:10 +08:00
}
tempMat = Matrix2D . createTranslation ( this . _polygonCenter . x , this . _polygonCenter . y ) ;
combinedMatrix = Matrix2D . multiply ( combinedMatrix , tempMat ) ;
Vector2Ext . transform ( this . _originalPoints , combinedMatrix , this . points ) ;
this . isUnrotated = collider . entity . rotation == 0 ;
}
2020-07-09 14:16:10 +08:00
this . position = Vector2 . add ( collider . entity . position , localOffset ) ;
2020-07-01 16:55:10 +08:00
this . bounds = Rectangle . rectEncompassingPoints ( this . points ) ;
this . bounds . location = Vector2 . add ( this . bounds . location , this . position ) ;
2020-07-09 14:16:10 +08:00
this . center = localOffset ;
2020-07-01 16:55:10 +08:00
} ;
return Polygon ;
} ( Shape ) ) ;
2020-07-01 06:57:39 +00:00
var Box = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( Box , _super ) ;
function Box ( width , height ) {
var _this = _super . call ( this , Box . buildBox ( width , height ) , true ) || this ;
_this . width = width ;
_this . height = height ;
return _this ;
}
Box . buildBox = function ( width , height ) {
var halfWidth = width / 2 ;
var halfHeight = height / 2 ;
var verts = new Array ( 4 ) ;
verts [ 0 ] = new Vector2 ( - halfWidth , - halfHeight ) ;
verts [ 1 ] = new Vector2 ( halfWidth , - halfHeight ) ;
verts [ 2 ] = new Vector2 ( halfWidth , halfHeight ) ;
verts [ 3 ] = new Vector2 ( - halfWidth , halfHeight ) ;
return verts ;
} ;
2020-07-07 18:54:19 +08:00
Box . prototype . overlaps = function ( other ) {
if ( this . isUnrotated ) {
if ( other instanceof Box && other . isUnrotated )
return this . bounds . intersects ( other . bounds ) ;
if ( other instanceof Circle )
return Collisions . isRectToCircle ( this . bounds , other . position , other . radius ) ;
}
return _super . prototype . overlaps . call ( this , other ) ;
} ;
2020-07-07 12:18:51 +08:00
Box . prototype . collidesWithShape = function ( other ) {
if ( this . isUnrotated && other instanceof Box && other . isUnrotated ) {
return ShapeCollisions . boxToBox ( this , other ) ;
}
return _super . prototype . collidesWithShape . call ( this , other ) ;
} ;
2020-07-01 16:55:10 +08:00
Box . prototype . updateBox = function ( width , height ) {
this . width = width ;
this . height = height ;
var halfWidth = width / 2 ;
var halfHeight = height / 2 ;
this . points [ 0 ] = new Vector2 ( - halfWidth , - halfHeight ) ;
this . points [ 1 ] = new Vector2 ( halfWidth , - halfHeight ) ;
this . points [ 2 ] = new Vector2 ( halfWidth , halfHeight ) ;
this . points [ 3 ] = new Vector2 ( - halfWidth , halfHeight ) ;
for ( var i = 0 ; i < this . points . length ; i ++ )
this . _originalPoints [ i ] = this . points [ i ] ;
} ;
Box . prototype . containsPoint = function ( point ) {
if ( this . isUnrotated )
2020-07-09 14:16:10 +08:00
return this . bounds . contains ( point . x , point . y ) ;
2020-07-01 16:55:10 +08:00
return _super . prototype . containsPoint . call ( this , point ) ;
} ;
return Box ;
} ( Polygon ) ) ;
2020-07-01 06:57:39 +00:00
var Circle = ( function ( _super ) {
2020-07-01 16:55:10 +08:00
_ _extends ( Circle , _super ) ;
function Circle ( radius ) {
var _this = _super . call ( this ) || this ;
2020-07-09 14:16:10 +08:00
_this . center = new Vector2 ( ) ;
2020-07-01 16:55:10 +08:00
_this . radius = radius ;
_this . _originalRadius = radius ;
return _this ;
}
Circle . prototype . pointCollidesWithShape = function ( point ) {
return ShapeCollisions . pointToCircle ( point , this ) ;
} ;
Circle . prototype . collidesWithShape = function ( other ) {
if ( other instanceof Box && other . isUnrotated ) {
return ShapeCollisions . circleToBox ( this , other ) ;
}
if ( other instanceof Circle ) {
return ShapeCollisions . circleToCircle ( this , other ) ;
}
if ( other instanceof Polygon ) {
return ShapeCollisions . circleToPolygon ( this , other ) ;
}
throw new Error ( "Collisions of Circle to " + other + " are not supported" ) ;
} ;
Circle . prototype . recalculateBounds = function ( collider ) {
this . center = collider . localOffset ;
2020-07-08 18:12:17 +08:00
if ( collider . shouldColliderScaleAndRotateWithTransform ) {
2020-07-01 16:55:10 +08:00
var scale = collider . entity . scale ;
var hasUnitScale = scale . x == 1 && scale . y == 1 ;
var maxScale = Math . max ( scale . x , scale . y ) ;
this . radius = this . _originalRadius * maxScale ;
if ( collider . entity . rotation != 0 ) {
var offsetAngle = Math . atan2 ( collider . localOffset . y , collider . localOffset . x ) * MathHelper . Rad2Deg ;
var offsetLength = hasUnitScale ? collider . _localOffsetLength : ( Vector2 . multiply ( collider . localOffset , collider . entity . scale ) ) . length ( ) ;
this . center = MathHelper . pointOnCirlce ( Vector2 . zero , offsetLength , MathHelper . toDegrees ( collider . entity . rotation ) + offsetAngle ) ;
}
}
this . position = Vector2 . add ( collider . entity . position , this . center ) ;
this . bounds = new Rectangle ( this . position . x - this . radius , this . position . y - this . radius , this . radius * 2 , this . radius * 2 ) ;
} ;
Circle . prototype . overlaps = function ( other ) {
if ( other instanceof Box && other . isUnrotated )
return Collisions . isRectToCircle ( other . bounds , this . position , this . radius ) ;
if ( other instanceof Circle )
return Collisions . isCircleToCircle ( this . position , this . radius , other . position , other . radius ) ;
if ( other instanceof Polygon )
return ShapeCollisions . circleToPolygon ( this , other ) ;
throw new Error ( "overlaps of circle to " + other + " are not supported" ) ;
} ;
return Circle ;
} ( Shape ) ) ;
2020-07-01 06:57:39 +00:00
var CollisionResult = ( function ( ) {
2020-07-01 16:55:10 +08:00
function CollisionResult ( ) {
2020-07-07 12:18:51 +08:00
this . minimumTranslationVector = Vector2 . zero ;
this . normal = Vector2 . zero ;
this . point = Vector2 . zero ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
CollisionResult . prototype . invertResult = function ( ) {
this . minimumTranslationVector = Vector2 . negate ( this . minimumTranslationVector ) ;
this . normal = Vector2 . negate ( this . normal ) ;
} ;
return CollisionResult ;
} ( ) ) ;
var ShapeCollisions = ( function ( ) {
function ShapeCollisions ( ) {
}
ShapeCollisions . polygonToPolygon = function ( first , second ) {
var result = new CollisionResult ( ) ;
var isIntersecting = true ;
var firstEdges = first . edgeNormals ;
var secondEdges = second . edgeNormals ;
var minIntervalDistance = Number . POSITIVE _INFINITY ;
var translationAxis = new Vector2 ( ) ;
var polygonOffset = Vector2 . subtract ( first . position , second . position ) ;
var axis ;
for ( var edgeIndex = 0 ; edgeIndex < firstEdges . length + secondEdges . length ; edgeIndex ++ ) {
if ( edgeIndex < firstEdges . length ) {
axis = firstEdges [ edgeIndex ] ;
}
else {
axis = secondEdges [ edgeIndex - firstEdges . length ] ;
}
var minA = 0 ;
var minB = 0 ;
var maxA = 0 ;
var maxB = 0 ;
var intervalDist = 0 ;
var ta = this . getInterval ( axis , first , minA , maxA ) ;
minA = ta . min ;
minB = ta . max ;
var tb = this . getInterval ( axis , second , minB , maxB ) ;
minB = tb . min ;
maxB = tb . max ;
var relativeIntervalOffset = Vector2 . dot ( polygonOffset , axis ) ;
minA += relativeIntervalOffset ;
maxA += relativeIntervalOffset ;
intervalDist = this . intervalDistance ( minA , maxA , minB , maxB ) ;
if ( intervalDist > 0 )
isIntersecting = false ;
if ( ! isIntersecting )
return null ;
intervalDist = Math . abs ( intervalDist ) ;
if ( intervalDist < minIntervalDistance ) {
minIntervalDistance = intervalDist ;
translationAxis = axis ;
if ( Vector2 . dot ( translationAxis , polygonOffset ) < 0 )
translationAxis = new Vector2 ( - translationAxis ) ;
}
}
result . normal = translationAxis ;
2020-07-08 15:15:15 +08:00
result . minimumTranslationVector = Vector2 . multiply ( new Vector2 ( - translationAxis . x , - translationAxis . y ) , new Vector2 ( minIntervalDistance ) ) ;
2020-07-01 16:55:10 +08:00
return result ;
} ;
ShapeCollisions . intervalDistance = function ( minA , maxA , minB , maxB ) {
if ( minA < minB )
return minB - maxA ;
return minA - minB ;
} ;
ShapeCollisions . getInterval = function ( axis , polygon , min , max ) {
var dot = Vector2 . dot ( polygon . points [ 0 ] , axis ) ;
min = max = dot ;
for ( var i = 1 ; i < polygon . points . length ; i ++ ) {
dot = Vector2 . dot ( polygon . points [ i ] , axis ) ;
if ( dot < min ) {
min = dot ;
}
else if ( dot > max ) {
max = dot ;
}
}
return { min : min , max : max } ;
} ;
ShapeCollisions . circleToPolygon = function ( circle , polygon ) {
var result = new CollisionResult ( ) ;
var poly2Circle = Vector2 . subtract ( circle . position , polygon . position ) ;
var gpp = Polygon . getClosestPointOnPolygonToPoint ( polygon . points , poly2Circle ) ;
var closestPoint = gpp . closestPoint ;
var distanceSquared = gpp . distanceSquared ;
result . normal = gpp . edgeNormal ;
var circleCenterInsidePoly = polygon . containsPoint ( circle . position ) ;
if ( distanceSquared > circle . radius * circle . radius && ! circleCenterInsidePoly )
return null ;
var mtv ;
if ( circleCenterInsidePoly ) {
mtv = Vector2 . multiply ( result . normal , new Vector2 ( Math . sqrt ( distanceSquared ) - circle . radius ) ) ;
}
else {
if ( distanceSquared == 0 ) {
mtv = Vector2 . multiply ( result . normal , new Vector2 ( circle . radius ) ) ;
}
else {
var distance = Math . sqrt ( distanceSquared ) ;
mtv = Vector2 . multiply ( new Vector2 ( - Vector2 . subtract ( poly2Circle , closestPoint ) ) , new Vector2 ( ( circle . radius - distanceSquared ) / distance ) ) ;
}
}
result . minimumTranslationVector = mtv ;
result . point = Vector2 . add ( closestPoint , polygon . position ) ;
return result ;
} ;
ShapeCollisions . circleToBox = function ( circle , box ) {
var result = new CollisionResult ( ) ;
var closestPointOnBounds = box . bounds . getClosestPointOnRectangleBorderToPoint ( circle . position ) . res ;
if ( box . containsPoint ( circle . position ) ) {
result . point = closestPointOnBounds ;
var safePlace = Vector2 . add ( closestPointOnBounds , Vector2 . subtract ( result . normal , new Vector2 ( circle . radius ) ) ) ;
result . minimumTranslationVector = Vector2 . subtract ( circle . position , safePlace ) ;
return result ;
}
var sqrDistance = Vector2 . distanceSquared ( closestPointOnBounds , circle . position ) ;
if ( sqrDistance == 0 ) {
result . minimumTranslationVector = Vector2 . multiply ( result . normal , new Vector2 ( circle . radius ) ) ;
}
else if ( sqrDistance <= circle . radius * circle . radius ) {
result . normal = Vector2 . subtract ( circle . position , closestPointOnBounds ) ;
var depth = result . normal . length ( ) - circle . radius ;
result . normal = Vector2Ext . normalize ( result . normal ) ;
result . minimumTranslationVector = Vector2 . multiply ( new Vector2 ( depth ) , result . normal ) ;
return result ;
}
return null ;
} ;
ShapeCollisions . pointToCircle = function ( point , circle ) {
var result = new CollisionResult ( ) ;
var distanceSquared = Vector2 . distanceSquared ( point , circle . position ) ;
var sumOfRadii = 1 + circle . radius ;
var collided = distanceSquared < sumOfRadii * sumOfRadii ;
if ( collided ) {
result . normal = Vector2 . normalize ( Vector2 . subtract ( point , circle . position ) ) ;
var depth = sumOfRadii - Math . sqrt ( distanceSquared ) ;
result . minimumTranslationVector = Vector2 . multiply ( new Vector2 ( - depth , - depth ) , result . normal ) ;
result . point = Vector2 . add ( circle . position , Vector2 . multiply ( result . normal , new Vector2 ( circle . radius , circle . radius ) ) ) ;
return result ;
}
return null ;
} ;
ShapeCollisions . closestPointOnLine = function ( lineA , lineB , closestTo ) {
var v = Vector2 . subtract ( lineB , lineA ) ;
var w = Vector2 . subtract ( closestTo , lineA ) ;
var t = Vector2 . dot ( w , v ) / Vector2 . dot ( v , v ) ;
t = MathHelper . clamp ( t , 0 , 1 ) ;
return Vector2 . add ( lineA , Vector2 . multiply ( v , new Vector2 ( t , t ) ) ) ;
} ;
ShapeCollisions . pointToPoly = function ( point , poly ) {
var result = new CollisionResult ( ) ;
if ( poly . containsPoint ( point ) ) {
var distanceSquared = void 0 ;
var gpp = Polygon . getClosestPointOnPolygonToPoint ( poly . points , Vector2 . subtract ( point , poly . position ) ) ;
var closestPoint = gpp . closestPoint ;
distanceSquared = gpp . distanceSquared ;
result . normal = gpp . edgeNormal ;
result . minimumTranslationVector = Vector2 . multiply ( result . normal , new Vector2 ( Math . sqrt ( distanceSquared ) , Math . sqrt ( distanceSquared ) ) ) ;
result . point = Vector2 . add ( closestPoint , poly . position ) ;
return result ;
}
return null ;
} ;
ShapeCollisions . circleToCircle = function ( first , second ) {
var result = new CollisionResult ( ) ;
var distanceSquared = Vector2 . distanceSquared ( first . position , second . position ) ;
var sumOfRadii = first . radius + second . radius ;
var collided = distanceSquared < sumOfRadii * sumOfRadii ;
if ( collided ) {
result . normal = Vector2 . normalize ( Vector2 . subtract ( first . position , second . position ) ) ;
var depth = sumOfRadii - Math . sqrt ( distanceSquared ) ;
result . minimumTranslationVector = Vector2 . multiply ( new Vector2 ( - depth ) , result . normal ) ;
result . point = Vector2 . add ( second . position , Vector2 . multiply ( result . normal , new Vector2 ( second . radius ) ) ) ;
return result ;
}
return null ;
} ;
2020-07-07 12:18:51 +08:00
ShapeCollisions . boxToBox = function ( first , second ) {
var result = new CollisionResult ( ) ;
var minkowskiDiff = this . minkowskiDifference ( first , second ) ;
2020-07-09 14:16:10 +08:00
if ( minkowskiDiff . contains ( 0 , 0 ) ) {
2020-07-07 12:18:51 +08:00
result . minimumTranslationVector = minkowskiDiff . getClosestPointOnBoundsToOrigin ( ) ;
2020-07-08 15:15:15 +08:00
if ( result . minimumTranslationVector . x == 0 && result . minimumTranslationVector . y == 0 )
return null ;
2020-07-07 12:18:51 +08:00
result . normal = new Vector2 ( - result . minimumTranslationVector . x , - result . minimumTranslationVector . y ) ;
result . normal . normalize ( ) ;
2020-07-07 18:54:19 +08:00
return result ;
2020-07-07 12:18:51 +08:00
}
2020-07-07 18:54:19 +08:00
return null ;
2020-07-07 12:18:51 +08:00
} ;
ShapeCollisions . minkowskiDifference = function ( first , second ) {
var positionOffset = Vector2 . subtract ( first . position , Vector2 . add ( first . bounds . location , Vector2 . divide ( first . bounds . size , new Vector2 ( 2 ) ) ) ) ;
var topLeft = Vector2 . subtract ( Vector2 . add ( first . bounds . location , positionOffset ) , second . bounds . max ) ;
var fullSize = Vector2 . add ( first . bounds . size , second . bounds . size ) ;
return new Rectangle ( topLeft . x , topLeft . y , fullSize . x , fullSize . y ) ;
} ;
2020-07-01 16:55:10 +08:00
return ShapeCollisions ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var SpatialHash = ( function ( ) {
2020-07-01 16:55:10 +08:00
function SpatialHash ( cellSize ) {
if ( cellSize === void 0 ) { cellSize = 100 ; }
this . gridBounds = new Rectangle ( ) ;
2020-07-08 18:12:17 +08:00
this . _overlapTestCircle = new Circle ( 0 ) ;
2020-07-01 16:55:10 +08:00
this . _tempHashSet = [ ] ;
this . _cellDict = new NumberDictionary ( ) ;
this . _cellSize = cellSize ;
this . _inverseCellSize = 1 / this . _cellSize ;
this . _raycastParser = new RaycastResultParser ( ) ;
}
SpatialHash . prototype . remove = function ( collider ) {
var bounds = collider . registeredPhysicsBounds ;
var p1 = this . cellCoords ( bounds . x , bounds . y ) ;
var p2 = this . cellCoords ( bounds . right , bounds . bottom ) ;
for ( var x = p1 . x ; x <= p2 . x ; x ++ ) {
for ( var y = p1 . y ; y <= p2 . y ; y ++ ) {
var cell = this . cellAtPosition ( x , y ) ;
if ( ! cell )
console . error ( "removing Collider [" + collider + "] from a cell that it is not present in" ) ;
else
cell . remove ( collider ) ;
}
}
} ;
SpatialHash . prototype . register = function ( collider ) {
var bounds = collider . bounds ;
collider . registeredPhysicsBounds = bounds ;
var p1 = this . cellCoords ( bounds . x , bounds . y ) ;
var p2 = this . cellCoords ( bounds . right , bounds . bottom ) ;
2020-07-09 14:16:10 +08:00
if ( ! this . gridBounds . contains ( p1 . x , p1 . y ) ) {
2020-07-01 16:55:10 +08:00
this . gridBounds = RectangleExt . union ( this . gridBounds , p1 ) ;
}
2020-07-09 14:16:10 +08:00
if ( ! this . gridBounds . contains ( p2 . x , p2 . y ) ) {
2020-07-01 16:55:10 +08:00
this . gridBounds = RectangleExt . union ( this . gridBounds , p2 ) ;
}
for ( var x = p1 . x ; x <= p2 . x ; x ++ ) {
for ( var y = p1 . y ; y <= p2 . y ; y ++ ) {
var c = this . cellAtPosition ( x , y , true ) ;
c . push ( collider ) ;
}
}
} ;
SpatialHash . prototype . clear = function ( ) {
this . _cellDict . clear ( ) ;
} ;
SpatialHash . prototype . overlapCircle = function ( circleCenter , radius , results , layerMask ) {
var bounds = new Rectangle ( circleCenter . x - radius , circleCenter . y - radius , radius * 2 , radius * 2 ) ;
this . _overlapTestCircle . radius = radius ;
this . _overlapTestCircle . position = circleCenter ;
var resultCounter = 0 ;
2020-07-07 18:54:19 +08:00
var aabbBroadphaseResult = this . aabbBroadphase ( bounds , null , layerMask ) ;
bounds = aabbBroadphaseResult . bounds ;
var potentials = aabbBroadphaseResult . tempHashSet ;
2020-07-01 16:55:10 +08:00
for ( var i = 0 ; i < potentials . length ; i ++ ) {
var collider = potentials [ i ] ;
if ( collider instanceof BoxCollider ) {
results [ resultCounter ] = collider ;
resultCounter ++ ;
}
2020-07-09 15:11:30 +08:00
else if ( collider instanceof CircleCollider ) {
if ( collider . shape . overlaps ( this . _overlapTestCircle ) ) {
results [ resultCounter ] = collider ;
resultCounter ++ ;
}
}
2020-07-09 16:16:04 +08:00
else if ( collider instanceof PolygonCollider ) {
if ( collider . shape . overlaps ( this . _overlapTestCircle ) ) {
results [ resultCounter ] = collider ;
resultCounter ++ ;
}
}
2020-07-01 16:55:10 +08:00
else {
throw new Error ( "overlapCircle against this collider type is not implemented!" ) ;
}
if ( resultCounter == results . length )
return resultCounter ;
}
return resultCounter ;
} ;
SpatialHash . prototype . aabbBroadphase = function ( bounds , excludeCollider , layerMask ) {
this . _tempHashSet . length = 0 ;
var p1 = this . cellCoords ( bounds . x , bounds . y ) ;
var p2 = this . cellCoords ( bounds . right , bounds . bottom ) ;
for ( var x = p1 . x ; x <= p2 . x ; x ++ ) {
for ( var y = p1 . y ; y <= p2 . y ; y ++ ) {
var cell = this . cellAtPosition ( x , y ) ;
if ( ! cell )
continue ;
for ( var i = 0 ; i < cell . length ; i ++ ) {
var collider = cell [ i ] ;
if ( collider == excludeCollider || ! Flags . isFlagSet ( layerMask , collider . physicsLayer ) )
continue ;
if ( bounds . intersects ( collider . bounds ) ) {
if ( this . _tempHashSet . indexOf ( collider ) == - 1 )
this . _tempHashSet . push ( collider ) ;
}
}
}
}
2020-07-07 18:54:19 +08:00
return { tempHashSet : this . _tempHashSet , bounds : bounds } ;
2020-07-01 16:55:10 +08:00
} ;
SpatialHash . prototype . cellAtPosition = function ( x , y , createCellIfEmpty ) {
if ( createCellIfEmpty === void 0 ) { createCellIfEmpty = false ; }
var cell = this . _cellDict . tryGetValue ( x , y ) ;
if ( ! cell ) {
if ( createCellIfEmpty ) {
cell = [ ] ;
this . _cellDict . add ( x , y , cell ) ;
}
}
return cell ;
} ;
SpatialHash . prototype . cellCoords = function ( x , y ) {
2020-07-08 15:15:15 +08:00
return new Vector2 ( Math . floor ( x * this . _inverseCellSize ) , Math . floor ( y * this . _inverseCellSize ) ) ;
2020-07-01 16:55:10 +08:00
} ;
2020-07-09 16:16:04 +08:00
SpatialHash . prototype . debugDraw = function ( secondsToDisplay , textScale ) {
if ( textScale === void 0 ) { textScale = 1 ; }
for ( var x = this . gridBounds . x ; x <= this . gridBounds . right ; x ++ ) {
for ( var y = this . gridBounds . y ; y <= this . gridBounds . bottom ; y ++ ) {
var cell = this . cellAtPosition ( x , y ) ;
if ( cell && cell . length > 0 )
this . debugDrawCellDetails ( x , y , cell . length , secondsToDisplay , textScale ) ;
}
}
} ;
SpatialHash . prototype . debugDrawCellDetails = function ( x , y , cellCount , secondsToDisplay , textScale ) {
if ( secondsToDisplay === void 0 ) { secondsToDisplay = 0.5 ; }
if ( textScale === void 0 ) { textScale = 1 ; }
2020-07-01 16:55:10 +08:00
} ;
return SpatialHash ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var RaycastResultParser = ( function ( ) {
2020-07-01 16:55:10 +08:00
function RaycastResultParser ( ) {
}
return RaycastResultParser ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var NumberDictionary = ( function ( ) {
2020-07-01 16:55:10 +08:00
function NumberDictionary ( ) {
this . _store = new Map ( ) ;
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
NumberDictionary . prototype . getKey = function ( x , y ) {
return Long . fromNumber ( x ) . shiftLeft ( 32 ) . or ( this . intToUint ( y ) ) . toString ( ) ;
} ;
NumberDictionary . prototype . intToUint = function ( i ) {
if ( i >= 0 )
return i ;
else
return 4294967296 + i ;
} ;
NumberDictionary . prototype . add = function ( x , y , list ) {
this . _store . set ( this . getKey ( x , y ) , list ) ;
} ;
NumberDictionary . prototype . remove = function ( obj ) {
this . _store . forEach ( function ( list ) {
if ( list . contains ( obj ) )
list . remove ( obj ) ;
} ) ;
} ;
NumberDictionary . prototype . tryGetValue = function ( x , y ) {
return this . _store . get ( this . getKey ( x , y ) ) ;
} ;
NumberDictionary . prototype . clear = function ( ) {
this . _store . clear ( ) ;
} ;
return NumberDictionary ;
} ( ) ) ;
var ContentManager = ( function ( ) {
function ContentManager ( ) {
this . loadedAssets = new Map ( ) ;
}
ContentManager . prototype . loadRes = function ( name , local ) {
var _this = this ;
if ( local === void 0 ) { local = true ; }
return new Promise ( function ( resolve , reject ) {
var res = _this . loadedAssets . get ( name ) ;
if ( res ) {
resolve ( res ) ;
return ;
}
if ( local ) {
RES . getResAsync ( name ) . then ( function ( data ) {
_this . loadedAssets . set ( name , data ) ;
resolve ( data ) ;
} ) . catch ( function ( err ) {
console . error ( "资源加载错误:" , name , err ) ;
reject ( err ) ;
} ) ;
}
else {
RES . getResByUrl ( name ) . then ( function ( data ) {
_this . loadedAssets . set ( name , data ) ;
resolve ( data ) ;
} ) . catch ( function ( err ) {
console . error ( "资源加载错误:" , name , err ) ;
reject ( err ) ;
} ) ;
}
} ) ;
} ;
ContentManager . prototype . dispose = function ( ) {
this . loadedAssets . forEach ( function ( value ) {
var assetsToRemove = value ;
assetsToRemove . dispose ( ) ;
} ) ;
this . loadedAssets . clear ( ) ;
} ;
return ContentManager ;
} ( ) ) ;
2020-07-09 16:16:04 +08:00
var DrawUtils = ( function ( ) {
function DrawUtils ( ) {
}
DrawUtils . drawLine = function ( shape , start , end , color , thickness ) {
if ( thickness === void 0 ) { thickness = 1 ; }
this . drawLineAngle ( shape , start , MathHelper . angleBetweenVectors ( start , end ) , Vector2 . distance ( start , end ) , color , thickness ) ;
} ;
DrawUtils . drawLineAngle = function ( shape , start , radians , length , color , thickness ) {
if ( thickness === void 0 ) { thickness = 1 ; }
shape . graphics . beginFill ( color ) ;
shape . graphics . drawRect ( start . x , start . y , 1 , 1 ) ;
shape . graphics . endFill ( ) ;
shape . scaleX = length ;
shape . scaleY = thickness ;
shape . $anchorOffsetX = 0 ;
shape . $anchorOffsetY = 0 ;
shape . rotation = radians ;
} ;
DrawUtils . drawHollowRect = function ( shape , rect , color , thickness ) {
if ( thickness === void 0 ) { thickness = 1 ; }
this . drawHollowRectR ( shape , rect . x , rect . y , rect . width , rect . height , color , thickness ) ;
} ;
DrawUtils . drawHollowRectR = function ( shape , x , y , width , height , color , thickness ) {
if ( thickness === void 0 ) { thickness = 1 ; }
var tl = new Vector2 ( x , y ) . round ( ) ;
var tr = new Vector2 ( x + width , y ) . round ( ) ;
var br = new Vector2 ( x + width , y + height ) . round ( ) ;
var bl = new Vector2 ( x , y + height ) . round ( ) ;
this . drawLine ( shape , tl , tr , color , thickness ) ;
this . drawLine ( shape , tr , br , color , thickness ) ;
this . drawLine ( shape , br , bl , color , thickness ) ;
this . drawLine ( shape , bl , tl , color , thickness ) ;
} ;
DrawUtils . drawPixel = function ( shape , position , color , size ) {
if ( size === void 0 ) { size = 1 ; }
var destRect = new Rectangle ( position . x , position . y , size , size ) ;
if ( size != 1 ) {
destRect . x -= size * 0.5 ;
destRect . y -= size * 0.5 ;
}
shape . graphics . beginFill ( color ) ;
shape . graphics . drawRect ( destRect . x , destRect . y , destRect . width , destRect . height ) ;
shape . graphics . endFill ( ) ;
} ;
return DrawUtils ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Emitter = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Emitter ( ) {
this . _messageTable = new Map ( ) ;
}
Emitter . prototype . addObserver = function ( eventType , handler ) {
var list = this . _messageTable . get ( eventType ) ;
if ( ! list ) {
list = [ ] ;
this . _messageTable . set ( eventType , list ) ;
}
if ( list . contains ( handler ) )
console . warn ( "您试图添加相同的观察者两次" ) ;
list . push ( handler ) ;
} ;
Emitter . prototype . removeObserver = function ( eventType , handler ) {
this . _messageTable . get ( eventType ) . remove ( handler ) ;
} ;
Emitter . prototype . emit = function ( eventType , data ) {
var list = this . _messageTable . get ( eventType ) ;
if ( list ) {
for ( var i = list . length - 1 ; i >= 0 ; i -- )
list [ i ] ( data ) ;
}
} ;
return Emitter ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var GlobalManager = ( function ( ) {
2020-07-01 16:55:10 +08:00
function GlobalManager ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Object . defineProperty ( GlobalManager . prototype , "enabled" , {
get : function ( ) {
return this . _enabled ;
} ,
set : function ( value ) {
this . setEnabled ( value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
GlobalManager . prototype . setEnabled = function ( isEnabled ) {
if ( this . _enabled != isEnabled ) {
this . _enabled = isEnabled ;
if ( this . _enabled ) {
this . onEnabled ( ) ;
}
else {
this . onDisabled ( ) ;
}
}
} ;
GlobalManager . prototype . onEnabled = function ( ) { } ;
GlobalManager . prototype . onDisabled = function ( ) { } ;
GlobalManager . prototype . update = function ( ) { } ;
GlobalManager . registerGlobalManager = function ( manager ) {
this . globalManagers . push ( manager ) ;
manager . enabled = true ;
} ;
GlobalManager . unregisterGlobalManager = function ( manager ) {
this . globalManagers . remove ( manager ) ;
manager . enabled = false ;
} ;
GlobalManager . getGlobalManager = function ( type ) {
for ( var i = 0 ; i < this . globalManagers . length ; i ++ ) {
if ( this . globalManagers [ i ] instanceof type )
return this . globalManagers [ i ] ;
}
return null ;
} ;
GlobalManager . globalManagers = [ ] ;
return GlobalManager ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var TouchState = ( function ( ) {
2020-07-01 16:55:10 +08:00
function TouchState ( ) {
this . x = 0 ;
this . y = 0 ;
this . touchPoint = - 1 ;
this . touchDown = false ;
}
Object . defineProperty ( TouchState . prototype , "position" , {
get : function ( ) {
return new Vector2 ( this . x , this . y ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
TouchState . prototype . reset = function ( ) {
this . x = 0 ;
this . y = 0 ;
this . touchDown = false ;
this . touchPoint = - 1 ;
} ;
return TouchState ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Input = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Input ( ) {
2020-06-16 11:59:40 +08:00
}
2020-07-01 16:55:10 +08:00
Object . defineProperty ( Input , "touchPosition" , {
get : function ( ) {
if ( ! this . _gameTouchs [ 0 ] )
return Vector2 . zero ;
return this . _gameTouchs [ 0 ] . position ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( Input , "maxSupportedTouch" , {
get : function ( ) {
return this . _stage . maxTouches ;
} ,
set : function ( value ) {
this . _stage . maxTouches = value ;
this . initTouchCache ( ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Input , "resolutionScale" , {
get : function ( ) {
return this . _resolutionScale ;
} ,
enumerable : true ,
configurable : true
2020-07-01 06:57:39 +00:00
} ) ;
2020-07-01 16:55:10 +08:00
Object . defineProperty ( Input , "totalTouchCount" , {
get : function ( ) {
return this . _totalTouchCount ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Input , "gameTouchs" , {
get : function ( ) {
return this . _gameTouchs ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Input , "touchPositionDelta" , {
get : function ( ) {
var delta = Vector2 . subtract ( this . touchPosition , this . _previousTouchState . position ) ;
if ( delta . length ( ) > 0 ) {
this . setpreviousTouchState ( this . _gameTouchs [ 0 ] ) ;
}
return delta ;
} ,
enumerable : true ,
configurable : true
} ) ;
Input . initialize = function ( stage ) {
if ( this . _init )
return ;
this . _init = true ;
this . _stage = stage ;
this . _stage . addEventListener ( egret . TouchEvent . TOUCH _BEGIN , this . touchBegin , this ) ;
this . _stage . addEventListener ( egret . TouchEvent . TOUCH _MOVE , this . touchMove , this ) ;
this . _stage . addEventListener ( egret . TouchEvent . TOUCH _END , this . touchEnd , this ) ;
this . _stage . addEventListener ( egret . TouchEvent . TOUCH _CANCEL , this . touchEnd , this ) ;
this . _stage . addEventListener ( egret . TouchEvent . TOUCH _RELEASE _OUTSIDE , this . touchEnd , this ) ;
this . initTouchCache ( ) ;
} ;
Input . initTouchCache = function ( ) {
this . _totalTouchCount = 0 ;
2020-07-01 06:57:33 +00:00
this . _touchIndex = 0 ;
2020-07-01 16:55:10 +08:00
this . _gameTouchs . length = 0 ;
for ( var i = 0 ; i < this . maxSupportedTouch ; i ++ ) {
this . _gameTouchs . push ( new TouchState ( ) ) ;
}
} ;
Input . touchBegin = function ( evt ) {
if ( this . _touchIndex < this . maxSupportedTouch ) {
this . _gameTouchs [ this . _touchIndex ] . touchPoint = evt . touchPointID ;
this . _gameTouchs [ this . _touchIndex ] . touchDown = evt . touchDown ;
this . _gameTouchs [ this . _touchIndex ] . x = evt . stageX ;
this . _gameTouchs [ this . _touchIndex ] . y = evt . stageY ;
if ( this . _touchIndex == 0 ) {
this . setpreviousTouchState ( this . _gameTouchs [ 0 ] ) ;
}
this . _touchIndex ++ ;
this . _totalTouchCount ++ ;
}
} ;
Input . touchMove = function ( evt ) {
if ( evt . touchPointID == this . _gameTouchs [ 0 ] . touchPoint ) {
this . setpreviousTouchState ( this . _gameTouchs [ 0 ] ) ;
}
var touchIndex = this . _gameTouchs . findIndex ( function ( touch ) { return touch . touchPoint == evt . touchPointID ; } ) ;
if ( touchIndex != - 1 ) {
var touchData = this . _gameTouchs [ touchIndex ] ;
touchData . x = evt . stageX ;
touchData . y = evt . stageY ;
}
} ;
Input . touchEnd = function ( evt ) {
var touchIndex = this . _gameTouchs . findIndex ( function ( touch ) { return touch . touchPoint == evt . touchPointID ; } ) ;
if ( touchIndex != - 1 ) {
var touchData = this . _gameTouchs [ touchIndex ] ;
touchData . reset ( ) ;
if ( touchIndex == 0 )
this . _previousTouchState . reset ( ) ;
this . _totalTouchCount -- ;
if ( this . totalTouchCount == 0 ) {
this . _touchIndex = 0 ;
}
}
} ;
Input . setpreviousTouchState = function ( touchState ) {
this . _previousTouchState = new TouchState ( ) ;
this . _previousTouchState . x = touchState . position . x ;
this . _previousTouchState . y = touchState . position . y ;
this . _previousTouchState . touchPoint = touchState . touchPoint ;
this . _previousTouchState . touchDown = touchState . touchDown ;
} ;
Input . scaledPosition = function ( position ) {
var scaledPos = new Vector2 ( position . x - this . _resolutionOffset . x , position . y - this . _resolutionOffset . y ) ;
return Vector2 . multiply ( scaledPos , this . resolutionScale ) ;
} ;
Input . _init = false ;
Input . _previousTouchState = new TouchState ( ) ;
Input . _gameTouchs = [ ] ;
Input . _resolutionOffset = new Vector2 ( ) ;
Input . _resolutionScale = Vector2 . one ;
Input . _touchIndex = 0 ;
Input . _totalTouchCount = 0 ;
return Input ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var ListPool = ( function ( ) {
2020-07-01 16:55:10 +08:00
function ListPool ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
ListPool . warmCache = function ( cacheCount ) {
cacheCount -= this . _objectQueue . length ;
if ( cacheCount > 0 ) {
for ( var i = 0 ; i < cacheCount ; i ++ ) {
this . _objectQueue . unshift ( [ ] ) ;
}
}
} ;
ListPool . trimCache = function ( cacheCount ) {
while ( cacheCount > this . _objectQueue . length )
this . _objectQueue . shift ( ) ;
} ;
ListPool . clearCache = function ( ) {
this . _objectQueue . length = 0 ;
} ;
ListPool . obtain = function ( ) {
if ( this . _objectQueue . length > 0 )
return this . _objectQueue . shift ( ) ;
return [ ] ;
} ;
ListPool . free = function ( obj ) {
this . _objectQueue . unshift ( obj ) ;
obj . length = 0 ;
} ;
ListPool . _objectQueue = [ ] ;
return ListPool ;
} ( ) ) ;
2020-07-12 14:51:20 +08:00
var THREAD _ID = Math . floor ( Math . random ( ) * 1000 ) + "-" + Date . now ( ) ;
var setItem = egret . localStorage . setItem . bind ( localStorage ) ;
var getItem = egret . localStorage . getItem . bind ( localStorage ) ;
var removeItem = egret . localStorage . removeItem . bind ( localStorage ) ;
var nextTick = function ( fn ) {
setTimeout ( fn , 0 ) ;
} ;
var LockUtils = ( function ( ) {
function LockUtils ( key ) {
this . _keyX = "mutex_key_" + key + "_X" ;
this . _keyY = "mutex_key_" + key + "_Y" ;
}
LockUtils . prototype . lock = function ( ) {
var _this = this ;
return new Promise ( function ( resolve , reject ) {
var fn = function ( ) {
setItem ( _this . _keyX , THREAD _ID ) ;
if ( ! getItem ( _this . _keyY ) === null ) {
nextTick ( fn ) ;
}
setItem ( _this . _keyY , THREAD _ID ) ;
if ( getItem ( _this . _keyX ) !== THREAD _ID ) {
setTimeout ( function ( ) {
if ( getItem ( _this . _keyY ) !== THREAD _ID ) {
nextTick ( fn ) ;
return ;
}
resolve ( ) ;
removeItem ( _this . _keyY ) ;
} , 10 ) ;
}
else {
resolve ( ) ;
removeItem ( _this . _keyY ) ;
}
} ;
fn ( ) ;
} ) ;
} ;
return LockUtils ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Pair = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Pair ( first , second ) {
this . first = first ;
this . second = second ;
}
Pair . prototype . clear = function ( ) {
this . first = this . second = null ;
} ;
Pair . prototype . equals = function ( other ) {
return this . first == other . first && this . second == other . second ;
} ;
return Pair ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var RectangleExt = ( function ( ) {
2020-07-01 16:55:10 +08:00
function RectangleExt ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
RectangleExt . union = function ( first , point ) {
var rect = new Rectangle ( point . x , point . y , 0 , 0 ) ;
2020-07-09 14:16:10 +08:00
var rectResult = first . union ( rect ) ;
return new Rectangle ( rectResult . x , rectResult . y , rectResult . width , rectResult . height ) ;
2020-07-01 16:55:10 +08:00
} ;
return RectangleExt ;
} ( ) ) ;
var Triangulator = ( function ( ) {
function Triangulator ( ) {
this . triangleIndices = [ ] ;
this . _triPrev = new Array ( 12 ) ;
this . _triNext = new Array ( 12 ) ;
}
Triangulator . prototype . triangulate = function ( points , arePointsCCW ) {
if ( arePointsCCW === void 0 ) { arePointsCCW = true ; }
var count = points . length ;
this . initialize ( count ) ;
var iterations = 0 ;
var index = 0 ;
while ( count > 3 && iterations < 500 ) {
iterations ++ ;
var isEar = true ;
var a = points [ this . _triPrev [ index ] ] ;
var b = points [ index ] ;
var c = points [ this . _triNext [ index ] ] ;
if ( Vector2Ext . isTriangleCCW ( a , b , c ) ) {
var k = this . _triNext [ this . _triNext [ index ] ] ;
do {
if ( Triangulator . testPointTriangle ( points [ k ] , a , b , c ) ) {
isEar = false ;
break ;
}
k = this . _triNext [ k ] ;
} while ( k != this . _triPrev [ index ] ) ;
}
else {
isEar = false ;
}
if ( isEar ) {
this . triangleIndices . push ( this . _triPrev [ index ] ) ;
this . triangleIndices . push ( index ) ;
this . triangleIndices . push ( this . _triNext [ index ] ) ;
this . _triNext [ this . _triPrev [ index ] ] = this . _triNext [ index ] ;
this . _triPrev [ this . _triNext [ index ] ] = this . _triPrev [ index ] ;
count -- ;
index = this . _triPrev [ index ] ;
}
else {
index = this . _triNext [ index ] ;
}
}
2020-06-10 08:57:17 +08:00
this . triangleIndices . push ( this . _triPrev [ index ] ) ;
this . triangleIndices . push ( index ) ;
this . triangleIndices . push ( this . _triNext [ index ] ) ;
2020-07-01 16:55:10 +08:00
if ( ! arePointsCCW )
this . triangleIndices . reverse ( ) ;
} ;
Triangulator . prototype . initialize = function ( count ) {
this . triangleIndices . length = 0 ;
if ( this . _triNext . length < count ) {
this . _triNext . reverse ( ) ;
this . _triNext = new Array ( Math . max ( this . _triNext . length * 2 , count ) ) ;
}
if ( this . _triPrev . length < count ) {
this . _triPrev . reverse ( ) ;
this . _triPrev = new Array ( Math . max ( this . _triPrev . length * 2 , count ) ) ;
}
for ( var i = 0 ; i < count ; i ++ ) {
this . _triPrev [ i ] = i - 1 ;
this . _triNext [ i ] = i + 1 ;
}
this . _triPrev [ 0 ] = count - 1 ;
this . _triNext [ count - 1 ] = 0 ;
} ;
Triangulator . testPointTriangle = function ( point , a , b , c ) {
if ( Vector2Ext . cross ( Vector2 . subtract ( point , a ) , Vector2 . subtract ( b , a ) ) < 0 )
return false ;
if ( Vector2Ext . cross ( Vector2 . subtract ( point , b ) , Vector2 . subtract ( c , b ) ) < 0 )
return false ;
if ( Vector2Ext . cross ( Vector2 . subtract ( point , c ) , Vector2 . subtract ( a , c ) ) < 0 )
return false ;
return true ;
} ;
return Triangulator ;
} ( ) ) ;
2020-07-01 06:57:39 +00:00
var Vector2Ext = ( function ( ) {
2020-07-01 16:55:10 +08:00
function Vector2Ext ( ) {
2020-07-01 06:57:33 +00:00
}
2020-07-01 16:55:10 +08:00
Vector2Ext . isTriangleCCW = function ( a , center , c ) {
return this . cross ( Vector2 . subtract ( center , a ) , Vector2 . subtract ( c , center ) ) < 0 ;
} ;
Vector2Ext . cross = function ( u , v ) {
return u . y * v . x - u . x * v . y ;
} ;
Vector2Ext . perpendicular = function ( first , second ) {
return new Vector2 ( - 1 * ( second . y - first . y ) , second . x - first . x ) ;
} ;
Vector2Ext . normalize = function ( vec ) {
var magnitude = Math . sqrt ( ( vec . x * vec . x ) + ( vec . y * vec . y ) ) ;
if ( magnitude > MathHelper . Epsilon ) {
vec = Vector2 . divide ( vec , new Vector2 ( magnitude ) ) ;
}
else {
vec . x = vec . y = 0 ;
}
return vec ;
} ;
Vector2Ext . transformA = function ( sourceArray , sourceIndex , matrix , destinationArray , destinationIndex , length ) {
for ( var i = 0 ; i < length ; i ++ ) {
var position = sourceArray [ sourceIndex + i ] ;
var destination = destinationArray [ destinationIndex + i ] ;
destination . x = ( position . x * matrix . m11 ) + ( position . y * matrix . m21 ) + matrix . m31 ;
destination . y = ( position . x * matrix . m12 ) + ( position . y * matrix . m22 ) + matrix . m32 ;
destinationArray [ destinationIndex + i ] = destination ;
}
} ;
Vector2Ext . transformR = function ( position , matrix ) {
var x = ( position . x * matrix . m11 ) + ( position . y * matrix . m21 ) + matrix . m31 ;
var y = ( position . x * matrix . m12 ) + ( position . y * matrix . m22 ) + matrix . m32 ;
return new Vector2 ( x , y ) ;
} ;
Vector2Ext . transform = function ( sourceArray , matrix , destinationArray ) {
this . transformA ( sourceArray , 0 , matrix , destinationArray , 0 , sourceArray . length ) ;
} ;
Vector2Ext . round = function ( vec ) {
return new Vector2 ( Math . round ( vec . x ) , Math . round ( vec . y ) ) ;
} ;
return Vector2Ext ;
} ( ) ) ;
2020-07-12 14:51:20 +08:00
var Layout = ( function ( ) {
function Layout ( ) {
this . clientArea = new Rectangle ( 0 , 0 , SceneManager . stage . stageWidth , SceneManager . stage . stageHeight ) ;
this . safeArea = this . clientArea ;
}
Layout . prototype . place = function ( size , horizontalMargin , verticalMargine , alignment ) {
var rc = new Rectangle ( 0 , 0 , size . x , size . y ) ;
if ( ( alignment & Alignment . left ) != 0 ) {
rc . x = this . clientArea . x + ( this . clientArea . width * horizontalMargin ) ;
}
else if ( ( alignment & Alignment . right ) != 0 ) {
rc . x = this . clientArea . x + ( this . clientArea . width * ( 1 - horizontalMargin ) ) - rc . width ;
}
else if ( ( alignment & Alignment . horizontalCenter ) != 0 ) {
rc . x = this . clientArea . x + ( this . clientArea . width - rc . width ) / 2 + ( horizontalMargin * this . clientArea . width ) ;
}
else {
}
if ( ( alignment & Alignment . top ) != 0 ) {
rc . y = this . clientArea . y + ( this . clientArea . height * verticalMargine ) ;
}
else if ( ( alignment & Alignment . bottom ) != 0 ) {
rc . y = this . clientArea . y + ( this . clientArea . height * ( 1 - verticalMargine ) ) - rc . height ;
}
else if ( ( alignment & Alignment . verticalCenter ) != 0 ) {
rc . y = this . clientArea . y + ( this . clientArea . height - rc . height ) / 2 + ( verticalMargine * this . clientArea . height ) ;
}
else {
}
if ( rc . left < this . safeArea . left )
rc . x = this . safeArea . left ;
if ( rc . right > this . safeArea . right )
rc . x = this . safeArea . right - rc . width ;
if ( rc . top < this . safeArea . top )
rc . y = this . safeArea . top ;
if ( rc . bottom > this . safeArea . bottom )
rc . y = this . safeArea . bottom - rc . height ;
return rc ;
} ;
return Layout ;
} ( ) ) ;
var Alignment ;
( function ( Alignment ) {
Alignment [ Alignment [ "none" ] = 0 ] = "none" ;
Alignment [ Alignment [ "left" ] = 1 ] = "left" ;
Alignment [ Alignment [ "right" ] = 2 ] = "right" ;
Alignment [ Alignment [ "horizontalCenter" ] = 4 ] = "horizontalCenter" ;
Alignment [ Alignment [ "top" ] = 8 ] = "top" ;
Alignment [ Alignment [ "bottom" ] = 16 ] = "bottom" ;
Alignment [ Alignment [ "verticalCenter" ] = 32 ] = "verticalCenter" ;
Alignment [ Alignment [ "topLeft" ] = 9 ] = "topLeft" ;
Alignment [ Alignment [ "topRight" ] = 10 ] = "topRight" ;
Alignment [ Alignment [ "topCenter" ] = 12 ] = "topCenter" ;
Alignment [ Alignment [ "bottomLeft" ] = 17 ] = "bottomLeft" ;
Alignment [ Alignment [ "bottomRight" ] = 18 ] = "bottomRight" ;
Alignment [ Alignment [ "bottomCenter" ] = 20 ] = "bottomCenter" ;
Alignment [ Alignment [ "centerLeft" ] = 33 ] = "centerLeft" ;
Alignment [ Alignment [ "centerRight" ] = 34 ] = "centerRight" ;
Alignment [ Alignment [ "center" ] = 36 ] = "center" ;
} ) ( Alignment || ( Alignment = { } ) ) ;
var stopwatch ;
( function ( stopwatch ) {
var Stopwatch = ( function ( ) {
function Stopwatch ( getSystemTime ) {
if ( getSystemTime === void 0 ) { getSystemTime = _defaultSystemTimeGetter ; }
this . getSystemTime = getSystemTime ;
this . _stopDuration = 0 ;
this . _completeSlices = [ ] ;
}
Stopwatch . prototype . getState = function ( ) {
if ( this . _startSystemTime === undefined ) {
return State . IDLE ;
}
else if ( this . _stopSystemTime === undefined ) {
return State . RUNNING ;
}
else {
return State . STOPPED ;
}
} ;
Stopwatch . prototype . isIdle = function ( ) {
return this . getState ( ) === State . IDLE ;
} ;
Stopwatch . prototype . isRunning = function ( ) {
return this . getState ( ) === State . RUNNING ;
} ;
Stopwatch . prototype . isStopped = function ( ) {
return this . getState ( ) === State . STOPPED ;
} ;
Stopwatch . prototype . slice = function ( ) {
return this . recordPendingSlice ( ) ;
} ;
Stopwatch . prototype . getCompletedSlices = function ( ) {
return Array . from ( this . _completeSlices ) ;
} ;
Stopwatch . prototype . getCompletedAndPendingSlices = function ( ) {
return this . _completeSlices . concat ( [ this . getPendingSlice ( ) ] ) ;
} ;
Stopwatch . prototype . getPendingSlice = function ( ) {
return this . calculatePendingSlice ( ) ;
} ;
Stopwatch . prototype . getTime = function ( ) {
return this . caculateStopwatchTime ( ) ;
} ;
Stopwatch . prototype . calculatePendingSlice = function ( endStopwatchTime ) {
if ( this . _pendingSliceStartStopwatchTime === undefined ) {
return Object . freeze ( { startTime : 0 , endTime : 0 , duration : 0 } ) ;
}
if ( endStopwatchTime === undefined ) {
endStopwatchTime = this . getTime ( ) ;
}
return Object . freeze ( {
startTime : this . _pendingSliceStartStopwatchTime ,
endTime : endStopwatchTime ,
duration : endStopwatchTime - this . _pendingSliceStartStopwatchTime
} ) ;
} ;
Stopwatch . prototype . caculateStopwatchTime = function ( endSystemTime ) {
if ( this . _startSystemTime === undefined )
return 0 ;
if ( endSystemTime === undefined )
endSystemTime = this . getSystemTimeOfCurrentStopwatchTime ( ) ;
return endSystemTime - this . _startSystemTime - this . _stopDuration ;
} ;
Stopwatch . prototype . getSystemTimeOfCurrentStopwatchTime = function ( ) {
return this . _stopSystemTime === undefined ? this . getSystemTime ( ) : this . _stopSystemTime ;
} ;
Stopwatch . prototype . reset = function ( ) {
this . _startSystemTime = this . _pendingSliceStartStopwatchTime = this . _stopSystemTime = undefined ;
this . _stopDuration = 0 ;
this . _completeSlices = [ ] ;
} ;
Stopwatch . prototype . start = function ( forceReset ) {
if ( forceReset === void 0 ) { forceReset = false ; }
if ( forceReset ) {
this . reset ( ) ;
}
if ( this . _stopSystemTime !== undefined ) {
var systemNow = this . getSystemTime ( ) ;
var stopDuration = systemNow - this . _stopSystemTime ;
this . _stopDuration += stopDuration ;
this . _stopSystemTime = undefined ;
}
else if ( this . _startSystemTime === undefined ) {
var systemNow = this . getSystemTime ( ) ;
this . _startSystemTime = systemNow ;
this . _pendingSliceStartStopwatchTime = 0 ;
}
} ;
Stopwatch . prototype . stop = function ( recordPendingSlice ) {
if ( recordPendingSlice === void 0 ) { recordPendingSlice = false ; }
if ( this . _startSystemTime === undefined ) {
return 0 ;
}
var systemTimeOfStopwatchTime = this . getSystemTimeOfCurrentStopwatchTime ( ) ;
if ( recordPendingSlice ) {
this . recordPendingSlice ( this . caculateStopwatchTime ( systemTimeOfStopwatchTime ) ) ;
}
this . _stopSystemTime = systemTimeOfStopwatchTime ;
return this . getTime ( ) ;
} ;
Stopwatch . prototype . recordPendingSlice = function ( endStopwatchTime ) {
if ( this . _pendingSliceStartStopwatchTime !== undefined ) {
if ( endStopwatchTime === undefined ) {
endStopwatchTime = this . getTime ( ) ;
}
var slice = this . calculatePendingSlice ( endStopwatchTime ) ;
this . _pendingSliceStartStopwatchTime = slice . endTime ;
this . _completeSlices . push ( slice ) ;
return slice ;
}
else {
return this . calculatePendingSlice ( ) ;
}
} ;
return Stopwatch ;
} ( ) ) ;
stopwatch . Stopwatch = Stopwatch ;
var State ;
( function ( State ) {
State [ "IDLE" ] = "IDLE" ;
State [ "RUNNING" ] = "RUNNING" ;
State [ "STOPPED" ] = "STOPPED" ;
} ) ( State || ( State = { } ) ) ;
function setDefaultSystemTimeGetter ( systemTimeGetter ) {
if ( systemTimeGetter === void 0 ) { systemTimeGetter = Date . now ; }
_defaultSystemTimeGetter = systemTimeGetter ;
}
stopwatch . setDefaultSystemTimeGetter = setDefaultSystemTimeGetter ;
var _defaultSystemTimeGetter = Date . now ;
} ) ( stopwatch || ( stopwatch = { } ) ) ;
var TimeRuler = ( function ( ) {
function TimeRuler ( ) {
this . _frameKey = 'frame' ;
this . _logKey = 'log' ;
this . markers = [ ] ;
this . stopwacth = new stopwatch . Stopwatch ( ) ;
this . _markerNameToIdMap = new Map ( ) ;
this . showLog = false ;
TimeRuler . Instance = this ;
this . _logs = new Array ( 2 ) ;
for ( var i = 0 ; i < this . _logs . length ; ++ i )
this . _logs [ i ] = new FrameLog ( ) ;
this . sampleFrames = this . targetSampleFrames = 1 ;
this . width = SceneManager . stage . stageWidth * 0.8 ;
this . onGraphicsDeviceReset ( ) ;
}
TimeRuler . prototype . onGraphicsDeviceReset = function ( ) {
var layout = new Layout ( ) ;
this . _position = layout . place ( new Vector2 ( this . width , TimeRuler . barHeight ) , 0 , 0.01 , Alignment . bottomCenter ) . location ;
} ;
TimeRuler . prototype . startFrame = function ( ) {
var _this = this ;
var lock = new LockUtils ( this . _frameKey ) ;
lock . lock ( ) . then ( function ( ) {
_this . _updateCount = parseInt ( egret . localStorage . getItem ( _this . _frameKey ) , 10 ) ;
var count = _this . _updateCount ;
count += 1 ;
egret . localStorage . setItem ( _this . _frameKey , count . toString ( ) ) ;
if ( _this . enabled && ( 1 < count && count < TimeRuler . maxSampleFrames ) )
return ;
_this . _prevLog = _this . _logs [ _this . frameCount ++ & 0x1 ] ;
_this . _curLog = _this . _logs [ _this . frameCount & 0x1 ] ;
var endFrameTime = _this . stopwacth . getTime ( ) ;
for ( var barIndex = 0 ; barIndex < _this . _prevLog . bars . length ; ++ barIndex ) {
var prevBar = _this . _prevLog . bars [ barIndex ] ;
var nextBar = _this . _curLog . bars [ barIndex ] ;
for ( var nest = 0 ; nest < prevBar . nestCount ; ++ nest ) {
var markerIdx = prevBar . markerNests [ nest ] ;
prevBar . markers [ markerIdx ] . endTime = endFrameTime ;
nextBar . markerNests [ nest ] = nest ;
nextBar . markers [ nest ] . markerId = prevBar . markers [ markerIdx ] . markerId ;
nextBar . markers [ nest ] . beginTime = 0 ;
nextBar . markers [ nest ] . endTime = - 1 ;
nextBar . markers [ nest ] . color = prevBar . markers [ markerIdx ] . color ;
}
for ( var markerIdx = 0 ; markerIdx < prevBar . markCount ; ++ markerIdx ) {
var duration = prevBar . markers [ markerIdx ] . endTime - prevBar . markers [ markerIdx ] . beginTime ;
var markerId = prevBar . markers [ markerIdx ] . markerId ;
var m = _this . markers [ markerId ] ;
m . logs [ barIndex ] . color = prevBar . markers [ markerIdx ] . color ;
if ( ! m . logs [ barIndex ] . initialized ) {
m . logs [ barIndex ] . min = duration ;
m . logs [ barIndex ] . max = duration ;
m . logs [ barIndex ] . avg = duration ;
m . logs [ barIndex ] . initialized = true ;
}
else {
m . logs [ barIndex ] . min = Math . min ( m . logs [ barIndex ] . min , duration ) ;
m . logs [ barIndex ] . max = Math . min ( m . logs [ barIndex ] . max , duration ) ;
m . logs [ barIndex ] . avg += duration ;
m . logs [ barIndex ] . avg *= 0.5 ;
if ( m . logs [ barIndex ] . samples ++ >= TimeRuler . logSnapDuration ) {
m . logs [ barIndex ] . snapMin = m . logs [ barIndex ] . min ;
m . logs [ barIndex ] . snapMax = m . logs [ barIndex ] . max ;
m . logs [ barIndex ] . snapAvg = m . logs [ barIndex ] . avg ;
m . logs [ barIndex ] . samples = 0 ;
}
}
}
nextBar . markCount = prevBar . nestCount ;
nextBar . nestCount = prevBar . nestCount ;
}
_this . stopwacth . reset ( ) ;
_this . stopwacth . start ( ) ;
} ) ;
} ;
TimeRuler . prototype . beginMark = function ( markerName , color , barIndex ) {
var _this = this ;
if ( barIndex === void 0 ) { barIndex = 0 ; }
var lock = new LockUtils ( this . _frameKey ) ;
lock . lock ( ) . then ( function ( ) {
if ( barIndex < 0 || barIndex >= TimeRuler . maxBars )
throw new Error ( "barIndex argument out of range" ) ;
var bar = _this . _curLog . bars [ barIndex ] ;
if ( bar . markCount >= TimeRuler . maxSamples ) {
throw new Error ( "exceeded sample count. either set larger number to timeruler.maxsaple or lower sample count" ) ;
}
if ( bar . nestCount >= TimeRuler . maxNestCall ) {
throw new Error ( "exceeded nest count. either set larger number to timeruler.maxnestcall or lower nest calls" ) ;
}
var markerId = _this . _markerNameToIdMap . get ( markerName ) ;
if ( ! markerId ) {
markerId = _this . markers . length ;
_this . _markerNameToIdMap . set ( markerName , markerId ) ;
}
bar . markerNests [ bar . nestCount ++ ] = bar . markCount ;
bar . markers [ bar . markCount ] . markerId = markerId ;
bar . markers [ bar . markCount ] . color = color ;
bar . markers [ bar . markCount ] . beginTime = _this . stopwacth . getTime ( ) ;
bar . markers [ bar . markCount ] . endTime = - 1 ;
} ) ;
} ;
TimeRuler . prototype . endMark = function ( markerName , barIndex ) {
var _this = this ;
if ( barIndex === void 0 ) { barIndex = 0 ; }
var lock = new LockUtils ( this . _frameKey ) ;
lock . lock ( ) . then ( function ( ) {
if ( barIndex < 0 || barIndex >= TimeRuler . maxBars )
throw new Error ( "barIndex argument out of range" ) ;
var bar = _this . _curLog . bars [ barIndex ] ;
if ( bar . nestCount <= 0 ) {
throw new Error ( "call beginMark method before calling endMark method" ) ;
}
var markerId = _this . _markerNameToIdMap . get ( markerName ) ;
if ( ! markerId ) {
throw new Error ( "Marker " + markerName + " is not registered. Make sure you specifed same name as you used for beginMark method" ) ;
}
var markerIdx = bar . markerNests [ -- bar . nestCount ] ;
if ( bar . markers [ markerIdx ] . markerId != markerId ) {
throw new Error ( "Incorrect call order of beginMark/endMark method. beginMark(A), beginMark(B), endMark(B), endMark(A) But you can't called it like beginMark(A), beginMark(B), endMark(A), endMark(B)." ) ;
}
bar . markers [ markerIdx ] . endTime = _this . stopwacth . getTime ( ) ;
} ) ;
} ;
TimeRuler . prototype . getAverageTime = function ( barIndex , markerName ) {
if ( barIndex < 0 || barIndex >= TimeRuler . maxBars ) {
throw new Error ( "barIndex argument out of range" ) ;
}
var result = 0 ;
var markerId = this . _markerNameToIdMap . get ( markerName ) ;
if ( markerId ) {
result = this . markers [ markerId ] . logs [ barIndex ] . avg ;
}
return result ;
} ;
TimeRuler . prototype . resetLog = function ( ) {
var _this = this ;
var lock = new LockUtils ( this . _logKey ) ;
lock . lock ( ) . then ( function ( ) {
var count = parseInt ( egret . localStorage . getItem ( _this . _logKey ) , 10 ) ;
count += 1 ;
egret . localStorage . setItem ( _this . _logKey , count . toString ( ) ) ;
_this . markers . forEach ( function ( markerInfo ) {
for ( var i = 0 ; i < markerInfo . logs . length ; ++ i ) {
markerInfo . logs [ i ] . initialized = false ;
markerInfo . logs [ i ] . snapMin = 0 ;
markerInfo . logs [ i ] . snapMax = 0 ;
markerInfo . logs [ i ] . snapAvg = 0 ;
markerInfo . logs [ i ] . min = 0 ;
markerInfo . logs [ i ] . max = 0 ;
markerInfo . logs [ i ] . avg = 0 ;
markerInfo . logs [ i ] . samples = 0 ;
}
} ) ;
} ) ;
} ;
TimeRuler . prototype . render = function ( position , width ) {
if ( position === void 0 ) { position = this . _position ; }
if ( width === void 0 ) { width = this . width ; }
egret . localStorage . setItem ( this . _frameKey , "0" ) ;
if ( ! this . showLog )
return ;
var height = 0 ;
var maxTime = 0 ;
this . _prevLog . bars . forEach ( function ( bar ) {
if ( bar . markCount > 0 ) {
height += TimeRuler . barHeight + TimeRuler . barPadding * 2 ;
maxTime = Math . max ( maxTime , bar . markers [ bar . markCount - 1 ] . endTime ) ;
}
} ) ;
var frameSpan = 1 / 60 * 1000 ;
var sampleSpan = this . sampleFrames * frameSpan ;
if ( maxTime > sampleSpan ) {
this . _frameAdjust = Math . max ( 0 , this . _frameAdjust ) + 1 ;
}
else {
this . _frameAdjust = Math . min ( 0 , this . _frameAdjust ) - 1 ;
}
if ( Math . max ( this . _frameAdjust ) > TimeRuler . autoAdjustDelay ) {
this . sampleFrames = Math . min ( TimeRuler . maxSampleFrames , this . sampleFrames ) ;
this . sampleFrames = Math . max ( this . targetSampleFrames , ( maxTime / frameSpan ) + 1 ) ;
this . _frameAdjust = 0 ;
}
var msToPs = width / sampleSpan ;
var startY = position . y - ( height - TimeRuler . barHeight ) ;
var y = startY ;
} ;
TimeRuler . maxBars = 0 ;
TimeRuler . maxSamples = 256 ;
TimeRuler . maxNestCall = 32 ;
TimeRuler . barHeight = 8 ;
TimeRuler . maxSampleFrames = 4 ;
TimeRuler . logSnapDuration = 120 ;
TimeRuler . barPadding = 2 ;
TimeRuler . autoAdjustDelay = 30 ;
return TimeRuler ;
} ( ) ) ;
var FrameLog = ( function ( ) {
function FrameLog ( ) {
this . bars = new Array ( TimeRuler . maxBars ) ;
for ( var i = 0 ; i < TimeRuler . maxBars ; ++ i )
this . bars [ i ] = new MarkerCollection ( ) ;
}
return FrameLog ;
} ( ) ) ;
var MarkerCollection = ( function ( ) {
function MarkerCollection ( ) {
this . markers = new Array ( TimeRuler . maxSamples ) ;
this . markerNests = new Array ( TimeRuler . maxNestCall ) ;
}
return MarkerCollection ;
} ( ) ) ;
var Marker = ( function ( ) {
function Marker ( ) {
}
return Marker ;
} ( ) ) ;
var MarkerInfo = ( function ( ) {
function MarkerInfo ( name ) {
this . logs = new Array ( TimeRuler . maxBars ) ;
this . name = name ;
}
return MarkerInfo ;
} ( ) ) ;
var MarkerLog = ( function ( ) {
function MarkerLog ( ) {
}
return MarkerLog ;
} ( ) ) ;