public DummyAttAnt(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm, float _rotSpeed, ICombatDirector _enemy) : base(myState, _sm) { cd = 5; enemy = _enemy; rotationSpeed = _rotSpeed; }
private void Update() { if (run) { timer += Time.deltaTime; if (timer >= timeToAttack) { timer = 0; CalculateTimer(); if (toAttack.Count > 0) { ICombatDirector enemy = toAttack[Random.Range(0, toAttack.Count)]; enemy.ToAttack(); AddOrRemoveToList(enemy); } if (listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count > 0) { ICombatDirector enemy = item.Value[Random.Range(0, item.Value.Count)]; enemy.ToAttack(); RemoveToAttack(enemy, item.Key); } } } } } }
void AssignPos(ICombatDirector e) { Transform toFollow = GetNearPos(e.CurrentPos(), e.GetDistance()); e.SetTargetPosDir(toFollow); e.SetBool(true); }
public void GetNewNearPos(ICombatDirector e) { Transform pos = e.CurrentTargetPosDir(); positionsToAttack.Add(pos); e.SetTargetPosDir(GetNearPos(e.CurrentPos(), e.GetDistance())); }
public DummyIdleState(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm, Func <bool> _isAttack, Func <Transform> _isTarget, float _disInCom, float _disNormal, float _rotSpeed, ICombatDirector _enemy) : base(myState, _sm) { IsAttack += _isAttack; MyPos += _isTarget; distanceMax = _disNormal; distanceMin = _disInCom; enemy = _enemy; rotationSpeed = _rotSpeed; }
void AssignPos() { ICombatDirector randomEnemy = waitToAttack[Random.Range(0, waitToAttack.Count)]; waitToAttack.Remove(randomEnemy); toAttack.Add(randomEnemy); AssignPos(randomEnemy); randomEnemy.SetBool(true); }
public void AddAwake(ICombatDirector enemy) { if (!initialize) { awakeList.Add(enemy); } else { AddOrRemoveToList(enemy); enemy.SetTarget(head); } }
public void AttackRelease(ICombatDirector e) { if (inAttack.Contains(e)) { positionsToAttack.Add(e.CurrentTargetPosDir()); e.SetBool(false); inAttack.Remove(e); if (waitToAttack.Count > 0) { AssignPos(); } } }
public void AddToAttack(ICombatDirector e, EntityBase target) { if (target == head) { AddOrRemoveToList(e); } else { if (listAttackTarget.ContainsKey(target)) { if (listAttackTarget[target].Count >= maxEnemies) { e.SetTarget(head); AddOrRemoveToList(e); } else { Transform toFollow = GetNearPos(e.CurrentPos(), target); listAttackTarget[target].Add(e); e.SetTargetPosDir(toFollow); e.SetBool(true); } } } if (!run && listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count >= 0) { RunDirector(); return; } } } }
Transform GetNearPos(Vector3 p, float distance, ICombatDirector enemy) { Transform current = null; for (int i = 0; i < positionsToAttack.Count; i++) { if (current == null) { current = positionsToAttack[i]; } else { if (Vector3.Distance(current.position * distance, p) > Vector3.Distance(positionsToAttack[i].position * distance, p)) { current = positionsToAttack[i]; } } } positionsToAttack.Remove(current); return(current); }
public DummyAttackState(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm, float _cd, ICombatDirector _enemy) : base(myState, _sm) { cd = _cd; enemy = _enemy; }
void AddOrRemoveToList(ICombatDirector e) { if (!toAttack.Contains(e) && !waitToAttack.Contains(e)) { if (toAttack.Count + inAttack.Count < maxEnemies) { toAttack.Add(e); AssignPos(e); } else { waitToAttack.Add(e); } } else { if (toAttack.Contains(e)) { toAttack.Remove(e); inAttack.Add(e); } else if (waitToAttack.Contains(e)) { waitToAttack.Remove(e); } else if (inAttack.Contains(e)) { positionsToAttack.Add(e.CurrentTargetPosDir()); e.SetBool(false); inAttack.Remove(e); if (waitToAttack.Count > 0) { AssignPos(); } } } if (!run) { if (toAttack.Count > 0) { RunDirector(); return; } else if (listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count >= 0) { RunDirector(); return; } } } } else { if (listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count >= 0) { return; } } } if (toAttack.Count == 0) { StopDirector(); } } }
public void RemoveToAttack(ICombatDirector e, EntityBase target) { if (toAttack.Contains(e)) { positionsToAttack.Add(e.CurrentTargetPosDir()); e.SetBool(false); toAttack.Remove(e); if (waitToAttack.Count > 0) { AssignPos(); } } else if (waitToAttack.Contains(e)) { waitToAttack.Remove(e); } else if (inAttack.Contains(e)) { positionsToAttack.Add(e.CurrentTargetPosDir()); e.SetBool(false); inAttack.Remove(e); if (waitToAttack.Count > 0) { AssignPos(); } } if (listAttackTarget.ContainsKey(target)) { otherTargetPos[target].Add(e.CurrentTargetPosDir()); listAttackTarget[target].Remove(e); } if (!run) { if (toAttack.Count > 0) { RunDirector(); return; } else if (listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count >= 0) { RunDirector(); return; } } } } else { if (listAttackTarget.Count > 0) { foreach (var item in listAttackTarget) { if (item.Value.Count >= 0) { return; } } } if (toAttack.Count == 0) { StopDirector(); } } }