public SwarmFireDetails(swarmTargetType _targetType, int[] _fireWeapons, int _firings = 1, float _fireTargetVariance = 0) { this.targetType = _targetType; this.fireWeapons = _fireWeapons; this.fireTargetVariance = _fireTargetVariance; this.firings = _firings; }
public IEnumerator FireProjectile(FireStream fireStream, swarmTargetType targetType, int firings) { if (fireStream.isBeam) { //for beam weapons //first pre-fire beam. Display marker which grows for the fireRate length //after pre-fire, fireBeam GameObject preFirePrefab = Resources.Load("beam_pre_fire_frigate") as GameObject; GameObject newPreFireObj = Instantiate(preFirePrefab) as GameObject; newPreFireObj.GetComponent <SpriteRenderer> ().color = new Color(newPreFireObj.GetComponent <SpriteRenderer> ().color.r, newPreFireObj.GetComponent <SpriteRenderer> ().color.g, newPreFireObj.GetComponent <SpriteRenderer> ().color.b, 0.5f); newPreFireObj.transform.parent = this.transform; newPreFireObj.transform.localPosition = preFirePrefab.transform.position + fireStream.offset; LeanTween.scaleX(newPreFireObj, 8f, fireStream.fireRate); yield return(new WaitForSeconds(fireStream.fireRate)); Destroy(newPreFireObj); GameObject newProjectileObj = Instantiate(fireStream.projectile.prefab) as GameObject; newProjectileObj.transform.parent = this.transform; newProjectileObj.transform.localPosition = newProjectileObj.transform.position + fireStream.offset; Vector3 size = newProjectileObj.GetComponent <Renderer>().bounds.size; yield return(new WaitForSeconds(fireStream.fireRate)); Destroy(newProjectileObj); } else { //for projectiles - missles and bullets for (int i = 1; i <= firings; i++) { GameObject newProjectileObj = Instantiate(fireStream.projectile.prefab) as GameObject; newProjectileObj.transform.position = transform.position + fireStream.offset; newProjectileObj.GetComponent <Projectile> ().angle = fireStream.angleOffset; newProjectileObj.GetComponent <Projectile> ().enemyProjectile = true; newProjectileObj.GetComponent <Projectile> ().targetType = targetType; if (targetType == swarmTargetType.atPlayer) { Vector3 playerTarget = computeFireTarget(fireStream.offset); newProjectileObj.GetComponent <Projectile> ().dumbTarget = playerTarget; } if (fireStream.spread > 0f) { newProjectileObj.GetComponent <Projectile> ().angle = fireStream.angleOffset + 45 + Random.Range(-fireStream.spread, fireStream.spread); } yield return(new WaitForSeconds(fireStream.fireRate)); } } }
private static List <SwarmPathAction> Circle(float moveSpeed, float moveVariance, swarmTargetType targetType) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); /* * actions.Add ( * new SwarmPathAction (new SwarmMoveDetails ( * new Vector3(-4f,5,0) * , moveSpeed, moveVariance)) * ); */ Vector3[] bezierVectors = new Vector3[4]; bezierVectors [0] = new Vector3(-4, 5, 0); //StartPoint bezierVectors [1] = new Vector3(4, 1, 0); //EndControl bezierVectors [2] = new Vector3(-4, 1, 0); //StartControl bezierVectors [3] = new Vector3(4, 5, 0); //EndPoint actions.Add( new SwarmPathAction(new SwarmMoveDetails( bezierVectors , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); bezierVectors = new Vector3[4]; bezierVectors [0] = new Vector3(4, 5, 0); bezierVectors [1] = new Vector3(-4, 9, 0); bezierVectors [2] = new Vector3(4, 9, 0); bezierVectors [3] = new Vector3(-4, 5, 0); actions.Add( new SwarmPathAction(new SwarmMoveDetails( bezierVectors , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); return(actions); }
private static List <SwarmPathAction> Diamond(float moveSpeed, float moveVariance, swarmTargetType targetType) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-4f, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(0, 0, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(4f, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(0, 9, 0) , moveSpeed, moveVariance)) ); return(actions); }
public static Swarm GenerateSwarmWithShape(shipType type, int size, float moveSpeed, float moveVariance, float spawnVariance, swarmTargetType targetType, swarmActionShape shape) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); List <Object> enemies = new List <Object> (); Object parent = null; Vector3 start = new Vector3(-7, 11, 0); switch (shape) { case swarmActionShape.figureEight: actions = FigureEight(moveSpeed, moveVariance, targetType); break; case swarmActionShape.diamond: actions = Diamond(moveSpeed, moveVariance, targetType); break; case swarmActionShape.circle: actions = Circle(moveSpeed, moveVariance, targetType); break; case swarmActionShape.laces: actions = Laces(moveSpeed, moveVariance, targetType); break; case swarmActionShape.arcswoop: actions = ArcSwoop(moveSpeed, moveVariance, targetType); break; } //check for errors, incompatabailities: foreach (SwarmPathAction action in actions) { if (action.moveDetails != null) { if (action.moveDetails.moveActionType == swarmMoveActionType.bezier && action.moveDetails.moveTargetVariance != 0) { // throw new System.ArgumentException("Swarm Path includes a bezier curve with non-zero moveTargetVariance"); } } } for (int i = 0; i < size; i++) { enemies.Add( Resources.Load(type.ToString()) ); } if (enemies.Count == 1) { enemies.Add( Resources.Load(shipType.dummy.ToString()) ); parent = enemies[1]; } return(new Swarm(enemies, actions, start, spawnVariance, parent)); }
private static List <SwarmPathAction> FigureEight(float moveSpeed, float moveVariance, swarmTargetType targetType) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-4f, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-2f, 2.5f, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(0, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(2, 7.5f, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(4, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(2, 2.5f, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(0, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-2f, 7.5f, 0) , moveSpeed, moveVariance)) ); return(actions); }
private static List <SwarmPathAction> Laces(float moveSpeed, float moveVariance, swarmTargetType targetType) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-4f, 9, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(4f, 8, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-3f, 7, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(3f, 6, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-2f, 5, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(2f, 4, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-1f, 3, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(1f, 2, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(0, 1, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmFireDetails( targetType , new int[1] { 0 }, 1)) ); return(actions); }
private static List <SwarmPathAction> ArcSwoop(float moveSpeed, float moveVariance, swarmTargetType targetType) { List <SwarmPathAction> actions = new List <SwarmPathAction> (); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-4f, 9, 0) , moveSpeed, moveVariance)) ); actions.Add( new SwarmPathAction(new SwarmMoveDetails( new Vector3(-4f, 7, 0) , moveSpeed, moveVariance)) ); Vector3[] bezierVectors = new Vector3[4]; bezierVectors [0] = new Vector3(-4, 7, 0); bezierVectors [1] = new Vector3(4, 9, 0); bezierVectors [2] = new Vector3(-4, 5, 0); bezierVectors [3] = new Vector3(4, 7, 0); actions.Add( new SwarmPathAction(new SwarmMoveDetails( bezierVectors , moveSpeed, moveVariance)) ); bezierVectors = new Vector3[4]; bezierVectors [0] = new Vector3(4, 7, 0); bezierVectors [1] = new Vector3(-4, 0, 0); bezierVectors [2] = new Vector3(4, 0, 0); bezierVectors [3] = new Vector3(-4, 7, 0); actions.Add( new SwarmPathAction(new SwarmMoveDetails( bezierVectors , moveSpeed, moveVariance)) ); return(actions); }