Esempio n. 1
0
    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(); 
        }
    }
Esempio n. 4
0
    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);
     }
 }
Esempio n. 9
0
    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);
        }


        //
    }
Esempio n. 10
0
 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();
     }
 }
Esempio n. 11
0
 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();
     }
 }
Esempio n. 12
0
 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();
     }
 }
Esempio n. 13
0
    public override void ActionUpdate(AI_Base brain, Character_Base character)
    {
        base.ActionUpdate(brain, character);
        float angle = character.Rotate(targetPosition);

        if (angle <= AngleRange)
        {
            ActionFinish();
        }
    }
Esempio n. 14
0
File: Bullet.cs Progetto: pitfon/1
    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);
    }
Esempio n. 15
0
    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);
        }
    }
Esempio n. 16
0
 public override void ActionInterrupt(AI_Base brain, Character_Base character)
 {
     base.ActionInterrupt(brain, character);
     if (isInteracting)
     {
         if (Item)
         {
             Item.InteractEnd(Character, false);
         }
     }
 }
Esempio n. 17
0
 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;
     }
 }
Esempio n. 18
0
    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;
 }
Esempio n. 20
0
    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);
     }
 }
Esempio n. 24
0
    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);
        }
    }
Esempio n. 25
0
    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]);
                    }
                }
            }
        }
    }
Esempio n. 26
0
    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();
    }
Esempio n. 27
0
    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;
    }
Esempio n. 28
0
 public override void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character)
 {
     base.ActionStart(mission, brain, character);
     Check(character);
 }
Esempio n. 29
0
 public override void ActionUpdate(AI_Base brain, Character_Base character)
 {
     base.ActionUpdate(brain, character);
     Check(character);
 }
Esempio n. 30
0
 public virtual void ActionStart(AI_Mission_Base mission, AI_Base brain, Character_Base character)
 {
     Mission = mission;
 }