public Vector2 GetRandomPos(float x, float y, float range, eAIType aiType = eAIType.Player) { int resultNum = 0; int irange = (int)(range); int srange = irange * irange; int sign = 1; int filter = 0; while (resultNum != 1) { int idivx = 0; int idivy = 0; if (aiType == eAIType.Player) { idivx = resultNum + GameManager.Inst.GetClientRand(-irange, irange) + sign * filter; idivy = resultNum + GameManager.Inst.GetClientRand(-irange, irange) - sign * filter; } else { idivx = resultNum + GameManager.Inst.GetRand(-irange, irange) + sign * filter; idivy = resultNum + GameManager.Inst.GetRand(-irange, irange) - sign * filter; } if (idivx == 0 || idivy == 0) { filter++; continue; } int ix = idivx % irange; int iy = idivy % irange; Vector2 bv = new Vector2(x + ix, y + iy); if (bCanMove((int)bv.x, (int)bv.y)) { filter = 0; resultNum = 1; return(new Vector2((int)bv.x, (int)bv.y)); } else if (filter > srange) { resultNum = 1; return(new Vector2(x, y)); } else { filter++; sign = -sign; } } return(Vector3.zero); }
void AiSetting(eAIType aitype) { GameObject aiObject = new GameObject(); aiObject.name = aitype.ToString(); switch (aitype) { case eAIType.NormalEnemy: { ai = aiObject.AddComponent <NormalEnemy>(); } break; case eAIType.RangeEnemy: { ai = aiObject.AddComponent <RangeEnemy>(); } break; case eAIType.GiantEnemy: { ai = aiObject.AddComponent <GiantEnemy>(); } break; case eAIType.BossEnemy: { ai = aiObject.AddComponent <BossEnemy>(); } break; case eAIType.MiniBossEnemy: { ai = aiObject.AddComponent <MiniBossEnemy>(); } break; } aiObject.transform.SetParent(SelfTransform); }
public static AI SpawnBlock(eAIType eType, float fX, float fZ, int iType) { if(_Pool.Count == 0) { Debug.Log("ERROR: No pooled AI"); return null; } AI pObject = _Pool.First.Value; if(pObject != null) { _Pool.RemoveFirst(); _Active.AddLast(pObject); pObject._Type = eType; pObject._X = fX; pObject._Z = fZ; pObject._Block = iType; pObject.Setup(); return pObject; } return null; }
public static AI SpawnOnPath(eAIType eType, int iPathIndex, float fSpeed, float fStartDelay) { if(_Pool.Count == 0) { Debug.Log("ERROR: No pooled AI"); return null; } AI pObject = _Pool.First.Value; if(pObject != null) { _Pool.RemoveFirst(); _Active.AddLast(pObject); pObject._Type = eType; pObject.Setup(); pObject._Walker.Set(iPathIndex,fSpeed); pObject._HasPath = true; Vector3 vPos = pObject._Walker.Walk(0.0f); pObject._X = vPos.x; pObject._Z = vPos.z; pObject._StartDelay = fStartDelay; return pObject; } return null; }
public static AI Spawn(eAIType eType, float fX, float fZ, float fVX = 0.0f, float fVZ = 0.0f) { if(_Pool.Count == 0) { Debug.Log("ERROR: No pooled AI"); return null; } AI pObject = _Pool.First.Value; if(pObject != null) { _Pool.RemoveFirst(); _Active.AddLast(pObject); pObject._Type = eType; pObject._X = fX; pObject._Z = fZ; pObject._VX = fVX; pObject._VZ = fVZ; pObject.Setup(); pObject._HasPath = false; return pObject; } return null; }