230 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			230 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | // Recast Navigation for Haxe | ||
|  | // https://github.com/recastnavigation/recastnavigation | ||
|  | 
 | ||
|  | package recast; | ||
|  | 
 | ||
|  | #if hl | ||
|  | typedef Recast = haxe.macro.MacroType<[webidl.Module.build({ idlFile : "Sources/recast/recast.idl", autoGC : false, nativeLib : "recast" })]>; | ||
|  | #else | ||
|  | 
 | ||
|  | @:native('Recast.rcConfig') | ||
|  | extern class RcConfig { | ||
|  | 	public function new():Void; | ||
|  | 
 | ||
|  | 	/// The width of the field along the x-axis. [Limit: >= 0] [Units: vx] | ||
|  | 	public var width:Int; | ||
|  | 
 | ||
|  | 	/// The height of the field along the z-axis. [Limit: >= 0] [Units: vx] | ||
|  | 	public var height:Int; | ||
|  | 	 | ||
|  | 	/// The width/height size of tile's on the xz-plane. [Limit: >= 0] [Units: vx] | ||
|  | 	public var tileSize:Int; | ||
|  | 	 | ||
|  | 	/// The size of the non-navigable border around the heightfield. [Limit: >=0] [Units: vx] | ||
|  | 	public var borderSize:Int; | ||
|  | 
 | ||
|  | 	/// The xz-plane cell size to use for fields. [Limit: > 0] [Units: wu]  | ||
|  | 	public var cs:Float; | ||
|  | 
 | ||
|  | 	/// The y-axis cell size to use for fields. [Limit: > 0] [Units: wu] | ||
|  | 	public var ch:Float; | ||
|  | 
 | ||
|  | 	/// The minimum bounds of the field's AABB. [(x, y, z)] [Units: wu] | ||
|  | 	//public var bmin:haxe.ds.Vector<Float>;  | ||
|  | 
 | ||
|  | 	/// The maximum bounds of the field's AABB. [(x, y, z)] [Units: wu] | ||
|  | 	//public var bmax:haxe.ds.Vector<Float>; | ||
|  | 
 | ||
|  | 	/// The maximum slope that is considered walkable. [Limits: 0 <= value < 90] [Units: Degrees]  | ||
|  | 	public var walkableSlopeAngle:Float; | ||
|  | 
 | ||
|  | 	/// Minimum floor to 'ceiling' height that will still allow the floor area to  | ||
|  | 	/// be considered walkable. [Limit: >= 3] [Units: vx]  | ||
|  | 	public var walkableHeight:Int; | ||
|  | 	 | ||
|  | 	/// Maximum ledge height that is considered to still be traversable. [Limit: >=0] [Units: vx]  | ||
|  | 	public var walkableClimb:Int; | ||
|  | 	 | ||
|  | 	/// The distance to erode/shrink the walkable area of the heightfield away from  | ||
|  | 	/// obstructions.  [Limit: >=0] [Units: vx]  | ||
|  | 	public var walkableRadius:Int; | ||
|  | 	 | ||
|  | 	/// The maximum allowed length for contour edges along the border of the mesh. [Limit: >=0] [Units: vx]  | ||
|  | 	public var maxEdgeLen:Int; | ||
|  | 	 | ||
|  | 	/// The maximum distance a simplfied contour's border edges should deviate  | ||
|  | 	/// the original raw contour. [Limit: >=0] [Units: vx] | ||
|  | 	public var maxSimplificationError:Float; | ||
|  | 	 | ||
|  | 	/// The minimum number of cells allowed to form isolated island areas. [Limit: >=0] [Units: vx]  | ||
|  | 	public var minRegionArea:Int; | ||
|  | 	 | ||
|  | 	/// Any regions with a span count smaller than this value will, if possible,  | ||
|  | 	/// be merged with larger regions. [Limit: >=0] [Units: vx]  | ||
|  | 	public var mergeRegionArea:Int; | ||
|  | 	 | ||
|  | 	/// The maximum number of vertices allowed for polygons generated during the  | ||
|  | 	/// contour to polygon conversion process. [Limit: >= 3]  | ||
|  | 	public var maxVertsPerPoly:Int; | ||
|  | 	 | ||
|  | 	/// Sets the sampling distance to use when generating the detail mesh. | ||
|  | 	/// (For height detail only.) [Limits: 0 or >= 0.9] [Units: wu]  | ||
|  | 	public var detailSampleDist:Float; | ||
|  | 	 | ||
|  | 	/// The maximum distance the detail mesh surface should deviate from heightfield | ||
|  | 	/// data. (For height detail only.) [Limit: >=0] [Units: wu]  | ||
|  | 	public var detailSampleMaxError:Float; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.Vec3') | ||
|  | extern class Vec3 { | ||
|  | 	public function new(x:Float, y:Float, z:Float):Void; | ||
|  | 	public var x:Float; | ||
|  | 	public var y:Float; | ||
|  | 	public var z:Float; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.Triangle') | ||
|  | extern class Triangle { | ||
|  | 	public function new():Void; | ||
|  | 	public function getPoint(n:Int):Vec3; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.DebugNavMesh') | ||
|  | extern class DebugNavMesh { | ||
|  | 	public function new():Void; | ||
|  | 	public function getTriangleCount():Int; | ||
|  | 	public function getTriangle(n:Int):Triangle; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.dtNavMesh') | ||
|  | extern class DtNavMesh { | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.NavmeshData') | ||
|  | extern class NavmeshData { | ||
|  |     public function new():Void; | ||
|  |     public var dataPointer:Dynamic; | ||
|  |     public var size:Int; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.NavPath') | ||
|  | extern class NavPath { | ||
|  |     public function getPointCount():Int; | ||
|  |     public function getPoint(n:Int):Vec3; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.dtObstacleRef') | ||
|  | extern class DtObstacleRef { | ||
|  | 	 | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.dtCrowdAgentParams') | ||
|  | extern class DtCrowdAgentParams { | ||
|  |     public function new():Void; | ||
|  | 	///< Agent radius. [Limit: >= 0] | ||
|  |     public var  radius:Float; | ||
|  | 	///< Agent height. [Limit: > 0] | ||
|  |     public var  height:Float; | ||
|  | 	///< Maximum allowed acceleration. [Limit: >= 0] | ||
|  |     public var  maxAcceleration:Float; | ||
|  | 	///< Maximum allowed speed. [Limit: >= 0] | ||
|  |     public var  maxSpeed:Float; | ||
|  | 
 | ||
|  |     /// Defines how close a collision element must be before it is considered for steering behaviors. [Limits: > 0] | ||
|  |     public var  collisionQueryRange:Float; | ||
|  | 
 | ||
|  | 	///< The path visibility optimization range. [Limit: > 0] | ||
|  |     public var  pathOptimizationRange:Float; | ||
|  | 
 | ||
|  |     /// How aggresive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0] | ||
|  |     public var  separationWeight:Float; | ||
|  | 
 | ||
|  |     /// Flags that impact steering behavior. (See: #UpdateFlags) | ||
|  |     public var updateFlags:Int; | ||
|  | 
 | ||
|  |     /// The index of the avoidance configuration to use for the agent.  | ||
|  |     /// [Limits: 0 <= value <= #DT_CROWD_MAX_OBSTAVOIDANCE_PARAMS] | ||
|  |     public var obstacleAvoidanceType:Int; | ||
|  | 
 | ||
|  |     /// The index of the query filter used by this agent. | ||
|  |     public var queryFilterType:Int; | ||
|  | 
 | ||
|  |     /// User defined data attached to the agent. | ||
|  |     //public var VoidPtr userData; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.NavMesh') | ||
|  | extern class NavMesh { | ||
|  | 	public function new():Void; | ||
|  | 	public function destroy():Void; | ||
|  | 	public function build(positions:haxe.ds.Vector<Float>, positionCount:Int, indices:haxe.ds.Vector<Int>, indexCount:Int, config: RcConfig):Void; | ||
|  | 	public function buildFromNavmeshData(data:NavmeshData):Void; | ||
|  | 	public function getNavmeshData():NavmeshData; | ||
|  | 	public function freeNavmeshData(data:NavmeshData):Void; | ||
|  | 	public function getDebugNavMesh():DebugNavMesh; | ||
|  | 	public function getClosestPoint(position:Vec3):Vec3; | ||
|  | 	public function getRandomPointAround(position:Vec3, maxRadius:Float):Vec3; | ||
|  | 	public function moveAlong(position:Vec3, destination:Vec3):Vec3; | ||
|  | 	public function getNavMesh():DtNavMesh; | ||
|  | 	public function computePath(start:Vec3, end:Vec3):NavPath; | ||
|  | 	public function setDefaultQueryExtent(extent:Vec3):Void; | ||
|  | 	public function getDefaultQueryExtent():Vec3; | ||
|  | 	 | ||
|  | 	public function addCylinderObstacle(position:Vec3, radius:Float, height:Float):DtObstacleRef; | ||
|  | 	public function addBoxObstacle(position:Vec3, extent:Vec3, angle:Float):DtObstacleRef; | ||
|  | 	public function removeObstacle(obstacle:DtObstacleRef):Void; | ||
|  | 	public function update():Void; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.Crowd') | ||
|  | extern class Crowd { | ||
|  |     public function new(maxAgents:Int, maxAgentRadius:Float, nav:DtNavMesh); | ||
|  |     public function destroy():Void; | ||
|  |     public function addAgent(position:Vec3, params:DtCrowdAgentParams):Int; | ||
|  |     public function removeAgent(idx:Int):Void; | ||
|  |     public function update(dt:Float):Void; | ||
|  |     public function getAgentVelocity(idx:Int):Vec3; | ||
|  |     public function getAgentNextTargetPath(idx:Int):Vec3; | ||
|  |     public function getAgentPosition(idx:Int):Vec3; | ||
|  |     public function getAgentState(idx:Int):Int; | ||
|  |     public function overOffmeshConnection(idx:Int):Bool; | ||
|  |     public function agentGoto(idx:Int, destination:Vec3):Void; | ||
|  |     public function agentTeleport(idx:Int, destination:Vec3):Void; | ||
|  |     public function getAgentParameters(idx:Int):DtCrowdAgentParams; | ||
|  |     public function setAgentParameters(idx:Int, params:DtCrowdAgentParams):Void; | ||
|  |     public function setDefaultQueryExtent(extent:Vec3):Void; | ||
|  |     public function getDefaultQueryExtent():Vec3; | ||
|  |     public function getCorners(idx:Int):NavPath; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.RecastConfigHelper') | ||
|  | extern class RecastConfigHelper { | ||
|  | 	public function new():Void; | ||
|  | 	public function setBMAX(config:RcConfig, x: Float, y:Float, z:Float):Void; | ||
|  | 	public function getBMAX(config:RcConfig):Vec3; | ||
|  | 	public function setBMIN(config:RcConfig, x: Float, y:Float, z:Float):Void; | ||
|  | 	public function getBMIN(config:RcConfig):Vec3; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.rcIntArray') | ||
|  | extern class RcIntArray { | ||
|  | 	public function new(num:Int):Void; | ||
|  | 	public function get_raw():Dynamic; | ||
|  | 	public function size():Int; | ||
|  | 	public function at(n:Int):Int; | ||
|  | 	public function set(n:Int, value:Int):Void; | ||
|  | } | ||
|  | 
 | ||
|  | @:native('Recast.rcFloatArray') | ||
|  | extern class RcFloatArray { | ||
|  | 	public function new(num:Int):Void; | ||
|  | 	public function get_raw():Dynamic; | ||
|  | 	public function set_raw(raw:Dynamic):Void; | ||
|  | 	public function size():Int; | ||
|  | 	public function at(n:Int):Float; | ||
|  | 	public function set(n:Int, value:Float):Void; | ||
|  | } | ||
|  | 
 | ||
|  | #end |