/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット private void setScrapedMovePos(GameActorCollManager collMgr, DemoGame.GeometryLine moveLine) { /// 衝突あり if (collMgr.CheckCollHit()) { /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj(0); GameShapeProduct trgShape = trgObj.GetCollisionShape(moveType, collMgr.TrgContainer.GetEntryShapeId(0)); switch (trgShape.GetShapeType()) { /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle(collMgr, moveLine, (ShapeTriangles)trgShape); break; /// カプセル case GameShapeProduct.TypeId.Capsule: calCollPointMove.Check(moveLine, trgShape); nextPos = calCollPointMove.MovePos; break; } } }
/// チェック public bool Check( GameActorCollManager collMgr, DemoGame.GeometryLine moveMoveLine ) { collMgr.StartCollision(); for( int i=0; i<collMgr.TrgContainer.Num; i++ ){ GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj( i ); for( int x=0; x<trgObj.GetCollisionShapeMax(moveType); x++ ){ GameShapeProduct trgShape = trgObj.GetCollisionShape( moveType, x ); /// 衝突 if( calCollPointMove.Check( moveMoveLine, trgShape ) ){ collMgr.SetCollParam( i, x, calCollPointMove.BestId, calCollPointMove.BestDis ); } } } /// 衝突座標をセット setScrapedMovePos( collMgr, moveMoveLine ); /// 衝突した return collMgr.CheckCollHit(); }
/// チェック public bool Check(GameActorCollManager collMgr, DemoGame.GeometryLine moveMoveLine) { collMgr.StartCollision(); for (int i = 0; i < collMgr.TrgContainer.Num; i++) { GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj(i); for (int x = 0; x < trgObj.GetCollisionShapeMax(moveType); x++) { GameShapeProduct trgShape = trgObj.GetCollisionShape(moveType, x); /// 衝突 if (calCollPointMove.Check(moveMoveLine, trgShape)) { collMgr.SetCollParam(i, x, calCollPointMove.BestId, calCollPointMove.BestDis); } } } /// 衝突座標をセット setScrapedMovePos(collMgr, moveMoveLine); /// 衝突した return(collMgr.CheckCollHit()); }
/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット private void setScrapedMovePos(GameActorCollManager collMgr, Vector3 movePos) { /// 衝突あり if (collMgr.CheckCollHit()) { /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj(0); GameShapeProduct trgShape = trgObj.GetCollisionShape(moveType, collMgr.TrgContainer.GetEntryShapeId(0)); switch (trgShape.GetShapeType()) { /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle(collMgr, movePos, (ShapeTriangles)trgShape); break; /// カプセル case GameShapeProduct.TypeId.Capsule: calCollSphMove.Check(moveMoveCap, (ShapeCapsule)trgShape); nextPos = calCollSphMove.MovePos; break; } } /// 衝突無し else { nextPos = movePos; } }
/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット public void setScrapedMovePos(GameActorCollManager collMgr, Vector3 movePos) { /// 衝突あり if (collMgr.CheckCollHit()) { /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj(0); GameShapeProduct trgShape = trgObj.GetCollisionShape(moveType, collMgr.TrgContainer.GetEntryShapeId(0)); switch (trgShape.GetShapeType()) { /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle(collMgr, movePos, (ShapeTriangles)trgShape); break; } } /// 衝突無し else { nextPos = movePos; ResetGroudParam(); } /// Y軸はマイナスまで行かない if (nextPos.Y < 0.0f) { nextPos.Y = 0.0f; } }
/// チェック public bool Check(GameActorCollManager collMgr, Vector3 movePos) { ShapeSphere moveSph = (ShapeSphere)collMgr.MoveShape; moveMoveCap.Set(moveSph.Sphre.Pos, movePos, moveSph.Sphre.R); collMgr.StartCollision(); for (int i = 0; i < collMgr.TrgContainer.Num; i++) { GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj(i); for (int x = 0; x < trgObj.GetCollisionShapeMax(moveType); x++) { GameShapeProduct trgShape = trgObj.GetCollisionShape(moveType, x); bool hitFlg = false; switch (trgShape.GetShapeType()) { /// 三角形 case GameShapeProduct.TypeId.Triangles: hitFlg = calCollSphMove.Check(moveMoveCap, (ShapeTriangles)trgShape); break; /// カプセル case GameShapeProduct.TypeId.Capsule: hitFlg = calCollSphMove.Check(moveMoveCap, (ShapeCapsule)trgShape); break; } /// 衝突 if (hitFlg) { collMgr.SetCollParam(i, x, calCollSphMove.BestId, calCollSphMove.BestDis); if (moveType == Data.CollTypeId.ChMove) { trgObj.deadFlag = true; } } } } /// 衝突後の移動座標をセット setScrapedMovePos(collMgr, movePos); /// 衝突した return(collMgr.CheckCollHit()); }
/// チェック public bool Check( GameActorCollManager collMgr, Vector3 movePos ) { ShapeSphere moveSph = (ShapeSphere)collMgr.MoveShape; moveMoveCap.Set( moveSph.Sphre.Pos, movePos, moveSph.Sphre.R ); collMgr.StartCollision(); for( int i=0; i<collMgr.TrgContainer.Num; i++ ){ GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj( i ); for( int x=0; x<trgObj.GetCollisionShapeMax(moveType); x++ ){ GameShapeProduct trgShape = trgObj.GetCollisionShape( moveType, x ); bool hitFlg = false; switch( trgShape.GetShapeType() ){ /// 三角形 case GameShapeProduct.TypeId.Triangles: hitFlg = calCollSphMove.Check( moveMoveCap, (ShapeTriangles)trgShape ); break; /// カプセル case GameShapeProduct.TypeId.Capsule: hitFlg = calCollSphMove.Check( moveMoveCap, (ShapeCapsule)trgShape ); break; } /// 衝突 if( hitFlg ){ collMgr.SetCollParam( i, x, calCollSphMove.BestId, calCollSphMove.BestDis ); if(moveType == Data.CollTypeId.ChMove){ trgObj.deadFlag = true; } } } } /// 衝突後の移動座標をセット setScrapedMovePos( collMgr, movePos ); /// 衝突した return collMgr.CheckCollHit(); }
/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット private void setScrapedMovePos( GameActorCollManager collMgr, Vector3 movePos ) { /// 衝突あり if( collMgr.CheckCollHit() ){ /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj( 0 ); GameShapeProduct trgShape = trgObj.GetCollisionShape( moveType, collMgr.TrgContainer.GetEntryShapeId( 0 ) ); switch( trgShape.GetShapeType() ){ /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle( collMgr, movePos, (ShapeTriangles)trgShape ); break; /// カプセル case GameShapeProduct.TypeId.Capsule: calCollSphMove.Check( moveMoveCap, (ShapeCapsule)trgShape ); nextPos = calCollSphMove.MovePos; break; } } /// 衝突無し else{ nextPos = movePos; } }
/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット private void setScrapedMovePos( GameActorCollManager collMgr, DemoGame.GeometryLine moveLine ) { /// 衝突あり if( collMgr.CheckCollHit() ){ /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj( 0 ); GameShapeProduct trgShape = trgObj.GetCollisionShape( moveType, collMgr.TrgContainer.GetEntryShapeId( 0 ) ); switch( trgShape.GetShapeType() ){ /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle( collMgr, moveLine, (ShapeTriangles)trgShape ); break; /// カプセル case GameShapeProduct.TypeId.Capsule: calCollPointMove.Check( moveLine, trgShape ); nextPos = calCollPointMove.MovePos; break; } } }
/// private メソッド ///--------------------------------------------------------------------------- /// 衝突後の移動座標をセット public void setScrapedMovePos( GameActorCollManager collMgr, Vector3 movePos ) { /// 衝突あり if( collMgr.CheckCollHit() ){ /// ソート collMgr.SortCollisionTrg(); GameObjProduct trgObj = collMgr.TrgContainer.GetEntryObj( 0 ); GameShapeProduct trgShape = trgObj.GetCollisionShape( moveType, collMgr.TrgContainer.GetEntryShapeId( 0 ) ); switch( trgShape.GetShapeType() ){ /// 三角形 case GameShapeProduct.TypeId.Triangles: setScrapedMovePosTriangle( collMgr, movePos, (ShapeTriangles)trgShape ); break; } } /// 衝突無し else{ nextPos = movePos; ResetGroudParam(); } /// Y軸はマイナスまで行かない if( nextPos.Y < 0.0f ){ nextPos.Y = 0.0f; } }