private void OnSeen(VisionTarget target) { if (exclama_prefab) { Instantiate(exclama_prefab, transform); } }
void Update() { state_timer += Time.deltaTime; DetectVisionTarget(); DetectTouchVisionTarget(); if (state == EnemyLOSState.Alert) { if (seen_character == null || !seen_character.CanBeSeen()) { seen_character = null; ChangeState(EnemyLOSState.Patrol); return; } Vector3 targ = seen_character.transform.position; enemy.FaceToward(targ); if (state_timer > detect_time) { if (enemy_follow && seen_character.CanBeSeen()) { ChangeState(EnemyLOSState.Chase); enemy_follow.target = seen_character.gameObject; if (onDetectTarget != null) { onDetectTarget.Invoke(seen_character); } } else { ChangeState(EnemyLOSState.Patrol); } } } if (state == EnemyLOSState.Chase) { if (seen_character == null) { ChangeState(EnemyLOSState.Patrol); return; } if (state_timer > follow_time) { if (!seen_character.CanBeSeen() || !CanSeeObject(seen_character.gameObject)) { ChangeState(EnemyLOSState.Patrol); } } } }
public void ChangeState(EnemyLOSState state) { this.state = state; state_timer = 0f; if (state == EnemyLOSState.Patrol) { seen_character = null; } if (enemy_patrol) { enemy_patrol.enabled = (state == EnemyLOSState.Patrol); } if (enemy_follow) { enemy_follow.enabled = (state == EnemyLOSState.Chase); } }
public void DetectTouchVisionTarget() { //Detect character touch foreach (VisionTarget character in VisionTarget.GetAll()) { if (character == seen_character) { continue; } if (CanTouchObject(character.gameObject)) { seen_character = character; ChangeState(EnemyLOSState.Alert); if (onSeeTarget != null) { onSeeTarget.Invoke(seen_character); } } } }