/// <summary>
        /// [AddMarkPoint]
        /// MarkPointを追加する
        /// 引数1: MarkPoint
        /// </summary>
        public void AddMarkPoint(BaseMarkPoint point)
        {
            if (allTerritorys.Contains(point))
            {
#if UNITY_EDITOR
                Debug.LogError("Error!! PlayerInfo->AddMarkPoint\n added point");
#endif
                return;
            }

            //追加->Callback->計算予約
            allTerritorys.Add(point);
            changeTerritoryCallback?.Invoke();
            PlayerAndTerritoryManager.instance.ReserveCalucrateTerritory(instanceID);
        }
    /// <summary>
    /// [AIEnd]
    /// 関数が実行登録を解除される際に呼ばれるコールバック関数
    /// 引数1: 通常実行→次回実行する関数, 割り込み実行の場合→現在の通常実行関数, 存在しない場合null
    /// </summary>
    public override void AIEnd(BaseAIFunction nextFunction)
    {
        if (functionState == State.Rushing || functionState == State.Rotation)
        {
            m_animationController.editAnimation.SetTriggerReturnRun();
        }
        else if (functionState == State.Marking)
        {
            m_sePlayer.Stop(m_markingSEIndex);
            m_markingEffect.SetActive(false);
        }

        m_markPoint            = null;
        navMeshAgent.isStopped = false;
        functionState          = State.Null;
    }
示例#3
0
    /// <summary>[Awake]</summary>
    void Awake()
    {
        //Managerにインスタンス追加
        PlayerAndTerritoryManager.instance.AddPlayer(gameObject,
                                                     this, m_playerMaualCollisionAdministrator, m_followPoints);
        //初期ポイントを探す
        GameObject firstPoint = GameObject.Find(m_firstPointName);

        m_instanceID = gameObject.GetInstanceID();

        //マークポイントを取得
        if (firstPoint != null)
        {
            m_firstPoint = firstPoint.GetComponent <BaseMarkPoint>();
        }

        //初期ポイントが見つかった
        if (m_firstPoint != null)
        {
            //PlayerInfo取得
            var playerInfo = PlayerAndTerritoryManager.instance.allPlayers[m_instanceID].playerInfo;
            //コールバック追加
            playerInfo.changeTerritoryCallback += ChangeTerritory;
            //ポイントをリンクさせる
            m_firstPoint.LinkPlayer(gameObject, null);
            //即時計算要請
            PlayerAndTerritoryManager.instance.CalucrateTerritory(playerInfo);
            //Info設定
            m_playerMaualCollisionAdministrator.SetPlayerInfo(playerInfo);

            m_firstPoint.SetLockFirstPoint(true);
            m_isPauseFirstPoint = true;
        }
        else
        {
            //Debug only, エラーログを表示
#if UNITY_EDITOR
            Debug.LogError("Error!! PlayerTerritoryIntermediary->Start\n FirstPoint not found");
#endif
        }
    }
示例#4
0
    /// <summary>
    /// [SetSitAndStay]
    /// おすわり!待て!を設定する
    /// 引数1: Set value
    /// 引数2: Link mark point
    /// </summary>
    public void SetSitAndStay(bool isSet, BaseMarkPoint markPoint)
    {
        if (markPoint == null || isSet == isSitAndStaySelf)
        {
            return;
        }

        isSitAndStaySelf = isSet;
        if (isSet)
        {
            linkMarkPoint = markPoint;
            navMeshAgent.updatePosition = false;
            navMeshAgent.updateRotation = false;
        }
        else
        {
            linkMarkPoint               = null;
            markPoint.isPauseTimer      = false;
            navMeshAgent.updatePosition = true;
            navMeshAgent.updateRotation = true;
            navMeshAgent.Warp(transform.position);
        }
    }
示例#5
0
    /// <summary>
    /// [GoSoStartOfMarking]
    /// マーキング開始命令を指示する
    /// return: 行動実行する場合はtrue, できない場合はfalse
    /// 引数1: 目標マークポイント
    /// </summary>
    public bool GoSoStartOfMarking(BaseMarkPoint markPoint)
    {
        //念の為nullチェック
        if (m_rushingAndMarkingFunction == null)
        {
#if UNITY_EDITOR
            Debug.LogError("Error!! DogAIAgent->GoSoStartOfMarking\n This Rushing And Marking Function == null");
#endif
            return(false);
        }
        else if (markPoint == null)
        {
#if UNITY_EDITOR
            Debug.LogError("Error!! DogAIAgent->GoSoStartOfMarking\n markPoint == null");
#endif
            return(false);
        }
        else if (isLinkMarkPoint ||
                 m_rushingAndMarkingFunction.functionState != DogRushingAndMarking.State.Null)
        {
#if UNITY_EDITOR
            Debug.LogError("Error!! DogAIAgent->GoSoStartOfMarking\n Already running");
#endif
            return(false);
        }

        Vector3 position = transform.position, targetPosition = linkPlayer.transform.position;
        Vector3 direction = (new Vector3(targetPosition.x, 0.0f, targetPosition.z) -
                             new Vector3(position.x, 0.0f, position.z)).normalized;
        float distance   = (targetPosition - position).sqrMagnitude;
        int   instanceID = linkPlayer.GetInstanceID();

        //Raycast, Overlap判定(Player)
        m_raycastHits = Physics.RaycastAll(position, direction, distance, m_playerObeyLayerMask);
        m_colliders   = Physics.OverlapSphere(position, distance, m_playerObeyLayerMask);

        if (linkPlayer != null &&
            (m_raycastHits.ContainsInstanceID(instanceID) | m_colliders.ContainsInstanceID(instanceID)))
        {
            position       = targetPosition;
            targetPosition = markPoint.transform.position;

            direction = (new Vector3(targetPosition.x, 0.0f, targetPosition.z) -
                         new Vector3(position.x, 0.0f, position.z)).normalized;
            distance   = (targetPosition - position).sqrMagnitude;
            instanceID = markPoint.gameObject.GetInstanceID();

            //Raycast, Overlap判定(MarkPoint)
            m_raycastHits = Physics.RaycastAll(position, direction, distance, m_playerObeyMarkPointLayerMask);
            m_colliders   = Physics.OverlapSphere(position, distance, m_playerObeyMarkPointLayerMask);
            if (m_raycastHits.ContainsInstanceID(instanceID) | m_colliders.ContainsInstanceID(instanceID))
            {
                //事前情報入力
                m_rushingAndMarkingFunction.SetAdvanceInformation(markPoint, markPoint.transform.position);
                //関数割り込み実行
                ForceSpecifyFunction(m_rushingAndMarkingFunction);

                return(true);
            }
            else
            {
                return(false);
            }
        }
        else
        {
            return(false);
        }
    }
 /// <summary>
 /// [SetAdvanceInformation]
 /// 実行に必要な事前情報を入力する
 /// 引数1: 目標ポイント
 /// 引数2: ポイントの座標
 /// </summary>
 public void SetAdvanceInformation(BaseMarkPoint markPoint, Vector3 position)
 {
     m_markPoint         = markPoint;
     m_markPointPosition = position;
     m_markPointLayerMask.SetValue(markPoint.gameObject);
 }
 /// <summary>
 /// [SetPoint]
 /// Set MarkPoint
 /// </summary>
 public void SetPoint(BaseMarkPoint markPoint)
 {
     this.markPoint  = markPoint;
     this.instanceID = markPoint != null ? markPoint.pointInstanceID : -1;
 }
 /// <summary>[コンストラクタ]</summary>
 public VisibilityContainer(BaseMarkPoint markPoint)
 {
     this.markPoint            = markPoint;
     this.forwardToPositionDot = 0.0f;
     this.instanceID           = markPoint != null ? markPoint.pointInstanceID : -1;
 }
示例#9
0
 /// <summary>
 /// [RemoveMarkPoint]
 /// BaseMarkPointを登録解除する
 /// 引数1: BaseMarkPoint
 /// </summary>
 public void RemoveMarkPoint(BaseMarkPoint point)
 {
     m_points.Remove(point.pointInstanceID);
 }
示例#10
0
 /// <summary>
 /// [AddMarkPoint]
 /// BaseMarkPointを登録する
 /// 引数1: BaseMarkPoint
 /// </summary>
 public void AddMarkPoint(BaseMarkPoint point)
 {
     m_points.Add(point.pointInstanceID, point);
 }