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); } }
// 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>(); }
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; }
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()); }
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); }
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(); } }
/// <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; }
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; } } } }