private void SecondaryWeaponControl() { if (secondaryTarget != null) { for (int i = 0; i < secondaryParam.ShootingPoint.Length; i++) { if (secondaryParam.weaponType == WeaponType.Laser) { GameObject muzzle = Instantiate(secondaryParam.weaponObject, secondaryParam.ShootingPoint[i].transform.position, Quaternion.identity) as GameObject; BeamScript script = muzzle.GetComponent <BeamScript>(); muzzle.transform.parent = this.transform; script.Target = secondaryTarget; script.From = secondaryParam.ShootingPoint[i]; script.lifeTime = secondaryParam.lifeTime; script.damage = secondaryParam.damage[secondaryParam.level - 1] + additional_secondaryDamage; } else if (secondaryParam.weaponType == WeaponType.Missile) { GameObject lunch = Instantiate(secondaryParam.weaponObject, secondaryParam.ShootingPoint[i].transform.position, Quaternion.identity) as GameObject; MissileScript script = lunch.GetComponent <MissileScript>(); script.Target = secondaryTarget; script.velocity = secondaryParam.missile_velocity; script.alignSpeed = secondaryParam.missile_alignSpeed; script.damage = secondaryParam.damage[secondaryParam.level - 1] + additional_secondaryDamage; script.lifeTime = secondaryParam.missile_lifeTime; } } secondaryTarget = null; secondaryInterval = secondaryParam.shootingInterval[secondaryParam.level - 1] - additional_secondaryRate; } }
void OnTriggerStay2D(Collider2D collider) { if (collider.tag == "Player") { if (MainScript.Player.FuelLevel < 100) { MainScript.Player.FuelLevel += refuelingSpeed; if (!restSound.isPlaying && !startSound.isPlaying) { restSound.Play(); } } if (MainScript.Player.FuelLevel > 100) { if (!restSound.isPlaying) { restSound.pitch = 1.08f; restSound.Play(); } } } if ((collider.tag == "Missile")) { FuelTank fuelTank = MainScript.fuelTanks.Find(x => x.GameObject.Equals(gameObject)); Missile missile = MainScript.missiles.Find(x => x.GameObject.Equals(collider.gameObject)); MainScript.Player.Points += score; GameObject smallExplosion = GameObject.Instantiate(Resources.Load("Prefabs/SmallExplosionPrefab", typeof(GameObject))) as GameObject; smallExplosion.transform.position = new Vector2(fuelTank.GameObject.transform.position.x, fuelTank.GameObject.transform.position.y); Destroy(smallExplosion, 1); Destroy(fuelTank.GameObject); MainScript.fuelTanks.Remove(fuelTank); MissileScript.CheckTypeOfMissile(ref missile); } }
void OnTriggerEnter2D(Collider2D other) { if (string.Equals(other.gameObject.tag, "jpublic")) { MissileScript scr = other.gameObject.GetComponent <MissileScript> (); if (string.Equals(this.colorString, scr.colorString)) { score += 100; textNameObject.GetComponent <TextNameScript> ().phrase(other.gameObject.GetComponent <MissileScript> ().controlPrefab.GetComponent <HFTGamepad> ().Name); GameObject part = Instantiate(explosion); part.GetComponent <Transform> ().localScale = 0.5f * new Vector3(1, 1, 1); part.GetComponent <Transform> ().position = GetComponent <Transform> ().position; part.GetComponent <PartStartColor> ().c0 = GetComponent <SpriteRenderer> ().color; part.GetComponent <PartStartColor> ().c1 = GetComponent <SpriteRenderer> ().color; part.GetComponent <PartStartColor> ().InitiateColor(); AudioSource asrc = GameObject.Find("Camera").GetComponent <AudioSource> (); if (!asrc.isPlaying) { asrc.clip = sndPoints; asrc.volume = 1f; asrc.Play(); } scr.controlPrefab.GetComponent <PlayerControlToPrefab> ().desactiver(); Destroy(other.gameObject); } } }
public void activer() { actif = true; if (string.Equals(gp.Name, "v")) { objectControlled = VaisseauScene; scrv = VaisseauScene.GetComponent <VaisseauScript> (); move = ShipMove; } else { if (!string.Equals(gp.Name, "nope")) { objectControlled = Instantiate(MissilePrefab); objectControlled.GetComponent <MissileScript> ().controlPrefab = this.gameObject; int i = UnityEngine.Random.Range(0, 5); Vector3 c = selectRandomColor(); c = c / 255; gp.Color = new Color(c.x, c.y, c.z); objectControlled.GetComponentInChildren <SpriteRenderer> ().color = new Color(c.x, c.y, c.z); scrm = objectControlled.GetComponent <MissileScript> (); scrm.colorString = colorString; move = RocketMove; } else { objectControlled = null; scrm = null; scrv = null; move = null; } } }
//================================================================================================ //MISSILE FIRE //================================================================================================ void Missile() { //spawns a clone projectile with a target location Vector3 dir = transform.TransformDirection(Vector3.forward); RaycastHit hit; //NEW TARGET if (Physics.Raycast(transform.position, dir, out hit, maxRange)) { Vector3 offset = new Vector3(0, 0, 0); clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject; target = hit.collider.gameObject;//assigns target missile = (MissileScript)clone.GetComponent(typeof(MissileScript)); missile.SetTarget(target); prevTarget = target; Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F); } //CURRENT TARGET else if (target != null) {// if target not detected but target not null fire Vector3 offset = new Vector3(0, 0, 0); clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject; missile = (MissileScript)clone.GetComponent(typeof(MissileScript)); missile.SetTarget(prevTarget); } }
IEnumerator FireMissiles() { //line.enabled = true; fireMissile = true; while (fireMissile) { //line.material.mainTextureOffset = new Vector2(0, Time.time); if (Time.time >= nextTimeToFireMissile) { //line.SetPosition(0, transform.position); nextTimeToFire = Time.time + 1f / 500; Ray ray = new Ray(transform.position, transform.forward); //RaycastHit hit; Vector3 rot = transform.rotation.eulerAngles; rot = new Vector3(rot.x, rot.y, rot.z); GameObject go = Instantiate(missilePrefab, transform.position - new Vector3(0, 2, 0), Quaternion.Euler(rot)); MissileScript missileScript = go.GetComponent <MissileScript>(); // if(Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, 200f)) // { // //line.SetPosition(1, hit.point); // //// if(hit.transform.gameObject != null) //// { //// missileScript.target = hit.point; //// } // } // else // { // //line.SetPosition(1, ray.GetPoint(200f)); // //missileScript.target = ray.GetPoint(missileRange); // } currCharge -= 20f; if (currCharge <= 0) { currCharge = 0f; fireMissile = false; } } yield return(null); yield return(new WaitForSeconds(0.5f)); } //line.enabled = false; }
public override void OnInspectorGUI() { DrawDefaultInspector(); MissileScript missile = (MissileScript)target; if (GUILayout.Button("Test Launch")) { missile.LaunchAt(BattleManager.instance.AllActors() [0].TileMovement.occupying, true); } }
void Update() { if (GameMgr.Instance.GameState == 1) { return; } if (GameMgr.Instance.GameState == 2) { GameOverScr.SetActive(true); GOMsgText.text = "Survived for " + curTimeSec + " Sec \nEnemies Killed " + GameMgr.Instance.enemiesKilled + "\nEscaped from " + GameMgr.Instance.missleLaunched + " Missiles\n\n Hope enjoyed the game"; return; } curTime += Time.deltaTime; if (curTime >= 1.0f) { curTimeSec++; curTime = 0; UpdateUI(); isMissleLaunched = false; } if (curTimeSec % 2 == 0 && !isMissleLaunched) { isMissleLaunched = true; GameObject missile = GetMissile(); MissileScript ms = missile.GetComponent <MissileScript>() as MissileScript; missile.transform.position = Enemy_02.transform.position + Enemy_02.transform.forward; missile.transform.LookAt(Player_01.transform.position); missile.transform.Rotate(new Vector3(0, 270, 0)); ms.Activate(Enemy_02.transform.forward, 0); GameMgr.Instance.missleLaunched++; } /* * if(curTimeSec % 3 == 0 && !isMissleLaunched) * { * isMissleLaunched = true; * GameObject missile = GetMissile(); * MissileScript ms = missile.GetComponent<MissileScript>() as MissileScript; * missile.transform.position = Enemy_01.transform.position; * missile.transform.LookAt(Player_01.transform.position); * missile.transform.Rotate(new Vector3(0, 270, 0)); * ms.Activate(Enemy_01.transform.forward, 0); * missleLaunched++; * } */ transform.position = new Vector3(Player_01.transform.position.x, transform.position.y, Player_01.transform.position.z); }
public void LaunchMissileAndSetup(GameObject missilePrefab) { rangedAttacking = true; GameObject missileCopy = Instantiate(missilePrefab); missileCopy.transform.position = GetComponent <TileMovement> ().avatar.position; MissileScript missile = missileCopy.GetComponent <MissileScript> (); //this means miss if (lastAttack.resultingEffect == null) { List <ATTile> tiles = lastAttack.TargetActor().TileMovement.occupying.TilesWithinRange(1); missile.LaunchAt(tiles [Random.Range(0, tiles.Count)]); } else { missile.LaunchAt(lastAttack.TargetActor().TileMovement.occupying); } // UIManager.instance.cameraController.LockOn (missile.transform); GenericWeapon unequipped = lastAttack .actor .CharSheet .Unequip(lastAttack.WeaponUsed) as GenericWeapon; missile.OnConnectedWithTarget += (MissileScript self) => { AttackAnimationHitMoment(); rangedAttacking = false; AttackAnimationEnded(); if (lastAttack.TypeChoice.IsRanged() && lastAttack.WeaponUsed.IsThrown()) { self.targetTile.AddItemToGround(unequipped); } //Add item to ground of the last tile hit. }; missile.OnHitBlocker += (MissileScript self, ATTile blocker) => { lastAttack.resultingEffect = null; AttackAnimationHitMoment(); rangedAttacking = false; AttackAnimationEnded(); if (lastAttack.TypeChoice.IsRanged() && lastAttack.WeaponUsed.IsThrown()) { self.previousHitTile.AddItemToGround(unequipped); } //Add item to ground of the player }; lastMissileScript = missile; }
public override void actionOnActive() { if (equipment.getTarget()) { GameObject missile = Instantiate(missileKinetic, shootPoint.transform.position, shootPoint.transform.rotation, shootPoint.transform); MissileScript missileScript = missile.GetComponent <MissileScript>(); missile.transform.parent = null; missile.transform.Rotate(0f, 90f, 0f); missileScript.setOwner(equipment.getOwner()); missileScript.setTarget(equipment.getTarget()); audio.Play(); } }
void OnTriggerEnter2D(Collider2D collider) { if ((collider.tag == "Terrain" || collider.tag == "Finish") && gameObject.name != "SpacePlanePrefab(Clone)") { int rotation = 180; var enemySpeed = MainScript.enemies.Find(x => x.GameObject.Equals(gameObject)).Speed *= -1; gameObject.GetComponent <Rigidbody2D>().velocity = new Vector2(enemySpeed * MainScript.Player.DefaultSpeed, 0); if (enemySpeed < 0 && gameObject.name == "TankPrefab(Clone)") { rotation += rotation; } if (enemySpeed > 0 && gameObject.name == "RedEnemyPrefab(Clone)") { rotation += rotation; } if (enemySpeed > 0 && gameObject.name == "RedEnemyPrefab(Clone)") { rotation += rotation; } gameObject.transform.localRotation = Quaternion.Euler(0, rotation, 0); } if (collider.tag == "Missile" || collider.tag == "Player") { Enemy enemy = MainScript.enemies.Find(x => x.GameObject.Equals(gameObject)); if (collider.tag == "Player") { if (MainScript.Player.CurrentHealth >= 1) { playerHit.GetComponent <AudioSource>().Play(); } enemy.Health = 0f; } else { Missile missile; missile = MainScript.missiles.Find(x => x.GameObject.GetComponent <Collider2D>().Equals(collider)); float damage = missile.Damage; enemy.Health -= damage; MissileScript.CheckTypeOfMissile(ref missile); whiteSprite(); isWhite = true; } if (enemy.Health <= 0) { MainScript.KillEnemy(enemy); } } }
void Update() { if (inRange && GameMgr.Instance.GameState == 0) { nextMissileTime -= Time.deltaTime; if (nextMissileTime < 0) { nextMissileTime = 0.5f; GameObject missile = GetMissile(); MissileScript ms = missile.GetComponent <MissileScript>() as MissileScript; missile.transform.position = new Vector3(transform.position.x, 5, transform.position.z); missile.transform.LookAt(Player_01.transform.position); missile.transform.Rotate(new Vector3(0, 270, 0)); ms.Activate(transform.forward, 1); GameMgr.Instance.missleLaunched++; Debug.Log("missile Launch" + missile.transform.position); } } }
protected void FireMissile() { CameraShaker.Instance.ShakeCamera(2 * cameraShakeShoot, 2f); AudioManager.Instance.SpawnSound("MissileLaunchSound", missileStart.transform, false, false, false, this is PlayerScript ? 0.7f : 0.6f); GameObject missileGO = GameManager.Instance.MissilePool.GetObject(missileStart.position, tower.transform.rotation); MissileScript missile = missileGO.GetComponent <MissileScript>(); if (this is PlayerScript) { if (WaveSpawner.Instance.CurrentWaveTanks.Count > 0) { missile.Init(WaveSpawner.Instance.CurrentWaveTanks[Random.Range(0, WaveSpawner.Instance.CurrentWaveTanks.Count)].GetComponent <TankScript>(), this); } else { missile.Init(null, this); } } else { missile.Init(FindObjectOfType <PlayerScript>(), this); } }
public void FindScript() { Component tempScript = currentObjects[globalIndex].GetComponent(typeof(MonoBehaviour)); if (tempScript.GetType().Equals(typeof(TerroristScript))) { TerroristScript tempTerrorist = (TerroristScript)currentObjects[globalIndex].GetComponent(typeof(TerroristScript)); tempTerrorist.KillToDeath(); } if (tempScript.GetType().Equals(typeof(JungleCommandoScript))) { JungleCommandoScript tempJungle = (JungleCommandoScript)currentObjects[globalIndex].GetComponent(typeof(JungleCommandoScript)); tempJungle.KillToDeath(); } if (tempScript.GetType().Equals(typeof(ZombieScript))) { ZombieScript tempZombie = (ZombieScript)currentObjects[globalIndex].GetComponent(typeof(ZombieScript)); tempZombie.KillToDeath(); } if (tempScript.GetType().Equals(typeof(LightScript))) { LightScript tempLight = (LightScript)currentObjects[globalIndex].GetComponent(typeof(LightScript)); tempLight.KillToDeath(); } if (tempScript.GetType().Equals(typeof(ArmyScript))) { ArmyScript tempArmy = (ArmyScript)currentObjects[globalIndex].GetComponent(typeof(ArmyScript)); tempArmy.KillToDeath(); } if (tempScript.GetType().Equals(typeof(MissileScript))) { MissileScript tempMissile = (MissileScript)currentObjects[globalIndex].GetComponent(typeof(MissileScript)); tempMissile.KillToDeath(); } Killed(currentObjects[globalIndex]); }
void Shoot(Transform target) { //cannon turret if (bulletTurret) { GameObject thisBullet = Instantiate(bullet, firePoint.position, firePoint.rotation); BulletScript bulletScript = thisBullet.GetComponent <BulletScript>(); if (bulletScript != null) { bulletScript.setTargetTo(target); bulletScript.setDamage(damage); } } //missile turret else if (missileTurret) { int missileNum = 1; if (upgraded3) { missileNum = 4; } for (int i = 0; i < missileNum; i++) { GameObject thisMissile = Instantiate(missile, firePoint.position + Random.insideUnitSphere * 5, firePoint.rotation); MissileScript missileScript = thisMissile.GetComponent <MissileScript>(); if (missileScript != null) { missileScript.setTargetTo(target); missileScript.setDamage(damage, aoeDamage); } } } //pulse turret else if (pulseTurret) { Collider[] objectsHit = Physics.OverlapSphere(firePoint.position, range); foreach (Collider c in objectsHit) { if (c.tag.Equals(enemyTag)) { c.gameObject.GetComponent <EnemyAIScript>().takeDamage(damage); } } } //freeze turret else if (freezeTurret) { GameObject enemy = target.gameObject; enemy.GetComponent <EnemyAIScript>().slow(slowDuration, slowPrentageAmount); enemy.GetComponent <EnemyAIScript>().takeDamage(damage); laserEffect.SetPosition(0, firePoint.position); laserEffect.SetPosition(1, target.position); } //death laser else if (DeathLaserTurret) { GameObject enemy = target.gameObject; enemy.GetComponent <EnemyAIScript>().takeDamage(damage); if (upgraded2) { enemy.GetComponent <EnemyAIScript>().slow(slowDuration, slowPrentageAmount); } laserEffect.SetPosition(0, firePoint.position); laserEffect.SetPosition(1, target.position); } //firing effect if (fireEffect != null) { GameObject fireParticles; if (upgraded3 && upgradedFireEffect != null) { fireParticles = Instantiate(upgradedFireEffect, firePoint.position, Quaternion.LookRotation(target.position - transform.position)); } else { fireParticles = Instantiate(fireEffect, firePoint.position, Quaternion.LookRotation(target.position - transform.position)); } Destroy(fireParticles, 1f); } }
// Update is called once per frame void Update() { ChangeRotation(); if (IsMovePlayer == true) { //敵の向きによって撃つ方向を変える switch (Direction) { case "Right": if (EnemyName == "Laser") { if (CountLaser == 3) { var obj = Instantiate(LaserPrefab, transform.position + new Vector3(1.0f, 0.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; CountLaser = 0; } CountLaser++; } if (EnemyName == "Missile") { if (activeMissile != null) { break; } var obj = Instantiate(MissilePrefab, transform.position + new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; activeMissile = obj.GetComponent <MissileScript>(); } break; case "Down": if (EnemyName == "Laser") { if (CountLaser == 3) { var obj = Instantiate(LaserPrefab, transform.position + new Vector3(0.0f, -1.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; CountLaser = 0; } CountLaser++; } if (EnemyName == "Missile") { if (activeMissile != null) { break; } var obj = Instantiate(MissilePrefab, transform.position + new Vector3(0.0f, -2.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; activeMissile = obj.GetComponent <MissileScript>(); } break; case "Left": if (EnemyName == "Laser") { if (CountLaser == 3) { var obj = Instantiate(LaserPrefab, transform.position + new Vector3(-1.0f, 0.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; CountLaser = 0; } CountLaser++; } if (EnemyName == "Missile") { if (activeMissile != null) { break; } var obj = Instantiate(MissilePrefab, transform.position + new Vector3(-2.0f, 0.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; activeMissile = obj.GetComponent <MissileScript>(); } break; case "Up": if (EnemyName == "Laser") { if (CountLaser == 3) { var obj = Instantiate(LaserPrefab, transform.position + new Vector3(0.0f, 1.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; CountLaser = 0; } CountLaser++; } if (EnemyName == "Missile") { if (activeMissile != null) { break; } var obj = Instantiate(MissilePrefab, transform.position + new Vector3(0.0f, 2.0f, 0.0f), Quaternion.identity); obj.transform.right = transform.right; activeMissile = obj.GetComponent <MissileScript>(); } break; } IsMovePlayer = false; } }
// Update is called once per frame void Update() { GameObject[,] circuitArray = circuitBoardScript.componentArray; int numThrusters = 0; foreach (GameObject obj in circuitArray) { if (obj != null) { if (obj.name.Contains("powersupply")) { } else { ShipComponent compScript = obj.GetComponent("ShipComponent") as ShipComponent; if (compScript._powerLevel > 0) { if (obj.name.Contains("thruster")) { //Debug.Log ("MOVEFORWARD"); numThrusters += 1; } else if (obj.name.Contains("gun")) { //Debug.Log ("SHOOT"); } } } } } //Movement sumOfForces(); GameObject thruster1 = null; GameObject thruster2 = null; bool thruster1Active = false; bool thruster2Active = false; foreach (GameObject obj in circuitBoardScript.componentArray) { if (obj != null) { if (obj.name.Contains("thruster")) { if (thruster1 == null) { thruster1 = obj; } else if (thruster2 == null) { thruster2 = obj; } Thruster thrusterScript = obj.GetComponent("Thruster") as Thruster; if (thrusterScript._powerLevel > 0) { if (obj == thruster1) { thruster1Active = true; } else if (obj == thruster2) { thruster2Active = true; } } } } } centerofMass = computeCenterOfMass(); if (thruster1Active && !thruster2Active) { //rotate right shipAngle -= shipAngularVelocity * Time.deltaTime; } else if (!thruster1Active && thruster2Active) { shipAngle += shipAngularVelocity * Time.deltaTime; //rotate left } foreach (GameObject compObj in componentArray) { if (compObj != null) { //Vector2 differenceVector = new Vector2( compObj.transform.position.x - centerofMass.x, // compObj.transform.position.y - centerofMass.y); //Vector2 newVector = rotateVector(differenceVector, shipAngle); //float angleDiff = Mathf.Atan2(differenceVector.y, differenceVector.x); Vector2 blockVector = new Vector2(compObj.transform.position.x - centerofMass.x, compObj.transform.position.y - centerofMass.y); //Debug.Log ("Block Vector: " + blockVector); float angleDifference = shipAngle - compObj.transform.localEulerAngles.z; float tempAngle = (angleDifference * Mathf.Deg2Rad); compObj.transform.localEulerAngles = new Vector3(0, 0, shipAngle); float rotatedX = (Mathf.Cos(tempAngle) * (blockVector.x)) - (Mathf.Sin(tempAngle) * (blockVector.y)) + centerofMass.x; float rotatedY = (Mathf.Sin(tempAngle) * (blockVector.x)) + (Mathf.Cos(tempAngle) * (blockVector.y)) + centerofMass.y; compObj.transform.position = new Vector2(rotatedX, rotatedY); } } if (thruster1Active && thruster2Active) { float tempAngle = (Mathf.Deg2Rad * shipAngle) + Mathf.PI / 2; if (shipVelocity.magnitude < _maxSpeed) { shipVelocity.x = shipVelocity.x + Mathf.Cos(tempAngle) * acceleration * Time.deltaTime; shipVelocity.y = shipVelocity.y + Mathf.Sin(tempAngle) * acceleration * Time.deltaTime; } } shipVelocity.x *= coeffKineticFriction; shipVelocity.y *= coeffKineticFriction; //Check collisions GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); //Bounds boundingBox = renderer.bounds; //Vector3 extents = boundingBox.extents; //Rect boundingRect = new Rect(boundingBox.center.x-extents.x, boundingBox.center.y-extents.y, // extents.x*1.8f, extents.y*1.8f); //Debug.Log (enemies[0].name); foreach (GameObject enemy in enemies) { Bounds tileBoundingBox = enemy.renderer.bounds; Vector3 tileExtents = tileBoundingBox.extents; Rect tileBoundingRect = new Rect(tileBoundingBox.center.x - tileExtents.x, tileBoundingBox.center.y - tileExtents.y, tileExtents.x * 1.15f, tileExtents.y * 1.35f); foreach (GameObject block in componentArray) { if (block != null) { Bounds blockBoundingBox = block.renderer.bounds; Vector3 blockExtents = blockBoundingBox.extents; Rect blockBoundingRect = new Rect(blockBoundingBox.center.x - blockExtents.x, blockBoundingBox.center.y - blockExtents.y, blockExtents.x * 1.6f, blockExtents.y * 1.6f); bool isIntersecting = doesIntersect(blockBoundingRect, tileBoundingRect); if (isIntersecting) { Debug.Log("COLLISION"); shipVelocity.x *= .95f; shipVelocity.y *= .95f; EnemyBehavior enBehScript = enemy.GetComponent("EnemyBehavior") as EnemyBehavior; enBehScript.currentSpeed *= 0.9995f; } } } } foreach (GameObject compObj in componentArray) { if (compObj != null) { compObj.transform.position = new Vector2(compObj.transform.position.x + shipVelocity.x, compObj.transform.position.y + shipVelocity.y); } } Vector2 newLoc = new Vector2(shipVelocity.x, shipVelocity.y); followship.moveSelf(newLoc.x, newLoc.y); circuitBoardScript.translateAll(newLoc.x, newLoc.y); GameObject console = GameObject.FindGameObjectWithTag("Console"); console.transform.Translate(new Vector3(newLoc.x, newLoc.y, 0)); this.transform.position = new Vector3(centerofMass.x, centerofMass.y, 0); //Debug.Log (shipVelocity); //shipVelocity.x -= (coeffKineticFriction * acceleration); //shipVelocity.y -= (coeffKineticFriction * acceleration); this.transform.localEulerAngles = new Vector3(0, 0, shipAngle); //Debug.Log (this.transform.position); //Firing foreach (GameObject obj in circuitArray) { if (obj != null) { if (obj.name.Contains("gun")) { Gun gunScript = obj.GetComponent("Gun") as Gun; if (gunScript._powerLevel > 0) { if (gunScript.interval <= 0.0) { GameObject mirror = componentArray[gunScript.index_Row, gunScript.index_Column]; GameObject missile = (GameObject)Instantiate(missilePrefab, new Vector3(mirror.transform.position.x, mirror.transform.position.y, 0), mirror.transform.rotation); MissileScript missileScript = missile.GetComponent("MissileScript") as MissileScript; missileScript.angleVector = missile.transform.localEulerAngles; gunScript.interval = gunScript.intervalBase; AudioSource.PlayClipAtPoint(missileShot, Camera.main.transform.position); } gunScript.interval -= Time.deltaTime; } } } } }
public CastRoutine SpellRangedAttack(SpellAttackEffector hit, MissileScript.MissileAnimationName missileName, SpellAttackEffector crit = null, SpellAttackEffector miss = null) { return((AT.Battle.Actor caster,AT.Battle.Action cast,List <AT.ATTile> targets) => { GameObject prefab = MissileAnimationPrefabDispenser.instance.GetAnimationPrefabByName(missileName); foreach (AT.ATTile target in targets) { AttackSituation sit = new AttackSituation(caster.CharSheet,target.FirstOccupant.CharSheet,cast); List <AT.Character.Effect.GenericEffect> resultingEffects = null; ResultType result = sit.GetResult(); switch (result) { case ResultType.HIT: resultingEffects = hit.Invoke(cast,target); break; case ResultType.CRITICAL_HIT: if (crit != null) { resultingEffects = crit.Invoke(cast,target); } break; case ResultType.MISS: if (miss != null) { resultingEffects = miss.Invoke(cast,target); } break; case ResultType.CRITICAL_MISS: //nothing break; } CharacterCastingAnimation castingAnims = caster.GetComponent <CharacterCastingAnimation>(); if (castingAnims != null) { castingAnims.SetupAndDoCastAnimation(cast); castingAnims.OneShotSpellRelease((animationInst) => { GameObject copy = Instantiate(prefab); copy.transform.position = caster.transform.position; MissileScript missile = copy.GetComponent <MissileScript>(); missile.LaunchAt(target,true); //Safe to not worry about unsubbing, thanks to garbage cleanup missile.OnConnectedWithTarget += (MissileScript self) => { if (resultingEffects != null) { foreach (AT.Character.Effect.GenericEffect effect in resultingEffects) { if (target.FirstOccupant != null) { effect.ApplyTo(target.FirstOccupant.CharSheet,cast); } } } //This assumes only one missile. Needs a "Checkin of sorts, to conditionally check on finished" cast.CallOnFinished(); }; }); //ToBe ATOCIJL } else { GameObject copy = Instantiate(prefab); copy.transform.position = caster.transform.position; MissileScript missile = copy.GetComponent <MissileScript>(); missile.LaunchAt(target.transform); //Safe to not worry about unsubbing, thanks to garbage cleanup missile.OnConnectedWithTarget += (MissileScript self) => { if (resultingEffects != null) { foreach (AT.Character.Effect.GenericEffect effect in resultingEffects) { effect.ApplyTo(target.FirstOccupant.CharSheet,cast); } } //This assumes only one missile. Needs a "Checkin of sorts, to conditionally check on finished" cast.CallOnFinished(); }; } } }); }
//FIRING MECHANISM private void Fire() { RaycastHit hit; //LASER HITSCAN if (typeWeapon == weaponType.laser) { Vector3 dir = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, dir, out hit, maxRange)) { // Debug.Log(hit.transform.name + " found!");// declares if object was found // print("Found a target game object distance of " + hit.distance);//Declares target distance Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F); // draws firingline to target target = hit.collider.gameObject; //assigns target targethealth = (HealthAndDeduction)target.GetComponent(typeof(HealthAndDeduction)); targethealth.DamageCalc(typeDamage, damage); // print("damaging target");//Declares when Target us damaged // gameObject.SendMessage("DamageCalc", typeDamage, damage); } } //============================================================================== //MISSILE SPAWN if (typeWeapon == weaponType.missile) { //spawns a clone projectile with a target location Vector3 dir = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, dir, out hit, maxRange)) //If target detected then fire { Vector3 offset = new Vector3(0, 0, 0); clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject; target = hit.collider.gameObject;//assigns target missile = (MissileScript)clone.GetComponent(typeof(MissileScript)); missile.SetTarget(target); prevTarget = target; Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F);// draws firingline to target // Debug.Log(hit.transform.name + " found!");// declares if object was found // print("Found a target game object distance of " + hit.distance);//Declares target distance // print("firing missile");//Declares when Target us damaged } else if (target != null) // if target not detected but target not null fire { Vector3 offset = new Vector3(0, 0, 0); clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject; missile = (MissileScript)clone.GetComponent(typeof(MissileScript)); missile.SetTarget(prevTarget); } //============================================================== }//BULLET SPAWN if (typeWeapon == weaponType.turret) {//fires a cloned projectile // print("Cannon Fire!"); Vector3 offset = new Vector3(0, 0, 0); Vector3 bulletTrajectory = new Vector3(0, 0, speed); clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject; // bullet = (BulletScript)clone.GetComponent(typeof(BulletScript)); clone.GetComponent <Rigidbody>().AddRelativeForce(bulletTrajectory); } }
void Start() { Spell s = new Spell(); s.cast = SpellRangedAttack((Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.NECROTIC); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8"); AT.Character.Condition.ICondition condition = new AT.Character.Condition.Necrosis(1, AT.Character.Condition.TickType.TURN_BEGIN, cast.actor.CharSheet); AT.Character.Effect.ConditionEffect necrosis = new AT.Character.Effect.ConditionEffect(condition); return(new List <AT.Character.Effect.GenericEffect> { dmg, necrosis }); }, MissileScript.MissileAnimationName.PLACEHOLDER, (Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.NECROTIC); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8", true); AT.Character.Condition.ICondition condition = new AT.Character.Condition.Necrosis(1, AT.Character.Condition.TickType.TURN_BEGIN, cast.actor.CharSheet); AT.Character.Effect.ConditionEffect necrosis = new AT.Character.Effect.ConditionEffect(condition); return(new List <AT.Character.Effect.GenericEffect> { dmg, necrosis }); }); s.school = School.NECROMANCY; s.name = SpellName.CHILL_TOUCH; s.classType = ClassType.WIZARD; s.targetingType = TargetingType.SINGLE_ENEMY; s.rangeInSquares = 20; s.isCantrip = true; s.description = "<i>Chill Touch\nMake a ranged spell attack against an enemy within 120ft. The enemy suffers 1d8 necrotic damage, and cannot be healed until the start of the caster's next turn.</i>"; RegisterSpell(s); CastRoutine sgCast = SpellTouchAttack((Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.LIGHTNING); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8"); AT.Character.Effect.DelegateEffect shocked = new AT.Character.Effect.DelegateEffect((character, spellCast) => { target.FirstOccupant.ActorComponent.PreventReactions(spellCast); }); return(new List <AT.Character.Effect.GenericEffect> { dmg, shocked }); }, (Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.LIGHTNING); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8", true); AT.Character.Effect.DelegateEffect shocked = new AT.Character.Effect.DelegateEffect((character, spellCast) => { target.FirstOccupant.ActorComponent.PreventReactions(spellCast); }); return(new List <AT.Character.Effect.GenericEffect> { dmg, shocked }); }); Spell shockingGrasp = new Spell(); shockingGrasp.cast = sgCast; shockingGrasp.school = School.EVOCATION; shockingGrasp.name = SpellName.SHOCKING_GRASP; shockingGrasp.classType = ClassType.WIZARD; shockingGrasp.targetingType = TargetingType.SINGLE_ENEMY; shockingGrasp.rangeInSquares = 1; shockingGrasp.isCantrip = true; RegisterSpell(shockingGrasp); CastRoutine fbCast = SpellRangedAttack((Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FIRE); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d10"); return(new List <AT.Character.Effect.GenericEffect> { dmg }); }, MissileScript.MissileAnimationName.PLACEHOLDER, (Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FIRE); int numDice = NumDiceFromScaleThresholds(new List <int> { 5, 11, 17 }, (cast as Cast).Spell.scaler); GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d10", true); return(new List <AT.Character.Effect.GenericEffect> { dmg }); }); Spell firebolt = new Spell(); firebolt.cast = fbCast; firebolt.school = School.EVOCATION; firebolt.name = SpellName.FIREBOLT; firebolt.classType = ClassType.WIZARD; firebolt.targetingType = TargetingType.SINGLE_ENEMY; firebolt.rangeInSquares = 12; firebolt.isCantrip = true; RegisterSpell(firebolt); CastRoutine poisonSprayCast = SpellSavingThrow((Action cast, AT.ATTile target) => { AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.POISON); dmg.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(12)); return(new List <AT.Character.Effect.GenericEffect> { dmg }); }, (Action cast, AT.ATTile target) => { //miss effect does nothing return(new List <AT.Character.Effect.GenericEffect>()); }, AbilityType.CONSTITUTION); Spell poisonSpray = new Spell(); poisonSpray.cast = poisonSprayCast; poisonSpray.school = School.CONJURATION; poisonSpray.name = SpellName.POISON_SPRAY; poisonSpray.classType = ClassType.WIZARD; poisonSpray.targetingType = TargetingType.SINGLE_ENEMY; poisonSpray.rangeInSquares = 2; poisonSpray.isCantrip = true; RegisterSpell(poisonSpray); CastRoutine magicMissileCast = ((caster, cast, targets) => { float delay = 0f; //this doesn't work... All missils have the same delay foreach (AT.ATTile target in targets) { CharacterCastingAnimation castingAnims = caster.GetComponent <CharacterCastingAnimation>(); GameObject prefab = MissileAnimationPrefabDispenser.instance.GetAnimationPrefabByName(MissileScript.MissileAnimationName.PLACEHOLDER); if (castingAnims != null) { castingAnims.SetupAndDoCastAnimation(cast); castingAnims.OneShotSpellRelease((animationInst) => { GameObject copy = Instantiate(prefab); copy.transform.position = caster.transform.position; MissileScript missile = copy.GetComponent <MissileScript>(); missile.DelayLaunchAt(target, delay, true); //Safe to not worry about unsubbing, thanks to garbage cleanup missile.OnConnectedWithTarget += (MissileScript self) => { AT.Character.Effect.Damage d = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FORCE); d.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(4) + 1); if (target.FirstOccupant != null) { d.ApplyTo(target.FirstOccupant.ActorComponent.CharSheet); } //This assumes only one missile. Needs a "Checkin of sorts, to conditionally check on finished" cast.CallOnFinished(); }; }); //ToBe ATOCIJL } else { GameObject copy = Instantiate(prefab); copy.transform.position = caster.transform.position; MissileScript missile = copy.GetComponent <MissileScript>(); missile.DelayLaunchAt(target, delay, true); //Safe to not worry about unsubbing, thanks to garbage cleanup missile.OnConnectedWithTarget += (MissileScript self) => { AT.Character.Effect.Damage d = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FORCE); d.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(4) + 1); if (target.FirstOccupant != null) { d.ApplyTo(target.FirstOccupant.ActorComponent.CharSheet); } //This assumes only one missile. Needs a "Checkin of sorts, to conditionally check on finished" cast.CallOnFinished(); }; } delay += .2f; } }); Spell magicMissile = new Spell(); magicMissile.cast = magicMissileCast; magicMissile.level = 1; magicMissile.school = School.EVOCATION; magicMissile.name = SpellName.MAGIC_MISSILE; magicMissile.classType = ClassType.WIZARD; magicMissile.targetingType = TargetingType.MULTIPLE_ENEMY; magicMissile.alterCastOnSetParams = (cast) => { cast.NumTargets = 3; cast.NumTargets += magicMissile.scaler.ScaleValue(); }; magicMissile.rangeInSquares = 60; RegisterSpell(magicMissile); }