/******************************************************************************* * Copyright 2015 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.mygdx.game.pathfinding; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.physics.bullet.collision.btTriangleRaycastCallback; import com.badlogic.gdx.physics.bullet.linearmath.btVector3; import com.badlogic.gdx.utils.Bits; /** * @author jsjolund */ public class NavMeshRaycastCallback extends btTriangleRaycastCallback { public Vector3 hitNormalLocal = new Vector3(); public float hitFraction = 1; public int partId = -1; public int triangleIndex = -1; private btVector3 tmpSetFrom = new btVector3(); private btVector3 tmpSetTo = new btVector3(); private Bits meshPartIndices; public NavMeshRaycastCallback(Vector3 from, Vector3 to) { super(from, to); } public void clearReport() { hitNormalLocal.setZero(); hitFraction = 1; partId = -1; triangleIndex = -1; } @Override public float reportHit(Vector3 hitNormalLocal, float hitFraction, int partId, int triangleIndex) { if ((meshPartIndices == null || meshPartIndices.get(partId)) && hitFraction < this.hitFraction) { this.hitNormalLocal.set(hitNormalLocal); this.hitFraction = hitFraction; this.partId = partId; this.triangleIndex = triangleIndex; return hitFraction; } return 1; } public void setFrom(Vector3 value) { tmpSetFrom.setValue(value.x, value.y, value.z); super.setFrom(tmpSetFrom); } public void setTo(Vector3 value) { tmpSetTo.setValue(value.x, value.y, value.z); super.setTo(tmpSetTo); } @Override public void dispose() { tmpSetFrom.dispose(); tmpSetTo.dispose(); super.dispose(); } public void setAllowedMeshPartIndices(Bits meshPartIndices) { this.meshPartIndices = meshPartIndices; } }