public void SpawnEnemy(float nrOfCollums, float nrOfRows, string enemyType, int health, int power, int shootTime) { float collum = 30f / nrOfCollums; float row = 18f / nrOfRows; float spaceShipZ = -2f; float distance = 50f; if (enemyType == "LaserEnemy") { currentEnemy = enemy[0]; } else if (enemyType == "RocketEnemy") { currentEnemy = enemy[1]; } else if (enemyType == "FireEnemy") { currentEnemy = enemy[2]; } for (float j = row * 2 + spaceShipZ; j <= 18; j += row) { for (float i = collum / 2; i <= 30; i += collum) { Vector3 enemyCoordonates = new Vector3(i, 0f, j); LaserEnemy Enemy = Instantiate(currentEnemy, new Vector3(i - distance, 0, j), Quaternion.identity).GetComponent <LaserEnemy>(); Enemy.Initialize(health, power, shootTime, enemyCoordonates); enemiesAlive++; enemyinGame.Add(Enemy.gameObject); // new } distance -= 10f; } }
public ChargeAttack(StateMachineClassic sm, IChargeAttack attack, Transform owner, Transform objective, Transform castAttackPoint, LaserEnemy laserInstantiator) : base(sm) { this.attack = attack; this.owner = owner; this.objective = objective; this.castAttackPoint = castAttackPoint; this.laserInstantiator = laserInstantiator; }
private void Update() { if (Input.GetKeyDown(KeyCode.Return)) { for (int i = 0; i < number_of_spawners; i++) { LaserEnemy script = laser_enemies[i].GetComponent <LaserEnemy>(); script.moveToAttackPoint(); } } }
public EnemyBullet[] GetBullets(LaserEnemy host) { float hostRotation = host.RotationDegrees; float hostWidthHalf = host.WidthHalf; var ret = base.GetBullets(); var laserBullet = (LaserEnemyBullet)ret[0]; laserBullet.SpawnPoint = host.transform.position; laserBullet.RotationDegrees = hostRotation; float laserWidthHalf = laserBullet.WidthHalf; float length = hostWidthHalf + laserWidthHalf; Vector3 positionOffset = MathUtil.Vector3AtDegreeAngle(host.RotationDegrees, length); laserBullet.transform.position = host.transform.position + positionOffset; return(ret); }
/// <summary> /// Establece los puntos de aparicion de los enemigos laser basado en las /// dimensiones de la pantalla y la cantidad de enemigos disponibles. /// </summary> void setSpawnPoints() { laser_enemies = new GameObject[number_of_spawners]; int segment = Mathf.RoundToInt(rect_width / number_of_spawners); int mid_point = Mathf.RoundToInt(segment / 2); for (int i = 0; i < number_of_spawners; i++) { laser_enemies[i] = (GameObject)(Instantiate(laser_enemy_prefab)); LaserEnemy script = laser_enemies[i].GetComponent <LaserEnemy>(); Vector3 pos = new Vector3(mid_point + segment * i, rect_height, 0f); Vector3 new_pos = Camera.main.ScreenToWorldPoint(pos); // Inicializacion de la instancia del enemigo laser script.setSpawnPoint( new_pos, rect_height / 2 + pixel_height_offset, rect_height / screen_height_divider + pixel_height_offset ); } }
/// <summary> /// act on key sets to move player and shoot /// </summary> private void Move() { //For gunSprite Vector2 aimPos = GM.inputM.MouseLocation; Vector2 direction = aimPos - Position2D; direction = Vector2.Normalize(direction); RotationHelper.FaceDirection(gunSprite, direction, DirectionAccuracy.free, 0); gunSprite.Position2D = Position2D + (direction * 15); Vector2 currentPosition = Position2D; //For console if (GM.inputM.KeyPressed(Keys.C)) { debugMode = true; } if (debugMode == true) { GM.textM.Draw(FontBank.arcadePixel, "Debug", GM.screenSize.Left + 175, GM.screenSize.Top + 40, TextAtt.TopLeft); if (GM.inputM.KeyPressed(Keys.F5)) { LaserEnemy laserEnemy = new LaserEnemy(GM.inputM.MouseLocation, false); } if (GM.inputM.KeyPressed(Keys.F12)) { GameSetup.EnemySpawnSystem.Kill(); } } //For dodging Vector3 d = new Vector3(0, 0, 0); if (tiBoostDelay == null || tiBoostDelay.ElapsedSoFar > 0.25f) { if (GM.inputM.KeyDown(MoveLeft)) { d += Vector3.Left; } if (GM.inputM.KeyDown(MoveRight)) { d += Vector3.Right; } if (GM.inputM.KeyDown(Forward)) { d += Vector3.Down; } if (GM.inputM.KeyDown(Backward)) { d += Vector3.Up; } if (d == new Vector3(0, 0, 0)) { RotationHelper.FaceDirection(this, Vector3.Down, DirectionAccuracy.free, 0); } else { RotationHelper.FaceDirection(this, d, DirectionAccuracy.free, 0); RotationHelper.VelocityInCurrentDirection(this, 500, 0); } } //For directionSprite Vector3 dNorm = d; dNorm.Normalize(); RotationHelper.FaceDirection(directionSprite, dNorm, DirectionAccuracy.free, 0); directionSprite.Position = Position + (dNorm * 20); //For firing if ((GM.inputM.KeyDown(Fire) || GM.inputM.MouseLeftButtonHeld()) && GM.eventM.Elapsed(tiFireCooldown)) { //create bullet and pass reference to player and angle new Bullet(this, aimPos, 1500f, 10); } if (GM.inputM.KeyDown(SpecialFire) && (tiSpecialFireCooldown == null || GM.eventM.Elapsed(tiSpecialFireCooldown))) { for (int i = 0; i < 360; i += 5) { Vector3 v3ShootAngle = RotationHelper.MyDirection(this, i); Vector2 v2ShootAngle = new Vector2(v3ShootAngle.X, v3ShootAngle.Y); RotationHelper.Direction2DFromAngle(i, 0); //create bullet and pass reference to player and angle new Bullet(this, Position2D + v2ShootAngle, 750, 50); } for (int i = 0; i < 360; i += 10) { Vector3 v3ShootAngle = RotationHelper.MyDirection(this, i); Vector2 v2ShootAngle = new Vector2(v3ShootAngle.X, v3ShootAngle.Y); RotationHelper.Direction2DFromAngle(i, 0); //create bullet and pass reference to player and angle new Bullet(this, Position2D + v2ShootAngle, 500, 50); } if (tiSpecialFireCooldown == null) { GM.eventM.AddTimer(tiSpecialFireCooldown = new Event(10f, "Special Fire Cooldown")); } } //For boosting if (GM.inputM.KeyPressed(Boost) && (tiBoostDelay == null || GM.eventM.Elapsed(tiBoostDelay)) && d != Vector3.Zero) { if (tiBoostDelay == null) { GM.eventM.AddTimer(tiBoostDelay = new Event(0.5f, "dodge delay")); } //Raycasting to check for collisions and offset to avoid collision //Position += d * 100; //Ray findHits = new Ray(Position, d); Friction = 0f; Velocity += dNorm * 800; invulnerable = true; Wash = Color.LightGreen; } //Resetting dodge delay for displaying if (tiBoostDelay != null && tiBoostDelay.ElapsedSoFar > 0.25f) { Friction = 10f; invulnerable = false; Wash = Color.LimeGreen; } //Locking sequence if (GM.inputM.MouseRightButtonPressed()) { lockSprite.Visible = true; attack = null; float bestDistance = int.MaxValue; foreach (Sprite s in GM.engineM.SpriteList) { if (s is Enemy) { if (attack == null || Vector2.DistanceSquared(aimPos, s.Centre2D) < bestDistance) { attack = s; bestDistance = Vector2.DistanceSquared(aimPos, s.Centre2D); } } } if (attack != null) { lockSprite.Position2D = attack.Position2D; } } if (GM.inputM.MouseRightButtonHeld() && GM.eventM.Elapsed(tiLockingDelay) && attack != null) { GM.eventM.AddEventRaiseOnce(beepCountDown = new Event(0.25f, "Beep Countdown")); float graphicsLockAmount = lockAmount / 4; Color color = new Color(); if (lockAmount < 1) { lockAmount += tiLockingDelay.Interval * 4; lockSprite.RotationAngle = 360 * graphicsLockAmount; color.R = (byte)(250 * lockAmount); color.B = (byte)(255 - color.R); } else { lockSprite.RotationAngle = 0; color.R = (byte)(255); color.B = (byte)(0); } if (GM.eventM.Elapsed(beepCountDown)) { //Beep sound effect } lockSprite.Position2D = attack.Position2D; lockSprite.ScaleBoth = 1.5f + (1 - lockAmount); lockSprite.Wash = color; } if (GM.inputM.MouseRightButtonReleased()) { if (lockAmount >= 1 && (tiAltFireCooldown == null || GM.eventM.Elapsed(tiAltFireCooldown))) { FireMissile(attack); } lockSprite.Visible = false; lockAmount = 0; } }
public LaserEnemyModel(LaserEnemyView view, Transform owner, List <ANode> availableNodes, float speed, List <Transform> patrolWaypoints, bool patrolLoop, Transform objective, float distArroundPlayer, Laser attack, Transform castPoint, LaserEnemy entity) { _view = view; _stateMachine = new StateMachineClassic(); _stateMachine.AddState(new MyPatrolState(_stateMachine, owner, speed, patrolWaypoints, patrolLoop)); _stateMachine.AddState(new MoveNearObjective(_stateMachine, availableNodes, owner, objective, distArroundPlayer, speed)); _stateMachine.AddState(new ChargeAttack(_stateMachine, attack, owner, objective, castPoint, entity)); }