void DetectCollisions(GameObject projectile, int layerMask, bool stayActive) { Collider[] hits = Physics.OverlapBox(projectile.GetComponent <Collider>().bounds.center, projectile.GetComponent <Collider>().bounds.extents, projectile.transform.rotation, layerMask); for (int h = 0; (hits != null) && (h < hits.Length); h++) { projectile.SetActive(stayActive); explosion.transform.position = hits[h].gameObject.transform.position; explosion.GetComponent <ParticleSystem>().Emit(10); if (hits[h].gameObject.layer == 1) { KillPlayer(); saucerTime = saucer.activeSelf ? Time.time + (saucer.transform.localScale.x > 0.2f ? 1f : 3f) : saucerTime; // Delay before firing at player. Small saucer waits longer as more accurate. } else if (hits[h].gameObject.layer == 5) { Score(projectile.layer == 6 ? 1000 : 0); KillSaucer(); } else if (hits[h].gameObject.layer >= 2) { if (hits[h].gameObject.layer < 4) { for (int p = 0; p < 2; p++) { asteroids.Add(CreateVectorObject(RandomDirection.ToString(), RandomAsteroidShape, hits[h].gameObject.transform.position, hits[h].gameObject.layer == 2 ? 0.2f : 0.1f, hits[h].gameObject.layer == 2 ? 3 : 4)); // 0.2 = medium size, 0.1 = small asteroids } } Score(projectile.layer == 6 ? (hits[h].gameObject.layer == 2 ? 20 : hits[h].gameObject.layer == 3 ? 50 : 100) : 0); asteroids.Remove(hits[h].gameObject); Destroy(hits[h].gameObject); } } }
public void GetRandomDirection(ref RandomDirection randomDirection) { int someDiraction = Randomyzer.rndAction.Next(0, 3); switch (someDiraction) { case 0: randomDirection = RandomDirection.Left; break; case 1: randomDirection = RandomDirection.Up; break; case 2: randomDirection = RandomDirection.Right; break; case 3: randomDirection = RandomDirection.Down; break; } }
void Start() { gameObject.GetComponent <Camera>().backgroundColor = Color.black; player = CreateVectorObject("Player", playershape, Vector3.zero, 0.2f, 1); playerBody = player.AddComponent <Rigidbody>(); playerBody.useGravity = false; playerBody.constraints = RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ; playerBody.drag = 0.5f; saucer = CreateVectorObject("Saucer", saucershape, Vector3.zero, 0.3f, 5, false); saucerTime = Time.time + 15f;// + Random.value * 30f; for (int i = 0; i < (2 + level * 2); i++) { GameObject asteroid = CreateVectorObject(RandomDirection.ToString(), RandomAsteroidShape, RandomPosition, 0.4f, 2); // 0.4 = Large size asteroids asteroids.Add(asteroid); } bullets[0] = CreateVectorObject("PlayerBullet", bulletshape, Vector3.zero, 0.1f, 6, false); // Bullet 0 is player bullet bullets[1] = CreateVectorObject("SaucerBullet", bulletshape, Vector3.zero, 0.1f, 7, false); // Bullet 1 is saucer bullet for (int i = 0; i < playerLives.Length; i++) { playerLives[i] = CreateVectorObject("Life", playershape, new Vector3(-6 + (i * 0.4f), 4, 0), 0.2f, 0, (i <= lives)); } explosion = new GameObject("Explosion"); explosion.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); explosion.AddComponent <ParticleSystem>().Pause(); explosion.GetComponent <ParticleSystemRenderer>().material = new Material(Shader.Find("Sprites/Default")); ParticleSystem.MainModule main = explosion.GetComponent <ParticleSystem>().main; main.startSize = 0.025f; main.startLifetime = 1f; main.startSpeed = 0.7f; main.scalingMode = ParticleSystemScalingMode.Shape; uiCanvas = new GameObject("UI").AddComponent <Canvas>(); uiCanvas.renderMode = RenderMode.ScreenSpaceOverlay; uiScore = uiCanvas.gameObject.AddComponent <Text>(); uiScore.font = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font; uiScore.fontSize = 50; }
public RandomDirectionTests() { _random = new Mock <IRandom>(); _randomDirection = new RandomDirection(_random.Object); }