示例#1
0
    // Update is called once per frame
    protected override void Update()
    {
        if (playerController != null)
        {
            HunterController hc = (HunterController)playerController;
            canSeeTarget   = false;
            targetIsPlayer = false;
            finalDirection = GetDirectionToTargetForMovement();
            if (canSeeTarget && targetIsPlayer && playerController.primaryCooldown.done)
            {
                playerController.AIUsePrimary();
            }
            // Use an else here so the AI doesn't end up using 2 powers in one turn
            else if (playerController.secondaryCooldown.done)
            {
                RaycastHit2D hitTarget = Physics2D.Raycast(playerController.GetPosition(), finalDirection, hc.GetDashDistance(), wallLayerMask);

                // Dash if there is no wall that the AI would crash into
                if (hitTarget.collider == null)
                {
                    // Don't dash if you would overshoot(light) or crash into the target(player)
                    if (!canSeeTarget || (canSeeTarget && distanceToTargetSquared > Mathf.Pow(hc.GetDashDistance(), 2)))
                    {
                        playerController.AIUseSecondary();
                    }
                }
            }

            if (finalDirection.sqrMagnitude > 0.01f)
            {
                playerController.AIMove(finalDirection);
            }
        }
    }
示例#2
0
 void Awake()
 {
     hc = GetComponent<HunterController>();
     if(!photonView.isMine) {
         GetComponent<CharacterMotor>().enabled = false;
     }
 }
示例#3
0
    public WeaponFakeOne(HunterController _hc)
    {
        this.hunterController = _hc;

        this.bulletsInARow = 1;
        this.timeIntervalBetweenBullets = 0f;
    }
示例#4
0
    public WeaponFakeTwo(HunterController _hc)
    {
        this.hunterController = _hc;

        this.bulletsInARow = 200;
        this.timeIntervalBetweenBullets = 0.2f;
    }
示例#5
0
    public void Initiate()
    {
        TheHunter       = Instantiate(HunterPrefab, new Vector3(0f, 3f, 0f), Quaternion.identity);
        TheHunter.Speed = HunterSpeed;

        TheGridManager.GenerateGrid(false);
        hunterVisionGrids = new List <Vector2Int>();
        monsterObjs       = new List <Monster>();

        for (int i = 0; i < InitialMonster; i++)
        {
            SpawnMonster();
        }

        if (HumanControlEnabled)
        {
            GameObject hunterCtlObj = new GameObject("HunterController");
            hunterCtlObj.transform.parent = transform;
            hunterController = hunterCtlObj.AddComponent <HunterController>();
            hunterController.ProjectileDistance = HunterProjectileDistance;
            hunterController.ProjectileSpeed    = HunterProjectileSpeed;
            hunterController.IsEnabled          = HumanControlEnabled;
            hunterController.TheHunter          = TheHunter;
        }

        if (SdkAiEnabled)
        {
            hunterSDK = new HunterSDK <State, StepResponse>(this, SdkHost);
            hunterSDK.Initiate();
            InvokeRepeating("Step", 2.0f, SdkStepInterval);
        }

        initiated = true;
    }
    private void Assign(StartGameEvent e)
    {
        // Handle event here
        for (int i = 0; i < _players.Length; i++)
        {
            NPCController    npcController    = _players[i].GetComponent <NPCController>();
            GhostController  ghostController  = _players[i].GetComponent <GhostController>();
            HunterController hunterController = _players[i].GetComponent <HunterController>();

            if (e.gameMode == GameMode.Practice)
            {
                hunterController.AlwaysRevealed = true;
                ghostController.AlwaysRevealed  = true;
            }

            npcController.enabled    = true;
            hunterController.enabled = false;
            ghostController.enabled  = false;
            int minimumFurnitureCount = Mathf.Max(0, RoomManager.g.RoomCount - 1);
            int maximumFurnitureCount = RoomManager.g.RoomCount;
            npcController.InitFurniturePattern(RoomManager.g.RandomFurnitureList(Random.Range(minimumFurnitureCount, maximumFurnitureCount)));
        }

        int hunterIndex = Random.Range(0, _players.Length);
        int ghostIndex  = Random.Range(0, _players.Length);

        if (ghostIndex == hunterIndex)
        {
            ghostIndex = (hunterIndex + 1) % _players.Length;
        }
        _players[hunterIndex].GetComponent <HunterController>().enabled = true;
        _players[ghostIndex].GetComponent <GhostController>().enabled   = true;
    }
示例#7
0
 private void GhostSound(SmellEvent e)
 {
     // Handle event here
     if (e.IsStart)
     {
         _hunter = e.hunter;
         if (_smellingIsBinary)
         {
             if (e.room == GhostTracker.g.CurrGhostRoom)
             {
                 _audioSource.clip = _ghostPresentSoundClip;
             }
             else
             {
                 _audioSource.clip = _noGhostSoundClip;
             }
         }
         _playing = true;
     }
     else
     {
         _playing = false;
         StopSmellSound();
     }
 }
示例#8
0
    public WeaponFakeThree(HunterController _hc)
    {
        this.hunterController = _hc;

        this.bulletsInARow = 3;
        this.timeIntervalBetweenBullets = 0.1f;
    }
示例#9
0
 void Awake()
 {
     _rigidbody        = GetComponent <Rigidbody> ();
     _ghostController  = GetComponent <GhostController> ();
     _hunterController = GetComponent <HunterController> ();
     _currRoomFinder   = GetComponent <CurrRoomFinder> ();
     _transform        = transform;
 }
示例#10
0
 void OnTriggerEnter(Collider c)
 {
     if(c.tag == "Player") {
         hc = c.gameObject.GetComponent<HunterController>();
         if(hc.photonView.isMine) {
             hc.StartJump(jumpHeight);
             StartCoroutine(hc.AutoStopJump());
         }
     }
 }
示例#11
0
    public override void Update(HunterController hunter)
    {
        m_time += Time.deltaTime;

        // クールダウン終了
        if (m_time >= hunter.CoolTime)
        {
            hunter.ChangeState(new HunterChaseState());
        }
    }
示例#12
0
    public override void OnTriggerStay(Collider other, HunterController hunter)
    {
        GameObject hitObj = other.gameObject;

        // 追いかけ状態だったら捕獲
        if (hitObj.name == "Player")
        {
            hunter.ChangeState(new HunterCaptureState());
        }
    }
示例#13
0
    public void StartSmellInRoomWithHunter(Room room, HunterController character)
    {
        if (CanSmell && !IsSmelling)
        {
            _smellChargeTimer.Stop();
            _smellChargeTimer.Reset();
            _smellProgressTimer.Start();

            Events.g.Raise(new SmellEvent(starting: true, room: room, hunter: character));
        }
    }
示例#14
0
    public override void Update(HunterController hunter)
    {
        m_time += Time.deltaTime;

        // 指定時間毎にルート更新
        if (m_time >= hunter.RouteChangeSpan)
        {
            m_time = 0.0f;
            hunter.NavMeshAgent.SetDestination(hunter.Player.transform.position);
        }
    }
示例#15
0
 private void OnLevelWasLoaded(int level)
 {
     // Get the duck controller script reference
     if (duck == null)
     {
         duck = GameObject.FindGameObjectWithTag("Duck").GetComponent <DuckController>();
     }
     // Get the duck controller script reference
     if (hunter == null)
     {
         hunter = GameObject.FindGameObjectWithTag("Hunter").GetComponent <HunterController>();
     }
 }
示例#16
0
 // Use this for initialization
 void Start()
 {
     // Get the duck controller script reference
     if (duck == null)
     {
         duck = GameObject.FindGameObjectWithTag("Duck").GetComponent <DuckController>();
     }
     // Get the duck controller script reference
     if (hunter == null)
     {
         hunter = GameObject.FindGameObjectWithTag("Hunter").GetComponent <HunterController>();
     }
 }
    public override void Enter(HunterController hunter)
    {
        // コンポーネントの取得
        m_playerMove  = hunter.Player.GetComponent <Movement>();
        m_virusAmount = hunter.Player.GetComponent <VirusAmount>();

        // 追跡を止める
        hunter.NavMeshAgent.SetDestination(hunter.transform.position);

        Vector3 playerPos   = m_playerMove.transform.position;
        Vector3 hunterPos   = hunter.transform.position;
        Vector3 relativePos = playerPos - hunterPos;

        relativePos.y             = 0; //上下方向の回転はしないように制御
        hunter.transform.rotation = Quaternion.LookRotation(relativePos);
    }
    public override void Update(HunterController hunter)
    {
        m_time += Time.deltaTime;

        // プレイヤーを拘束
        m_playerMove.LockMove = true;
        // ウィルスの自動回復を止める
        m_virusAmount.Stop = true;

        // 1フレーム分の減少
        m_virusAmount.DecreaseMaxVirusAmount(hunter.DecreaseMaxAmount * Time.deltaTime);

        // ウィルスを減少しきったら解放
        if (m_time >= hunter.CaptureTime)
        {
            m_playerMove.LockMove = false;
            m_virusAmount.Stop    = false;
            hunter.ChangeState(new HunterCooldownState());
        }
    }
    void Start()
    {
        cameraBounds  = Camera.main.OrthographicBounds();
        startPosition = new Vector3(cameraBounds.max.x, 0, 0);

        hunter   = GameObject.Find("Hunter");
        hunterCt = hunter.GetComponent <HunterController>();

        _gameFinished = false;

        // Obstacles weights
        obstaclesWeights.Add(new KeyValuePair <ObstacleType, int>(ObstacleType.Rocks, 30));
        obstaclesWeights.Add(new KeyValuePair <ObstacleType, int>(ObstacleType.Crate, 30));
        obstaclesWeights.Add(new KeyValuePair <ObstacleType, int>(ObstacleType.Gun, 30));
        obstaclesWeights.Add(new KeyValuePair <ObstacleType, int>(ObstacleType.AnimalCage, 10));



        //InvokeRepeating("NewObstacle", 20.0f, 2f);
    }
 //singleton logic
 void OnEnable()
 {
     instance = this;
 }
 public void setup()
 {
     hunterCtrl = GameObject.FindGameObjectWithTag("Hunter").GetComponent <HunterController>();
     playerCtrl = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>();
 }
示例#22
0
    //private DepthOfField _depthOfFieldEffect;
    public void SetTargets(Transform _target, Transform _hunter)
    {
        this.hunterTargetTransform = _target;
        this.hunterTransform = _hunter;

        cShakeTimes = 0;
        cShake = 0.0f;
        cShakeSpeed = shakeSpeed;

        //_depthOfFieldEffect = gameObject.GetComponent("DepthOfField") as DepthOfField;

        if(hunterTargetTransform == null || hunterTransform == null) {
            Destroy(this);
            return;
        }

        hunterTargetTransform.parent = null;
        camTransform = transform;

        Vector3 angles = camTransform.eulerAngles;
        x = angles.y;
        y = angles.x;

        hunterController = hunterTransform.GetComponent<HunterController>();;
        targetDistance = normalDistance;
        cPos = hunterTransform.position + new Vector3(0, normalHeight, 0);
    }
示例#23
0
    private float m_time = 0.0f;               // 時間

    public override void Enter(HunterController hunter)
    {
    }
示例#24
0
 // 初期化処理
 public abstract void Enter(HunterController hunter);
示例#25
0
 // 更新処理
 public abstract void Update(HunterController hunter);
示例#26
0
 // ヒット判定
 public virtual void OnTriggerStay(Collider other, HunterController hunter)
 {
 }
示例#27
0
    private float m_time = 0.0f;               // 時間

    public override void Enter(HunterController hunter)
    {
        // プレイヤーを追跡
        hunter.NavMeshAgent.SetDestination(hunter.Player.transform.position);
    }
 void OnDisable()
 {
     instance = null;
 }
示例#29
0
 public SmellEvent(bool starting, Room room = null, HunterController hunter = null)
 {
     this.starting = starting;
     this.hunter   = hunter;
     this.room     = room;
 }