public void Fire(Rigidbody firingEntity) { if (firingRateTimer >= fireRate && currentAmmo > 0) { weaponAnimator.SetBool("Firing", true); GameObject proj = Instantiate(projectile, defaultFireOrigin.position, Quaternion.identity); Vector3 localForward = transform.InverseTransformDirection(defaultFireOrigin.forward); proj.transform.forward = transform.TransformDirection(ComputeInnacuracy(localForward)); ProjectileBehavior newProj = proj.GetComponent <ProjectileBehavior>(); if (newProj != null) { newProj.SetShooter(this.gameObject); } if (firingEntity != null) { proj.GetComponent <Rigidbody>().velocity = firingEntity.velocity; } firingRateTimer = 0.0f; hasFired = true; currentAmmo--; } if (currentAmmo <= 0) { StartReload(); } }
// The RPC to launch the projectile. public override void CreateProjectile(RpcArgs args) { MainThreadManager.Run(() => { // Retrieve the arguments from the RPC call: start position of the projectile and the player ID who shot it Vector3 pos = args.GetNext <Vector3>(); int pid = args.GetNext <int>(); //Debug.Log("Player.CreateProjectile(): called with position=" + pos + " for playerID=" + pid); // Network instantiate the projectile on the server if (NetworkManager.Instance.IsServer) { //Debug.Log("Player.CreateProjectile(): we are on the host"); ProjectileBehavior pb = NetworkManager.Instance.InstantiateProjectile(0, pos, Quaternion.identity); pb.networkObject.ownerNetId = networkObject.MyPlayerId; pb.networkObject.playerID = pid; // We'll automatically destroy the projectile after the destroyDelay in seconds pb.networkObject.Destroy(destroyDelay * 1000); // The actual launch of the projectile takes place in its Projectile.Inialize() function } }); }
public void Init(Tower tower, bool placing = false) { mouse_collider = GetComponent <BoxCollider2D>(); damage = tower.damage; range = tower.range; attack_speed = tower.attack_speed; ready_time = tower.ready_time; cost = tower.cost; SpriteRenderer base_renderer = tower_base.GetComponent <SpriteRenderer>(); base_renderer.sprite = tower.base_sprite; base_renderer.color = tower.base_color; SpriteRenderer turret_renderer = tower_turret.GetComponent <SpriteRenderer>(); turret_renderer.sprite = tower.turret_sprite; turret_renderer.color = tower.turret_color; projectile = tower.projectile; projectile_template = tower.projectile_template; tower_range.transform.localScale = new Vector3(tower.range * 4, tower.range * 4, 0f); tower_range.SetActive(placing); }
public void addBehavior(string key, ProjectileBehavior projectileBehavior) { if (_behaviors.ContainsKey(key) == false) { _behaviors[key] = new List<ProjectileBehavior>(); } _behaviors[key].Add(projectileBehavior); }
private void Fire() { current_time = current_time - attack_speed; ProjectileBehavior bullet = GameObject.Instantiate(projectile); bullet.transform.position = new Vector3(turret.position.x, turret.position.y, 0f); bullet.Init(null, target.transform, damage); }
private void Fire() { current_time = current_time - attack_speed; ProjectileBehavior bullet = GameObject.Instantiate(projectile_template); bullet.transform.position = tower_turret.transform.position; bullet.Init(projectile, target.transform, damage); }
// Called whenever this object is involved in a collision. void OnCollisionEnter(Collision collision) { // We only care if the collision is with a projectile. ProjectileBehavior pb = collision.contacts[0].otherCollider.gameObject.GetComponent <ProjectileBehavior>(); if (pb != null) { TargetDangerLevel += DangerLevelIncreaseFactor; } }
public void Shoot() { if (Time.time > nextShot) { nextShot = Time.time + timeBetweenShots; //Sets _drink to instantiate the drink's gameobject at the server's position _drink = Instantiate(drink.gameObject, server.transform.position, server.transform.rotation); //Calls GetComponent for the _drink with a new ProjectileBehavior ProjectileBehavior moveDrink = _drink.GetComponent <ProjectileBehavior>(); //Sets the velocity to the server's forward scaled by the firerate moveDrink.Velocity = transform.forward * shootSpeed; // _playerAnimation.Shoot(); } }
//Main execute method for the player public IEnumerator execute() { offCD = false; float timer = 0f; basis.getController().canMove = false; anim.SetFloat("speed", 0f); Vector2 direction = Battle.dirKnockbackCalc(basis.transform.position, 1); Battle.updatePlayerAOrientation(basis.transform); anim.SetBool("SpAttacking", true); float animLength = ANIM_DURATION_FACTOR * anim.GetCurrentAnimatorStateInfo(0).length; yield return(new WaitForSeconds(animLength)); anim.SetBool("SpAttacking", false); //If basis is not stunned if (!basis.isStunned()) { Transform curHitbox = Object.Instantiate(hitbox, basis.transform); ProjectileBehavior projProperties = curHitbox.GetComponent <ProjectileBehavior>(); projProperties.offensiveSetup(PROJ_SPEED, 0, PROJ_PRIORITY, this); projProperties.setDirection(direction); //Wait for timeout timer = 0f; //wait for animation frame to finish before continuing script while (curHitbox != null && timer < TIMEOUT) { yield return(new WaitForFixedUpdate()); timer += Time.deltaTime; } if (curHitbox != null) { Object.Destroy(curHitbox.gameObject); } if (!basis.isStunned()) { basis.getController().canMove = true; } } }
// Update is called once per frame void Update() { shootDir = new Vector2(Input.GetAxisRaw("Fire Horizontal"), Input.GetAxisRaw("Fire Vertical")); if (shootDir != Vector2.zero && timeSince + fireRate <= Time.time) { timeSince = Time.time; GameObject clone = Instantiate(projectile, rb.position, Quaternion.identity) as GameObject; ProjectileBehavior behavior = clone.AddComponent(typeof(ProjectileBehavior)) as ProjectileBehavior; behavior.moveDir = shootDir; behavior.speed = speed; behavior.exparationDate = rustTime; } }
private void SpawnBullet() { Vector3 bulletDirection; var gunPos = transform.position; var playerPos = player.position; if (gameObject.tag == "Tracker") { bulletDirection = (gunPos - playerPos).normalized; //Get the Vector2 towards the player ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>(); newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 180); newBullet.FireProjectile(-bulletDirection); } else if (gameObject.tag == "Forward") { bulletDirection = (gunPos - Vector3.back).normalized; ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>(); newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 180); newBullet.FireProjectile(new Vector2(-1, 0)); } else if (gameObject.tag == "Backward") { bulletDirection = (gunPos - Vector3.forward).normalized; ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>(); newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward)); newBullet.FireProjectile(new Vector2(1, 0)); } else if (gameObject.tag == "From Above") { bulletDirection = (gunPos - Vector3.down).normalized; ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>(); newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) - 90); newBullet.FireProjectile(Vector2.down); } else if (gameObject.tag == "Down Below") { bulletDirection = (gunPos - Vector3.up).normalized; ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>(); newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 90); newBullet.FireProjectile(Vector2.up); } //print("Bullet spawned!"); }
private void CreateProjectile(GameUnit caster, GameUnit target, Vector3 destination) { GameObject projectile = Instantiate(projectilePrefab, caster.spriteC.shotSpawn.position, Quaternion.identity); projectile.transform.LookAt(destination); ProjectileBehavior pB = projectile.GetComponent <ProjectileBehavior> (); pB.hitFx = hitFxPrefab; pB.speed = projectileSpeed; pB.killTime = Time.time + (Vector3.Distance(projectile.transform.position, destination) / projectileSpeed); pB.damage = damageAmount; pB.blazeDuration = blazeDuration; pB.slowDuration = slowDuration; pB.slowMultiplier = slowModifier; pB.tauntDuration = tauntDuration; pB.target = target; pB.caster = caster; }
public ZazzleShot(GameWorld world, Vector2 position, Vector2 direction) : base(world, position, direction, 12, Constants.WORLD2MODEL_ZAZZLESHOT, 20) { anim = new Animation(0, 8, 1f, true, 0, 0); myBehavior = new ProjectileBehavior(this, 2); active = true; frictionCoefficient = 0.001f; elasticity = .5f; mass = 10; damage = 5; // MASKING this.actorcategory = ActorCategory.enemyprojectile; this.collisionmask = ActorCategory.friendly | ActorCategory.friendlyprojectile; this.collisionimmunitymask = ActorCategory.enemy; this.damageimmunitymask = ActorCategory.friendlyprojectile; textureSet = world.tileEngine.resourceComponent.getTextureSet("035_ZazzleShot"); }
public void Attack() { agent.isStopped = true; for (int i = 0; i < projectileNumber; ++i) { GameObject go = Instantiate(ennemyProjectile, projectileOrigin.transform.position, Quaternion.identity); Vector3 force = player.transform.position - transform.position; ProjectileBehavior newProj = go.GetComponent <ProjectileBehavior>(); if (newProj != null) { newProj.SetShooter(this.gameObject); } force.y += 2.0f; force.x = force.x * Random.Range(0.5f, 1.0f); force.z = force.z * Random.Range(0.5f, 1.0f); force.y = force.y * Random.Range(0.5f, 1.0f); go.GetComponent <Rigidbody>().AddForce(force); } }
public GameObject fire(int ptype) { if (newProjectile == null) { float scle = transform.localScale.x; newProjectile = Instantiate(projectileSource1, transform.position, transform.rotation); newProjectile.GetComponent <Rigidbody>().velocity = transform.TransformDirection(Vector3.left * 40); behavior = newProjectile.GetComponent <ProjectileBehavior>(); behavior.player = transform.parent.gameObject; behavior.setProjectileType(ptype); camera.GetComponent <CameraBehavior>().followObject(newProjectile); } else { behavior.Action(); } return(newProjectile); }
void OnTriggerEnter2D(Collider2D col) { Debug.Log(col.gameObject.tag); if (col.gameObject.tag != "Projectile") { return; } ProjectileBehavior projectile = col.GetComponent <ProjectileBehavior>(); Damage(projectile.damage); GameObject.Destroy(col.gameObject); if (IsDead()) { GameObject.FindObjectOfType <PlayerBehavior>().AddGold(gold); GameObject.Destroy(this.gameObject); } }
void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.tag != "Projectile") { return; } ProjectileBehavior projectile = col.GetComponent <ProjectileBehavior>(); enemy.Damage(projectile.damage); GameObject.Destroy(col.gameObject); // TODO: ANIMATE ENEMY? (TAKEN DAMAGE) if (enemy.IsDead()) { GameObject.FindObjectOfType <Player>().AddGold(enemy.gold); GameObject.Destroy(enemy.gameObject); // TODO: ANIMATE +X GOLD! } }
/// <summary> /// Adds a new projectile to the world. /// </summary> /// <param name="start">Position to shoot from</param> /// <param name="direction">Position to shoot toward</param> /// <param name="radius">Size of destruction when colliding.</param> void ShootProjectile(Vector3 start, Vector3 direction, long OwningUser) { // Need to know the index in the PlayerAvatarStore to grab for this projectile's behavior. int AvatarIndex = 0; // Special case ID 0 to mean the local user. if (OwningUser == 0) { AvatarIndex = LocalPlayerManager.Instance.AvatarIndex; } else { RemotePlayerManager.RemoteHeadInfo headInfo = RemotePlayerManager.Instance.GetRemoteHeadInfo(OwningUser); AvatarIndex = headInfo.PlayerAvatarIndex; } PlayerAvatarParameters ownerAvatarParameters = PlayerAvatarStore.Instance.PlayerAvatars[AvatarIndex].GetComponent <PlayerAvatarParameters>(); GameObject spawnedProjectile = (GameObject)Instantiate(ownerAvatarParameters.PlayerShotObject); spawnedProjectile.transform.position = start; // Set projectile color to be the same as the avatar color. FriendlyDrone drone = PlayerAvatarStore.Instance.PlayerAvatars[AvatarIndex].GetComponentInChildren <FriendlyDrone>(); if (drone != null) { spawnedProjectile.GetComponentInChildren <Renderer>().materials[1].SetColor("_EmissionColor", drone.EmissiveColor); foreach (ParticleSystem particleSystem in spawnedProjectile.transform.GetComponentsInChildren <ParticleSystem>()) { ParticleSystem.MainModule main = particleSystem.main; main.startColor = drone.EmissiveColor; } } ProjectileBehavior pc = spawnedProjectile.GetComponentInChildren <ProjectileBehavior>(); pc.startDir = direction; pc.OwningUserId = OwningUser; }
public override void ApplyAbilityEffect() { MultishotAbilityConfig multishotConfig = m_AbilityConfig as MultishotAbilityConfig; Vector3 projectileDirection = transform.forward; Vector3 spawnPosition = new Vector3(transform.position.x, transform.position.y + 2, transform.position.z); //1 GameObject spawnedProjectile = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, transform.rotation); ProjectileBehavior spawnedProjectilebehavior = spawnedProjectile.GetComponent <ProjectileBehavior>(); //2 Quaternion rotationQuat = CreateRotationQuat(10, transform.up); Quaternion finalQuat = rotationQuat * transform.rotation; GameObject spawnedProjectile2 = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, finalQuat); ProjectileBehavior spawnedProjectilebehavior2 = spawnedProjectile2.GetComponent <ProjectileBehavior>(); //3 Quaternion rotationQuat1 = CreateRotationQuat(-10, transform.up); Quaternion finalQuat1 = rotationQuat1 * transform.rotation; GameObject spawnedProjectile3 = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, finalQuat1); ProjectileBehavior spawnedProjectilebehavior3 = spawnedProjectile3.GetComponent <ProjectileBehavior>(); }
//AssistExecute for Player public IEnumerator assistExecute() { //Set up move Battle.updatePlayerAOrientation(basis.transform); ProjectileBehavior hitBehavior = hitbox.GetComponent <ProjectileBehavior>(); hitBehavior.setMouseDirection(basis.transform); offCD = false; anim.SetBool("SpAttacking", true); int shotsFired = 0; float curHealth = basis.accessStat(BaseStat.HEALTH); //Bullet system. Player can fire a barrage of 5 bullets by holding button, but must stay still during it (CHANGE THIS KEYCODE) while (curHealth <= basis.accessStat(BaseStat.HEALTH) && shotsFired < MAX_SHOTS && curAmmo > 0) { curAmmo--; //Decrement ammo by 1 shotsFired++; //Increment shots fired by 1 Transform curBullet = Object.Instantiate(hitbox, basis.transform); //Instantiates hitbox with basis as the parent curBullet.GetComponent <ProjectileBehavior>().currentMove = this; //Bullet sound effect basis.soundFXs.Stop(); basis.soundFXs.clip = Resources.Load <AudioClip>("Audio/AttackSounds/MachineGun"); basis.soundFXs.Play(); yield return(new WaitForSeconds(FIRE_RATE)); } curCooldown = shotsFired * (MAX_COOLDOWN / MAX_SHOTS); //Reduces cooldown depending on the amount of shots fired //Upon release, enable cooldown timers and movement anim.SetBool("SpAttacking", false); basis.getController().SendMessage("assistExecuted"); yield return(0); }
//BulletSeed constructor // Pre: anim MUST have hDirection, vDirection, and special attacking vars. sourceTag is either Player or Enemy public BulletSeed(Animator anim, PKMNEntity basis) { //Establish variables concerning source this.anim = anim; this.basis = basis; this.enemyTag = (anim.tag == "Player") ? "Enemy" : "Player"; //Set variables for hitbox this.hitbox = Resources.Load <Transform>("MoveHitboxes/BulletSeedObj"); ProjectileBehavior projProperties = hitbox.GetComponent <ProjectileBehavior>(); projProperties.speed = PROJ_SPEED; projProperties.knockbackVal = 0; projProperties.priority = PROJ_PRIORITY; //Regen variables curAmmo = MAX_AMMO; rTimer = 0.0f; //Set cooldown variables cTimer = 0.0f; curCooldown = MAX_COOLDOWN; offCD = true; }
public FireBlob(GameWorld world, Vector2 position, Vector2 direction) : base(world, position, direction, 16, new Vector2(-16f, -16f), 0) { life = new Life(this, 20); life.deathEvent += delegate() { FireBlob_deathEvent(this); }; anim = new Animation(0, 3, 8f, true, -16, -16); myBehavior = new ProjectileBehavior(this, 0); active = ACTIVE; frictionCoefficient = FRICTION; elasticity = ELASTICITY; mass = MASS; // MASKING this.actorcategory = ActorCategory.enemyprojectile; this.collisionmask = ActorCategory.friendly | ActorCategory.enemyprojectile; this.collisionimmunitymask = ActorCategory.enemyprojectile; this.damageimmunitymask = ActorCategory.enemyprojectile; audioSet = world.tileEngine.resourceComponent.getAudioSet("012_Octo"); textureSet = world.tileEngine.resourceComponent.getTextureSet("040_FireBlob"); }
public OctoBall(GameWorld world, Vector2 position, Vector2 direction) : base(world, position, direction, Constants.OCTOBALL_RADIUS, Constants.WORLD2MODEL_OCTOBALL, 20) { life = new Life(this, Constants.OCTOBALL_HEALTH); life.deathEvent += delegate() { OctoBall_deathEvent(this); }; anim = null; myBehavior = new ProjectileBehavior(this, 2); active = ACTIVE; frictionCoefficient = FRICTION; elasticity = ELASTICITY; mass = Constants.OCTOBALL_MASS; // MASKING this.actorcategory = ActorCategory.enemyprojectile; this.collisionmask = ActorCategory.friendly | ActorCategory.friendlyprojectile; this.collisionimmunitymask = ActorCategory.enemy; this.damageimmunitymask = ActorCategory.friendlyprojectile; audioSet = world.tileEngine.resourceComponent.getAudioSet("012_Octo"); textureSet = world.tileEngine.resourceComponent.getTextureSet("012_Octo"); }
public void Initialize(ProjectileData _projectileData, ProjectileBehavior _behavior, ProjectilePool poolToUse) { owningPool = poolToUse; transform = gameObject.transform; projectileData = _projectileData; }
public void Register(ProjectileBehavior projectile) { projectile.destructTime = timer + persistTime; queue.Enqueue(projectile); }
private void Start() { projectileBehavior = GetComponent <ProjectileBehavior>(); projectileBehavior.onProjectileTriggerEnter += DamageOther; }
public override void Fire() { ProjectileBehavior bulletInstance = Instantiate(bullet, nozzle.position, transform.rotation).GetComponent <ProjectileBehavior>(); bPlayer.ServerUseMana(abCost); }
void HandleAttack() { if (isAttacking && !startedAttack) //trying to attack, start of new attack { myAnim.SetBool("isAttacking", true); chargeTimer = chargeDelay; startedAttack = true; } else if (isAttacking && startedAttack && chargeTimer <= 0 && chargeEffectInstance == null) //still charging, timer done, no charge made, make charge effect { chargeEffectInstance = Instantiate(chargeEffect, transform); float x, y; if (myAnim.GetInteger("Vertical") > 0) { x = chargePositionU.transform.localPosition.x; y = chargePositionU.transform.localPosition.y; } else { x = chargePositionD.transform.localPosition.x; y = chargePositionD.transform.localPosition.y; } if (mySprite.flipX) { x = -x; } chargeEffectInstance.transform.localPosition = new Vector3(x, y, 0); audioMan.playSFX("ready", transform.position); } else if (!isAttacking && startedAttack) //execute attack { //calculate direction to attack float x; if (mySprite.flipX) { x = 1; } else { x = -1; } Vector3 attackDirection = new Vector3(x, myAnim.GetInteger("Vertical"), 0); attackDirection.Normalize(); if (projectile == null) //melee character { GameObject go = Instantiate(hitEffect, transform.position, Quaternion.identity); ExplosionBehavior exp = go.GetComponent <ExplosionBehavior>(); //set position exp.transform.position += attackDirection * 0.5f; //tag it exp.tag = tag; //set damage if (chargeTimer > 0) //early attack { exp.damage = baseDamage; } else //charged attack { exp.damage = Mathf.RoundToInt(baseDamage * chargeMultiplier); } exp.Eval(); } else //projectile character { //try to get input direction if (dirInput.magnitude > 0) { attackDirection = new Vector3(dirInput.x, dirInput.y, 0).normalized; } GameObject go = Instantiate(projectile, transform.position, Quaternion.FromToRotation(projectile.transform.right, attackDirection)); ProjectileBehavior pb = go.GetComponent <ProjectileBehavior>(); //setposition go.transform.position += attackDirection * 0.5f;; //make sure it is tagged right go.tag = tag; //set damage & velocity if (chargeTimer > 0) //early attack { pb.damage = baseDamage; pb.init(attackDirection * arrowSpeed); } else //charged attack { pb.damage = Mathf.RoundToInt(baseDamage * chargeMultiplier); pb.init(attackDirection * arrowSpeed * chargeMultiplier); } } //set anim myAnim.SetBool("isAttacking", false); //finish chargeffect if (chargeEffectInstance != null) { chargeEffectInstance.GetComponent <Animator>().SetTrigger("done"); } //reset bool startedAttack = false; } //else shouuld be no change, let timers tick }
private void Start() { thisProjectile = GetComponent <ProjectileBehavior>(); thisProjectile.onProjectileCollision += Explode; }
public void SetupProjectile(GameObject gameObjectToAttachTo) { m_ProjectileBehavior = AttachProjectileBehaviorTo(gameObjectToAttachTo); m_ProjectileBehavior.SetProjectileConfig(this); }