public virtual void Init(SpriteRenderer renderer, EnemyDeploy deploy) { transform.SetLayer(Layers.Enemy); transform.localScale = Vector3.one * deploy.scale; Deploy = deploy; MainRenderer = renderer; HP = deploy.maxHp; HPMax = HP; _aniStyle = EnemyMoveStyle.Idle; _currPos = transform.position; InitRigid(); if (!string.IsNullOrEmpty(deploy.AIScript)) { AIMoudle = Common.CreateInstance(deploy.AIScript) as AI_Base; if (AIMoudle != null) { AIMoudle.Init(this); } } }
public override void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character) { base.ActionStart(mission, brain, character); agent = character.GetComponent<NavMeshAgent>(); agent.CalculatePath(TargetPosition, path); }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); ResetPathTimer += Time.deltaTime; if (ResetPathTimer >= ResetTimerDuration) { ResetPathTimer = 0; agent.CalculatePath(TargetPosition, path); } foreach (Vector3 p in path.corners) { Debug.DrawLine(p, p + Vector3.up * 5, Color.red, 0.2f); } if (path.corners.Length >= 2) { character.Move(path.corners[1] - character.transform.position); if (Vector3.Distance(character.transform.position, path.corners[1]) <= 0.1f) { agent.CalculatePath(TargetPosition, path); } } else { ActionFinish(); } if (Vector3.Distance(character.transform.position, TargetPosition) <= Distance) { ActionFinish(); } }
void shoot() { anim.SetTrigger("Shot1"); SoundManager.PlaySound(SoundManager.SoundEffects.Gun_Shot); currentBullets -= 1; RaycastHit hit; if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range, enemyBody)) { AI_Base AI = hit.transform.GetComponentInParent <AI_Base>(); if (AI != null && !AI.isDead) { AI.GetHit(); GameObject o = Instantiate(hitEffect, hit.point, hitEffect.transform.rotation); Destroy(o, 2f); } } else if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range, enemyHead)) { AI_Base AI = hit.transform.GetComponentInParent <AI_Base>(); if (AI != null && !AI.isDead) { AI.GetHit(); GameObject o = Instantiate(hitEffect, hit.point, hitEffect.transform.rotation); Destroy(o, 2f); } } StartCoroutine(SoundManager.PlaySound(SoundManager.SoundEffects.Gun_BulletFalling, 0.5f)); }
public virtual void MissionStart(AI_Base brain, Character_Base character) { ownerBrain = brain; ownerCharacter = character; SetUpActions(); ActionStart(); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // * New Method: Set AI Instance //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static public void SetAIInstance(int AI_ID, AI_Base Instance) { if (IsValidArgument(AI_ID)) { ListElementAt(AI_ID).Instance = Instance; } }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // * New Method: Setup New AI //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static public void SetupNewAI(AI_Base AI_Instance) { int ID = GetNewAIID(); // Get New ID from ListSizeCount AI_Holder NewElement = new AI_Holder(AI_Instance, true); // Create New Element for List AddItemToList(NewElement); // Push Element into List SetAI_ID(ID, ID); // Setup AI's ID }
public override void MissionAbort(AI_Base brain, Character_Base character, AI_Mission_Base newMission) { base.MissionAbort(brain, character, newMission); if (TargetItem) { TargetItem.ReleaseSlot(ownerCharacter); } }
protected override void OnHit(GameObject hitObject) { if (hitObject == Instigator) { return; } IDamageable Health = hitObject.GetComponent <IDamageable>(); if (Health != null) { base.OnHit(hitObject); if (Health.GetVulnerability() == DamageType || Health.GetVulnerability() == EDamageType.ALL) { //Health.ApplyDamage(DamageAmount, DamageType, Instigator); } else { AI_Base Enemy = hitObject.GetComponent <AI_Base>(); if (Enemy == null) { return; } //Debug.Log("is Stunning Enemy"); Enemy.MoveToStun(); if (HitFX != null) { Instantiate(HitFX, transform.position, transform.rotation); } //VFX.Play(); if (SFX) { if (SFX.enabled) { SFX.Play(); } } DisableBullet(); } } else { //Debug.Log(hitObject.name); SpawnEffects(); DisableBullet(); //Destroy(gameObject); } // }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); character.Move(TargetPosition - character.transform.position); if (Vector3.Distance(character.transform.position, TargetPosition) <= Distance) { ActionFinish(); } }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); if (character.canAttack()) { character.AttackCommand(TargetTransform.position - Character.transform.position); ActionFinish(); } }
public override void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character) { base.ActionStart(mission, brain, character); if (character.canAttack()) { character.AttackCommand(TargetTransform.position - Character.transform.position); ActionFinish(); } }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); float angle = character.Rotate(targetPosition); if (angle <= AngleRange) { ActionFinish(); } }
protected virtual void OnTriggerEnterListener(Collider other) { AI_Base aiBase = other.GetComponent <AI_Base>(); if (aiBase) { aiBase.GetComponent <Health>().Damage((int)_gun.Damage.CurrentLevel.Value); } Destroy(gameObject); }
private void Start() { ai_base = GetComponent <AI_Base>(); zoneObjects = FindObjectsOfType <SafeZone>(); for (int i = 0; i < zoneObjects.Length; i++) { float distance1 = Vector3.Distance(transform.position, zoneObjects[i].transform.position); distances.Insert(i, distance1); } }
public override void ActionInterrupt(AI_Base brain, Character_Base character) { base.ActionInterrupt(brain, character); if (isInteracting) { if (Item) { Item.InteractEnd(Character, false); } } }
public override void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character) { base.ActionStart(mission, brain, character); if (Item) { Item.InteractStart(character); timer = Duration; isInteracting = true; Behaviour b = character.StartBehaviour(new Behaviour(AnimationName, Duration, BehaviourType.Interact, new float[] {})); b.BehaviourFinishEvent += OnBehaviourFinish; } }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); if (RotateToTransform) { character.Rotate(RotateToTransform.position); } timer -= Time.deltaTime; if (timer <= 0) { ActionFinish(); } }
private void Awake() { for (int i = 0; i < InitialReactionConfig.Length; i++) { ReactionConfigs.Add(InitialReactionConfig[i].stimulus, InitialReactionConfig[i].reaction); } if (brain == null) { brain = GetComponent <AI_Base>(); } if (perception == null) { perception = GetComponentInChildren <AIPerception>(); } perception.NewCharacterEnterEvent += OnNewCharacterEnter; }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); Vector3 TargetPosition = Path[WaypointIndex]; character.Move(TargetPosition - character.transform.position); if (Vector3.Distance(character.transform.position, TargetPosition) <= 1) { WaypointIndex++; if (WaypointIndex >= Path.Length) { ActionFinish(); } } }
public override void MissionUpdate(AI_Base brain, Character_Base character) { base.MissionUpdate(brain, character); float distance = Vector3.Distance(Target.transform.position, character.transform.position); if (distance > SprintDistance) { SetFollowPriority(2); } else if (distance > MoveDistance) { SetFollowPriority(1); } else { SetFollowPriority(0); } }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // * New Method: Swap Elements //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static private void SwapElements(int ElementOne, int ElementTwo) { if (IsValidArgument(ElementOne) && IsValidArgument(ElementTwo)) { AI_Holder HolderElementOne = ListElementAt(ElementOne); AI_Holder HolderElementTwo = ListElementAt(ElementTwo); // Get First Element's Info AI_Base ElementOne_Instance = HolderElementOne.Instance; bool ElementOne_IsAlive = HolderElementOne.IsAlive; // Give ElementTwo's Info to ElementOne HolderElementOne.Instance = HolderElementTwo.Instance; HolderElementOne.IsAlive = HolderElementTwo.IsAlive; // Give ElementOne's Previous Info to ElementTwo HolderElementTwo.Instance = ElementOne_Instance; HolderElementTwo.IsAlive = ElementOne_IsAlive; } }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); if (character.canAttack()) { GameObject g = FindNearestEnemy(); if (g != null) { character.AttackCommand(g.transform.position - Character.transform.position); } } if (FollowTransform != null) { character.Move(FollowTransform.position - character.transform.position); } else { character.Move(Vector3.zero); } }
void SpawnEnemy() { if (currentEnemyCount >= data[dataIndex].maxEnemies) { return; } GameObject SpawnedEnemy; SpawnedEnemy = Instantiate(EnemyToSpawn, GetSpawnPoint(), Quaternion.identity, null); currentEnemyCount++; //set ref to spawner AI_Base Enemy = SpawnedEnemy.GetComponent <AI_Base>(); if (Enemy != null) { Enemy.SetSpawner(this); } }
private void Update() { if (debugMode && Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, mask)) { AI_Base ai = hit.collider.GetComponent <AI_Base>(); if (ai) { Debug.Log("Mission: " + ai.currentMission); for (int i = 0; i < ai.currentMission.ActionList.Count; i++) { Debug.Log("Action: " + ai.currentMission.ActionList[i]); } } } } }
protected override void OnHit(GameObject hitObject) { //base.OnHit(hitObject); Collider[] hitObjects = Physics.OverlapSphere(transform.position, explosionRadius); foreach (Collider hit in hitObjects) { IDamageable Health = hit.gameObject.GetComponent <IDamageable>(); if (Health != null) { Health.ApplyDamage(DamageAmount, DamageType, Instigator); if (Health.GetVulnerability() == DamageType || Health.GetVulnerability() == EDamageType.ALL) { } else { AI_Base Enemy = hit.GetComponent <AI_Base>(); if (Enemy != null) { Enemy.LaunchEnemy(hit.transform.position - transform.position, explosionForce); } } } } if (HitFX != null) { Instantiate(HitFX, transform.position, transform.rotation); } SFX.Play(); CameraShake.Shake(.1f, .4f); DisableBullet(); }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); if (Target == null) { ActionFinish(); } Vector3 Direction = Target.transform.position - Character.transform.position; if (Direction.magnitude <= StopRange) { character.Move(Vector3.zero); if (timer <= 0) { ActionFinish(); } } else { Character.Move(Direction.normalized); } timer -= Time.deltaTime; }
public override void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character) { base.ActionStart(mission, brain, character); Check(character); }
public override void ActionUpdate(AI_Base brain, Character_Base character) { base.ActionUpdate(brain, character); Check(character); }
public virtual void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character) { Mission = mission; }