protected override void basicAttack1() { colliderList = Physics.OverlapSphere(transform.position, m_rangeToTakeBullet); FlingableRock bullet = null; if (colliderList.Length > 0) { bullet = findBullet(); if (!bullet) { spawnAndFlingBullet(m_launcher, m_attack1ForceUp, m_attack1ForceForward); } else { // GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); // sphere.transform.position = transform.position; // sphere.transform.localScale = new Vector3(1, 1, 1) * m_rangeToTakeBullet; // sphere.GetComponent<SphereCollider>().enabled = false; // UnityEditor.EditorApplication.isPaused = true; bullet.setUser(gameObject); bullet.fling(m_launcher, m_attack1ForceUp, m_attack1ForceForward, false); } } else { spawnAndFlingBullet(m_launcher, m_attack1ForceUp, m_attack1ForceForward); } m_executingAtk1 = true; m_Animator.Play("Attack 01"); m_Animator.CrossFade("Grounded", 1f); }
private void basicAttack1() { AttackLauncher atkLauncher = GetComponent <AttackLauncher>(); Ray ray = atkLauncher.getAimRay(); RaycastHit hit; bool collided = Physics.Raycast(ray, out hit, 5000); BreakableRock breakableRock = null; if (hit.collider) { breakableRock = hit.collider.GetComponentInParent <BreakableRock>(); } if (Physics.Raycast(ray, out hit, 5000)) { if (collided && breakableRock != null) { breakableRock.breakRock(gameObject, GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward); } else { Collider[] colliders = Physics.OverlapSphere(transform.position, m_rangeToTakeBullet); FlingableRock bullet = null; if (colliders.Length > 0) { bullet = findBullet(colliders); if (!bullet) { spawnAndFlingBullet(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward); } else { // GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); // sphere.transform.position = transform.position; // sphere.transform.localScale = new Vector3(1, 1, 1) * m_rangeToTakeBullet; // sphere.GetComponent<SphereCollider>().enabled = false // UnityEditor.EditorApplication.isPaused = true; bullet.setUser(gameObject); myCurrentBullet = bullet; bullet.fling(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward, false); } } else { spawnAndFlingBullet(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward); } } } GetComponent <BasicMovement>().m_Animator.Play("Attack 01"); GetComponent <BasicMovement>().m_Animator.CrossFade("Grounded", 1f); }
public void breakRock(GameObject _user, AttackLauncher _launcher, float _forceUp, float _forceForward) { if (transform.childCount <= 1) { return; } Transform child = transform.GetChild(0); if (!child.name.Contains("Part")) { return; } MeshRenderer childMeshRenderer = child.GetComponent <MeshRenderer>(); float centerRatio = childMeshRenderer.bounds.size.y / (2 * m_size.y); m_boxCollider.center -= new Vector3(0, centerRatio, 0); float sizeRatio = 1 - childMeshRenderer.bounds.size.y / m_size.y; m_boxCollider.size = new Vector3(m_boxCollider.size.x, sizeRatio, m_boxCollider.size.z); m_size -= childMeshRenderer.bounds.size; if (m_pieceList.Count == 0) { return; } Object obj = Instantiate(m_pieceList[0], child.position + Vector3.up * 0.1f, child.rotation); m_pieceList.RemoveAt(0); GameObject gameObject = (GameObject)obj; scaleIt(gameObject); FlingableRock flingableRock = gameObject.GetComponent <FlingableRock>(); Destroy(child.gameObject); flingableRock.setUser(_user); flingableRock.fling(_launcher, _forceUp, _forceForward, true); }
void spawnAndFlingBullet(string _buttonToWatch, float _forceUp, float _forceForward) { Vector3 spawnProjectile = transform.position + transform.forward * m_OffsetForwardEarth; RaycastHit hit; if (Physics.Raycast(spawnProjectile, -Vector3.up, out hit, 50)) { if (m_attackObject.transform.childCount == 0) { return; } Transform child = m_attackObject.transform.GetChild(0); MeshRenderer meshRenderer = child.GetComponent <MeshRenderer>(); spawnProjectile = hit.point - new Vector3(0, meshRenderer.bounds.extents.y, 0); FlingableRock tmpBullet = ((GameObject)Instantiate(m_attackObject, spawnProjectile, Quaternion.identity)).GetComponent <FlingableRock>(); tmpBullet.setUser(m_username); tmpBullet.init(null, _forceUp, _forceForward); } }
// --- private FlingableRock findBullet(Collider[] colliders) { int closerOne = -1; float closerDist = 0; for (int i = 0; i < colliders.Length; ++i) { FlingableRock rock = colliders[i].GetComponent <FlingableRock>(); if (rock != null) { if (rock.m_user != null) { continue; } float distance = Vector3.Distance(transform.position, rock.transform.position); if (distance < m_rangeToTakeBullet && (closerOne == -1 || closerDist > distance)) { closerDist = distance; closerOne = i; } } } if (closerOne == -1) { return(null); } else { FlingableRock flingableRock = colliders[closerOne].GetComponent <FlingableRock>(); if (flingableRock.canRiseInMinTime(0.30f, gameObject, m_attack1ForceUp)) { return(flingableRock); } return(null); } }
private void spawnAndFlingBullet(AttackLauncher _launcher, float _forceUp, float _forceForward) { Vector3 spawnProjectile = transform.position + transform.forward * m_OffsetForwardEarth; RaycastHit hit; if (Physics.Raycast(spawnProjectile, -Vector3.up, out hit, 50)) { if (rockBullet.transform.childCount == 0) { return; } Transform child = rockBullet.transform.GetChild(0); MeshRenderer meshRenderer = child.GetComponent <MeshRenderer>(); spawnProjectile = hit.point - new Vector3(0, meshRenderer.bounds.extents.y, 0); FlingableRock tmpBullet = ((GameObject)Instantiate(rockBullet, spawnProjectile, Quaternion.identity)).GetComponent <FlingableRock>(); tmpBullet.setUser(gameObject); myCurrentBullet = tmpBullet; tmpBullet.init(_launcher, _forceUp, _forceForward); } }
FlingableRock findBullet() { int closerOne = -1; float closerDist = 0; for (int i = 0; i < colliderList.Length; ++i) { FlingableRock rock = colliderList[i].GetComponent <FlingableRock>(); if (rock != null) { if (rock.m_user != null) { continue; } float distance = Vector3.Distance(transform.position, rock.transform.position); if (distance < m_rangeToTakeBullet && (closerOne == -1 || closerDist > distance)) { closerDist = distance; closerOne = i; } } } if (closerOne == -1) { return(null); } else { // FlingableRock flingableRock = colliderList[closerOne].GetComponent<FlingableRock>(); // // if (flingableRock.canRiseInMinTime(0.30f, this)) // return flingableRock; return(null); } }