/// <summary>
    /// [HitCircleTerritory]
    /// PlayerのテリトリーエリアとXZ円で当たり判定を行う
    /// 引数1: Player object->GetInstanceID()
    /// 引数2: Circle position
    /// 引数3: Circle radius
    /// </summary>
    public bool HitCircleTerritory(int playerID, Vector3 position, float radius)
    {
        //debug only, invalid key対策
#if UNITY_EDITOR
        if (!m_players.ContainsKey(playerID))
        {
            Debug.LogError("Error!! PlayerAndTerritoryManager->HitCircleTerritory\n ContainsKey(instanceID) == false");
            return(false);
        }
#endif

        return(CollisionTerritory.HitCircleTerritory(
                   m_players[playerID].playerInfo.territorialArea, position, 100.0f, -radius));
    }
Exemplo n.º 2
0
    /// <summary>
    /// [UpdateBasePoint]
    /// BasePointの更新を行う
    /// </summary>
    public void UpdateBasePoint()
    {
        //処理インターバル判断
        if (m_intervalTimer.elapasedTime < m_collisionJudgementInterval)
        {
            return;
        }

        //処理負荷軽減
        Vector3 position = transform.position;
        //ヒットしたPlayerのID
        int hitPlayer = -1;
        //Playerにヒットした回数
        int hitCount = 0;

        //当たり判定ループ
        foreach (var e in PlayerAndTerritoryManager.instance.allPlayers)
        {
            //当たったらID保存、カウンタインクリメント
            if (CollisionTerritory.HitCircleTerritory(e.Value.playerInfo.territorialArea, position, m_collisionRadius))
            {
                hitPlayer = e.Value.playerInfo.instanceID;
                ++hitCount;
            }
        }

        //ヒットしていなかったら解除
        if (hitCount == 0 && isLinked)
        {
            UnlinkPlayer();
        }
        //ヒットしていたら登録
        else if (hitCount == 1 && !isLinked)
        {
            LinkPlayer(hitPlayer);
        }
        //ないだろうけど上書きされたら解除->登録
        else if (linkPlayerID != hitPlayer)
        {
            UnlinkPlayer();
            LinkPlayer(hitPlayer);
        }

        //タイマー再スタート
        m_intervalTimer.Start();
    }