Esempio n. 1
0
    public override void Spawn(bool beActive, Vector3 warppoint)
    {
        base.Spawn(beActive, warppoint);

        NavMeshHit here;
        bool       spawn = false;

        if (NavMesh.SamplePosition(warppoint, out here, 0.5f, NavMesh.AllAreas))
        {
            spawn = true;

            Debug.Log("I tried to spawn and it worked");
        }
        else if (NavMesh.SamplePosition(warppoint, out here, 15f, NavMesh.AllAreas))
        {
            spawn = true;
            Debug.Log("I tried to spawn and it worked kinda");
        }
        else
        {
            Debug.Log("I failed to spawn :C ");
        }

        if (spawn)
        {
            data.isActive = beActive;
            animator.Rebind();
            state    = scp096State.idle;
            currAnim = state;
            agent.Warp(here.position);
        }
    }
Esempio n. 2
0
 // Start is called before the first frame update
 void Start()
 {
     state        = scp096State.idle;
     currAnim     = scp096State.idle;
     mainCamera   = Camera.main;
     agent        = GetComponent <NavMeshAgent>();
     screamSource = GetComponent <AudioSource>();
 }
Esempio n. 3
0
 public override void Event_Spawn(bool instant, Vector3 warppoint)
 {
     base.Event_Spawn(instant, warppoint);
     data.isActive = true;
     agent.Warp(warppoint);
     animator.Rebind();
     state    = scp096State.idle;
     currAnim = state;
     agent.Warp(warppoint);
     isEvent = true;
 }
Esempio n. 4
0
 public override void setData(NPC_Data state)
 {
     base.setData(state);
     teleportTimer = state.npcvalue[valTeleTimer];
     Timer         = state.npcvalue[valTeleTimer];
     Debug.Log("State loaded = " + (scp096State)state.npcvalue[valState]);
     this.state = (scp096State)state.npcvalue[valState];
     if (this.state == scp096State.run)
     {
         animator.Play("scp096_skeleton|scp096_run", -1, 1);
     }
     agent.Warp(state.Pos.toVector3());
 }
Esempio n. 5
0
    public void evWalkTo(Vector3 to)
    {
        if (state == scp096State.idle)
        {
            state = scp096State.patrol;
        }
        else if (state == scp096State.panic)
        {
            state = scp096State.run;
        }

        isEvent = true;
        agent.SetDestination(to);
    }
Esempio n. 6
0
    void NPCEvent()
    {
        switch (state)
        {
        case scp096State.panic:
        {
            agent.ResetPath();
            break;
        }

        case scp096State.idle:
        {
            agent.ResetPath();
            break;
        }

        case scp096State.patrol:
        {
            agent.speed = normalSpeed;
            if (agent.remainingDistance < 0.5)
            {
                state = scp096State.idle;
            }

            break;
        }

        case scp096State.run:
        {
            agent.speed = panicSpeed;

            if (agent.remainingDistance < 0.5)
            {
                Debug.Log("To Event Attack");
                state = scp096State.attack;
            }

            break;
        }
        }

        if (isRota)
        {
            ACT_Rotation();
        }
    }
Esempio n. 7
0
 /// <summary>
 /// Change 096 fake state
 /// </summary>
 /// <param name="newState">state (0 = idle, sitting, patrol, panic, run, attack)</param>
 public void evChangeState(int newState)
 {
     isEvent = true;
     state   = (scp096State)newState;
 }
Esempio n. 8
0
    void NPCUpdate()
    {
        //Current State
        switch (state)
        {
        case scp096State.panic:
        {
            agent.ResetPath();
            break;
        }

        case scp096State.idle:
        {
            agent.ResetPath();
            break;
        }

        case scp096State.patrol:
        {
            agent.speed        = normalSpeed;
            agent.acceleration = accel;
            agent.angularSpeed = turn;
            if (!agent.hasPath || agent.pathStatus == NavMeshPathStatus.PathInvalid)
            {
                agent.SetDestination(getRandomPoint());
            }

            RaycastHit hit;
            if (Physics.Raycast(transform.position + Vector3.up, transform.forward, out hit, 1f, doors))
            {
                hit.transform.gameObject.GetComponent <Object_Door>().ForceOpen(5);
            }

            break;
        }

        case scp096State.run:
        {
            agent.speed        = panicSpeed;
            agent.acceleration = panicAccel;
            agent.angularSpeed = panicTurn;

            if (Time.frameCount % framerate == 0)
            {
                agent.SetDestination(GameController.instance.playercache.transform.position);
            }

            RaycastHit hit;
            if (Physics.Raycast(transform.position + Vector3.up, transform.forward, out hit, 1f, doors))
            {
                hit.transform.gameObject.GetComponent <Object_Door>().ForceOpen(5);
            }

            if (Physics.OverlapSphere(transform.position + transform.forward, 0.5f, playerMask).Length > 0)
            {
                GameController.instance.deathmsg = Localization.GetString("deathStrings", "death_096");
                GameController.instance.playercache.Death(4);
                debugIsTargeting = false;
                state            = scp096State.attack;
                Timer            = 4f;
            }

            break;
        }
        }

        teleportTimer += Time.deltaTime;



        if (debugIsTargeting)
        {
            if (Time.frameCount % framerate == 0)
            {
                playerDis = Vector3.Distance(faceCol.transform.position, GameController.instance.playercache.transform.position);
            }

            if ((state != scp096State.attack && state != scp096State.panic && state != scp096State.run) && teleportTimer > levels[data.npcvalue[0]].timeBeforeTele && playerDis > levels[data.npcvalue[0]].distanceTele)
            {
                Vector3 teleportTo;
                teleportTo = GameController.instance.GetPatrol(GameController.instance.player.transform.position, levels[data.npcvalue[0]].maxTele, levels[data.npcvalue[0]].minTele);
                Spawn(true, teleportTo);
                teleportTimer = 0;
            }

            if (!hasSeen && (Time.frameCount % framerate2 == 0) && Encountered())
            {
                hasSeen = true;
                GameController.instance.npcController.npcLevel(npc.scp096);
            }

            if (playerDis > 30f)
            {
                hasSeen = false;
            }

            //Check if seeing head.
            if ((Time.frameCount % framerate == 0 && state != scp096State.attack && state != scp096State.panic && state != scp096State.run) && OnView())
            {
                state = scp096State.panic;
                Timer = cryTimer;
            }

            if (state == scp096State.panic && !isPanicking)
            {
                isPanicking = true;
                screamSource.Stop();
                GameController.instance.ChangeMusic(panic);
                GameController.instance.PlayHorror(horror, this.transform, npc.none);
                GameController.instance.playercache.CognitoHazard(true);
            }
            if (state == scp096State.run && !isRunning)
            {
                MusicPlayer.instance.ChangeMusic(chaseClip);
                isRunning = true;
                screamSource.Stop();
                screamSource.clip = scream;
                screamSource.Play();
            }
        }

        Timer -= Time.deltaTime;

        //Next State
        if (Timer < 0)
        {
            switch (state)
            {
            case scp096State.idle:
            {
                int chance = Random.Range(0, 100);
                if (chance < 25)
                {
                    state = scp096State.sitting;
                    Timer = Random.Range(10, 30);
                }
                else
                {
                    state = scp096State.patrol;
                    Timer = Random.Range(10, 15);
                    getRandomPoint();
                }
                break;
            }

            case scp096State.patrol:
            case scp096State.sitting:
            {
                state = scp096State.idle;
                Timer = Random.Range(5, 10);
                break;
            }

            case scp096State.panic:
            {
                state = scp096State.run;
                break;
            }

            case scp096State.attack:
            {
                state = scp096State.sitting;
                Timer = 7;
                break;
            }
            }
        }
    }