Exemplo n.º 1
0
        /// チェック
        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());
        }
Exemplo n.º 2
0
/// 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;
                }
            }
        }
Exemplo n.º 3
0
/// 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;
            }
        }
Exemplo n.º 4
0
/// 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;
            }
        }
Exemplo n.º 5
0
 /// 破棄
 public void Term()
 {
     if( TrgContainer != null ){
     TrgContainer.Term();
     }
     MoveShape       = null;
     TrgContainer    = null;
 }
Exemplo n.º 6
0
        /// チェック
        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());
        }
Exemplo n.º 7
0
        private float calBestDis;              /// 衝突した距離


/// public メソッド
///---------------------------------------------------------------------------

        /// ラインとの衝突
        public bool Check(DemoGame.GeometryLine moveLine, GameShapeProduct trgShape)
        {
            bool hitFlg = false;

            switch (trgShape.GetShapeType())
            {
            /// 三角形
            case GameShapeProduct.TypeId.Triangles:
                hitFlg = CheckTriangle(moveLine, (ShapeTriangles)trgShape);
                break;

            /// カプセル
            case GameShapeProduct.TypeId.Capsule:
                hitFlg = CheckCapsule(moveLine, (ShapeCapsule)trgShape);
                break;
            }

            return(hitFlg);
        }
Exemplo n.º 8
0
        /// public メソッド
        ///---------------------------------------------------------------------------
        /// ラインとの衝突
        public bool Check( DemoGame.GeometryLine moveLine, GameShapeProduct trgShape )
        {
            bool hitFlg = false;

            switch( trgShape.GetShapeType() ){

            /// 三角形
            case GameShapeProduct.TypeId.Triangles:
            hitFlg = CheckTriangle( moveLine, (ShapeTriangles)trgShape );
            break;

            /// カプセル
            case GameShapeProduct.TypeId.Capsule:
            hitFlg = CheckCapsule( moveLine, (ShapeCapsule)trgShape );
            break;
            }

            return hitFlg;
        }
Exemplo n.º 9
0
 /// 移動対象の形状を登録
 public void SetMoveShape( GameShapeProduct shape )
 {
     MoveShape       = shape;
 }
Exemplo n.º 10
0
 /// 移動対象の形状を登録
 public void SetMoveShape(GameShapeProduct shape)
 {
     MoveShape = shape;
 }