public override void Die() { Destroy(hpBar.gameObject); BaseBehavior deathBehavior = ScriptableObject.CreateInstance <DieBehavior>(); deathBehavior.Init(BehaviorPriority.Vital, null, 0); fsm.CheckAndAddBehavior(deathBehavior); }
// 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); } } } }
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); }
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); }
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); }
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); } } } } }
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); } } } }
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; }
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); } } }