コード例 #1
0
 /// <summary>何かに衝突しているならtrue</summary>
 public static bool isCollided(MapCharacter aCharacter)
 {
     mCharacter = aCharacter;
     mCollider  = aCharacter.mEntityPhysicsBehaviour.mAttriubteCollider;
     mAttribute = aCharacter.mEntityPhysicsBehaviour.mAttribute;
     MapPhysics.CollisionType tType;
     RaycastHit[]             tHits = castAttribute(new Vector3(0, 1, 0), 0, out tType);
     mCharacter = null;
     mCollider  = null;
     mAttribute = null;
     return(tType == MapPhysics.CollisionType.collide);
 }
コード例 #2
0
    //<summary>このbehaviourが引数のentityがいる位置に侵入できるか</summary>
    public bool canEnter(EntityPhysicsAttribute aEntityPhysics)
    {
        switch (mAttribute)
        {
        case Attribute.ghost:
            return(true);

        case Attribute.ornament:
        case Attribute.walking:
        case Attribute.floating:
        case Attribute.flying:
            switch (aEntityPhysics.mAttribute)
            {
            case Attribute.ghost:
                return(true);

            case Attribute.ornament:
            case Attribute.walking:
            case Attribute.floating:
            case Attribute.flying:
                return(false);

            case Attribute.pygmy:
                return(true);
            }
            break;

        case Attribute.pygmy:
            switch (aEntityPhysics.mAttribute)
            {
            case Attribute.ghost:
                return(true);

            case Attribute.ornament:
            case Attribute.walking:
            case Attribute.flying:
                return(true);

            case Attribute.pygmy:
                return(false);
            }
            break;
        }
        Debug.LogWarning("EntityPhysicsAttribute : 定義されていない属性の当たり判定「" + mAttribute.ToString() + "」「" + aEntityPhysics.mAttribute.ToString() + "」");
        return(false);
    }
コード例 #3
0
    ///<summary>キャラを移動させる(同フレームでさらに移動可能ならtrue)</summary>
    public static bool moveCharacter(MapCharacter aCharacter)
    {
        if (aCharacter.mMovingData.mDirection == Vector3.zero)
        {
            //移動しない場合
            aCharacter.mMovingData.mRemainingDistance = 0;
            return(false);
        }
        //移動処理前の座標を記録
        aCharacter.mMovingData.mDeltaPrePosition = aCharacter.mMapPosition;
        //最後の移動方向記録
        aCharacter.mMovingData.mLastDirection = aCharacter.mMovingData.mDirection;
        //移動処理で使うデータ収集・記録
        mCharacter     = aCharacter;
        mAttribute     = aCharacter.mEntityPhysicsBehaviour.mAttribute;
        mCollider      = mAttribute.mCollider;
        mDirection     = aCharacter.mMovingData.mDirection.normalized;
        mDeltaDistance = aCharacter.mMovingData.mDeltaDistance;
        if (kMaxDeltaDistance < mDeltaDistance)
        {
            mDeltaDistance = kMaxDeltaDistance;
        }
        mRemainingDistance = mCharacter.mMovingData.mRemainingDistance;

        //移動させる
        MoveResult tResult = moveDelta();

        if (tResult.mCollisionType == MapPhysics.CollisionType.pass)
        {
        }
        else if (tResult.mCollisionType == MapPhysics.CollisionType.collide)
        {
            mCharacter.mMovingData.mRemainingDistance = 0;
            return(false);
        }
        else if (tResult.mCollisionType == MapPhysics.CollisionType.stop)
        {
            mCharacter.mMovingData.mRemainingDistance = 0;
            return(false);
        }
        //残りの移動距離を減算
        mCharacter.mMovingData.mRemainingDistance -= mDeltaDistance;
        return(mCharacter.mMovingData.mRemainingDistance > 0);
    }
コード例 #4
0
 public static CollisionType canCollide(EntityPhysicsAttribute aAttribute1, MapPhysicsAttribute aAttribute2)
 {
     //相手の属性で分岐
     if (aAttribute2 is TileGroundPhysicsAttribute)
     {
         return(aAttribute1.canEnter((TileGroundPhysicsAttribute)aAttribute2) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is SlopeTilePhysicsAttribute)
     {
         return(((SlopeTilePhysicsAttribute)aAttribute2).canBeEntered(aAttribute1.mBehaviour.mMapPosition) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is EntityPhysicsAttribute)
     {
         return(aAttribute1.canEnter((EntityPhysicsAttribute)aAttribute2) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is TriggerPhysicsAttribute)
     {
         return(((TriggerPhysicsAttribute)aAttribute2).canBeEntered(aAttribute1));
     }
     throw new System.Exception("MapPhysics : entityと未定義の属性との衝突判定「" + aAttribute2.GetType().ToString() + "」");
 }
コード例 #5
0
 //<summary>引数のentityがこのtriggerに侵入できるか</summary>
 public MapPhysics.CollisionType canBeEntered(EntityPhysicsAttribute aEntityPhysics)
 {
     return(mTrigger.canCollide(aEntityPhysics.mEntity));
 }