예제 #1
0
파일: NPC.cs 프로젝트: justdoit7724/RPG
    public override void Die()
    {
        Destroy(hpBar.gameObject);
        BaseBehavior deathBehavior = ScriptableObject.CreateInstance <DieBehavior>();

        deathBehavior.Init(BehaviorPriority.Vital, null, 0);
        fsm.CheckAndAddBehavior(deathBehavior);
    }
예제 #2
0
파일: ESword.cs 프로젝트: justdoit7724/RPG
    // Update is called once per frame
    void Update()
    {
        if (IsDeath() || !isUpdating)
        {
            return;
        }

        hpBar.UpdateBar(curHP, maxHP, transform.position);
        UpdateTarget("Alley", ref target);

        if (target == null)
        {
            if (fsm.CurBehaviorType != Type.GetType("IdleBehavior"))
            {
                BaseBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
                idleBehavior.Init(BehaviorPriority.Basic, null, 0);
                fsm.CheckAndAddBehavior(idleBehavior);
            }
        }
        else
        {
            Vector3 subVec = target.transform.position - transform.position;
            subVec.y = 0;
            if (subVec.sqrMagnitude <= sqrAttRad)
            {
                if (fsm.CurBehaviorType != Type.GetType("AnimEventBehavior"))
                {
                    transform.forward = subVec.normalized;

                    string animTrigger = "";
                    string soundKey    = "";
                    if (UnityEngine.Random.Range(0, 2) == 0)
                    {
                        animTrigger = "att1";
                        soundKey    = "EnemyAtt";
                    }
                    else
                    {
                        animTrigger = "att2";
                        soundKey    = "EnemyAttDouble";
                    }
                    BaseBehavior attBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>();
                    attBehavior.Init(BehaviorPriority.Att, new AnimEventBData(animTrigger, mainSoundPlayer, soundKey, 0.2f), 2.0f);
                    fsm.CheckAndAddBehavior(attBehavior);
                }
            }
            else
            {
                runBehaviorData.dest = target.transform.position;
                if (fsm.CurBehaviorType != Type.GetType("RunBehavior"))
                {
                    BaseBehavior walkBehavior = ScriptableObject.CreateInstance <RunBehavior>();
                    walkBehavior.Init(BehaviorPriority.Basic, runBehaviorData, 0);
                    fsm.CheckAndAddBehavior(walkBehavior);
                }
            }
        }
    }
예제 #3
0
    protected void Add(Type type, System.Object data, BehaviorPriority priority, float lifeTime)
    {
        this.priority = priority;

        BaseBehavior newBehavior = ScriptableObject.CreateInstance(type) as BaseBehavior;

        newBehavior.Init(priority, data, lifeTime);
        behaviors.AddLast(newBehavior);
    }
예제 #4
0
    private void FireBalls()
    {
        BaseBehavior animBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>();

        animBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("ball", mainSoundPlayer, "BossBallAura", 0.5f), 2.0f);
        fsm.DirectAddBehavior(animBehavior);
        IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();

        idleBehavior.Init(BehaviorPriority.Basic, null, 2.0f);
        fsm.DirectAddBehavior(idleBehavior);
    }
예제 #5
0
    private void Run()
    {
        runBehaviorData.dest = movePts[UnityEngine.Random.Range(0, movePts.Length)].transform.position;
        BaseBehavior runBehavior = ScriptableObject.CreateInstance <RunBehavior>();

        runBehavior.Init(BehaviorPriority.Basic, runBehaviorData, 5.0f);
        fsm.DirectAddBehavior(runBehavior);
        BaseBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();

        idleBehavior.Init(BehaviorPriority.Basic, null, 2.0f);
        fsm.DirectAddBehavior(idleBehavior);
    }
예제 #6
0
파일: Golem.cs 프로젝트: justdoit7724/RPG
    private void Update()
    {
        if (IsDeath() || !isUpdating)
        {
            return;
        }

        hpBar.UpdateBar(curHP, maxHP, transform.position);

        if (fsm.CurBehaviorType != Type.GetType("GolemJumpBehavior"))
        {
            UpdateTarget("Enemy", ref target);

            if (target == null)
            {
                if (fsm.CurBehaviorType != Type.GetType("IdleBehavior"))
                {
                    BaseBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
                    idleBehavior.Init(BehaviorPriority.Basic, null, 0);
                    fsm.CheckAndAddBehavior(idleBehavior);
                }
            }
            else
            {
                Vector3 subVec = target.transform.position - transform.position;
                subVec.y = 0;
                if (subVec.sqrMagnitude <= sqrAttRad)
                {
                    if (fsm.CurBehaviorType != Type.GetType("AnimEventBehavior"))
                    {
                        transform.LookAt(target.transform.position, Vector3.up);

                        BaseBehavior att1Behavior = ScriptableObject.CreateInstance <AnimEventBehavior>();
                        att1Behavior.Init(BehaviorPriority.Att, new AnimEventBData("att"), 4.0f);
                        fsm.CheckAndAddBehavior(att1Behavior);
                    }
                }
                else
                {
                    runBehaviorData.dest = target.transform.position;
                    if (fsm.CurBehaviorType != Type.GetType("RunBehavior"))
                    {
                        BaseBehavior walkBehavior = ScriptableObject.CreateInstance <RunBehavior>();
                        walkBehavior.Init(BehaviorPriority.Basic, runBehaviorData, 1.0f);
                        fsm.CheckAndAddBehavior(walkBehavior);
                    }
                }
            }
        }
    }
예제 #7
0
파일: EBow.cs 프로젝트: justdoit7724/RPG
    void Update()
    {
        if (IsDeath() || !isUpdating)
        {
            return;
        }


        hpBar.UpdateBar(curHP, maxHP, transform.position);
        UpdateTarget("Alley", ref target);

        if (target == null)
        {
            if (fsm.CurBehaviorType != Type.GetType("IdleBehavior"))
            {
                BaseBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
                idleBehavior.Init(BehaviorPriority.Basic, null, 0);
                fsm.CheckAndAddBehavior(idleBehavior);
            }
        }
        else
        {
            Vector3 subVec = transform.position - target.transform.position;
            if (subVec.sqrMagnitude <= sqrAttRad)
            {
                if (fsm.CurBehaviorType != Type.GetType("ArrowAttBehavior"))
                {
                    BaseBehavior attBehavior = ScriptableObject.CreateInstance <ArrowAttBehavior>();
                    attBehavior.Init(BehaviorPriority.Att, target.transform, 4.0f);

                    fsm.CheckAndAddBehavior(attBehavior);
                }
            }
            else
            {
                runBehaviorData.dest = target.transform.position;
                if (fsm.CurBehaviorType != Type.GetType("RunBehavior"))
                {
                    BaseBehavior walkBehavior = ScriptableObject.CreateInstance <RunBehavior>();
                    walkBehavior.Init(BehaviorPriority.Basic, runBehaviorData, 0);
                    fsm.CheckAndAddBehavior(walkBehavior);
                }
            }
        }
    }
예제 #8
0
        public override void Init(Actor actor)
        {
            // TODO rework case to inspector select
            switch (behaviorType)
            {
            case BehaviorType.Default:
            case BehaviorType.Warior:
                behavior = new AIMeleeBehavior();
                break;

            case BehaviorType.Range:
                behavior = new AIRangeBehavior();
                break;
            }

            behavior.Init(actor);
            enabled = true;
        }
예제 #9
0
 private void MeleeAttack()
 {
     Collider[] colls = Physics.OverlapSphere(transform.position, attRad, LayerMask.GetMask("Alley"));
     if (colls.Length > 0)
     {
         Vector3 subVec = colls[0].transform.position - transform.position;
         subVec.y = 0;
         if (subVec.sqrMagnitude <= sqrAttRad)
         {
             transform.forward = subVec.normalized;
             BaseBehavior attBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>() as BaseBehavior;
             attBehavior.Init(BehaviorPriority.Att, new AnimEventBData("att"), 2.0f);
             fsm.DirectAddBehavior(attBehavior);
             IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
             idleBehavior.Init(BehaviorPriority.Basic, null, 0.2f);
             fsm.DirectAddBehavior(idleBehavior);
         }
     }
 }