public MagicProjectile Launch(Grimiore _grimiore, Vector3 spawnPoint, Transform target) { if (!_movingToTarget) { _target = target; grimiore = _grimiore; _magicEffectSpawned = grimiore.OnParticleEffectSpawn; _halfwayToTarget = grimiore.OnParticleEffectHalfway; _reachedTarget = grimiore.OnParticleEffectLanded; _projectileInstance = Instantiate(this, spawnPoint, Quaternion.Euler(0, 0, 0)); _projectileInstance.transform.LookAt(_target.transform); _halfway = false; _hitTarget = false; _movingToTarget = true; _magicEffectSpawned.Invoke(); OnEffectSpawn.Invoke(); return(_projectileInstance); } throw new UnityException("Unable to spawn Projectile"); }
private void LaunchProjectile() { ManaManager launcher = GetComponentInParent <ManaManager>(); float chargeNormalized = 1f; if (maxChargeTime != 0f) { chargeNormalized = currentChargeTime / maxChargeTime; } float realManaCost = manaCost * (1 + ManaChargeScale * chargeNormalized); if (CanLaunch(launcher, realManaCost)) { GameObject projectile = Instantiate <GameObject>(projectilePrefab); MagicProjectile magic = projectile.GetComponent <MagicProjectile>(); magic.Launcher = launcher; magic.Power = chargeNormalized; magic.Damage = minDamages + ((maxDamages - minDamages) * chargeNormalized); magic.OnKill = delegate(IDamageable target) { if (OnKill != null) { OnKill(this, new OnKillArgs(target)); } }; launcher.RemoveMana(realManaCost); } }
public void Cast(EnemyController caster, Vector3 hotspot, Vector3 target, int layer) { MagicProjectile projectile = Instantiate(ProjectilePrefab, hotspot, Quaternion.identity); projectile.Launch(caster, target, ProjectileSpeed, Range); Helpers.RecursiveLayerChange(projectile.gameObject.transform, layer); projectile.ProjectileCollided += OnProjectileCollided; }
void LaunchMagicProjectile() { MagicProjectile projectile = grimiore.magicEffect.GetComponent <MagicProjectile>(); projectileInstance = projectile.Launch( grimiore, projectileLaunchPoint.transform.position, projectileTarget.transform ); }
public void Fire(Transform target) { OnRelease (); if (projectile == null) return; projectile.transform.forward = transform.forward; projectile.target = getRawTarget ? target : target.GetTarget(); projectile.Fire (); projectile = null; }
public MagicWeapon(World world, WeaponType type, Target target, Actor origin, uint id) : base(world, type, target, origin, id) { projectile = (MagicProjectile)type.Projectile; Angle = (Position - TargetPosition).FlatAngle; calculateSpeed(); TargetPosition += getInaccuracy(projectile.Inaccuracy); rayPhysics = new RayPhysics(world); }
public void Load() { generatedPositionNoise = positionNoise.GenerateRandom (); projectile = PoolManager.Instance.GetInstance (instanceName).GetComponent<MagicProjectile>(); projectile.gameObject.SetTag(gameObject.tag, true); projectile.Initialize (); projectile.Load (); OnHold (); }
public MagicWeapon(World world, WeaponInit init) : base(world, init) { projectile = (MagicProjectile)Type.Projectile; speed = init.Convert("Speed", Vector.Zero); speedLeft = init.Convert("SpeedLeft", Vector.Zero); if (speed == Vector.Zero) { calculateSpeed(); } rayPhysics = new RayPhysics(world); }
public void useAbility(short type) { TestScene scene = entity.scene as TestScene; Vector2 pos = new Vector2(entity.position.X, entity.position.Y); Sprite sprite; //Get relative direction of mouse float theta = InputHandler.getMouseDirectionInRad(scene.camera.worldToScreenPoint(pos)); switch (type) { case 0: sprite = new Sprite(musicAttack_1); sprite.setRenderLayer(1); ProjectileWave projectileWave = new ProjectileWave(theta, 8f, 5f); if (!_animations.isAnimationPlaying(Animations.ATTACK_RUN)) { _animations.play(Animations.ATTACK_RUN); } createProjectile("Wave_Projectile", projectileWave, pos, ref sprite); break; case 1: sprite = new Sprite(musicAttack_1); sprite.setRenderLayer(1); ProjectileLinear projectileLinear = new ProjectileLinear(theta, 8f, 5f); if (!_animations.isAnimationPlaying(Animations.ATTACK_RUN)) { _animations.play(Animations.ATTACK_RUN); } createProjectile("Linear_Projectile", projectileLinear, pos, ref sprite); break; case 2: sprite = new Sprite(musicAttack_1); sprite.setRenderLayer(1); MagicProjectile magicProjectile = new MagicProjectile(theta, 8f, 5f, _mover.tiledMap.getLayer <TiledTileLayer>("Ground")); if (!_animations.isAnimationPlaying(Animations.ATTACK_RUN)) { _animations.play(Animations.ATTACK_RUN); } createProjectile("Magic_Projectile", magicProjectile, pos, ref sprite); break; } }
void Update() { if (isFiring) { counter -= Time.deltaTime; if (counter <= 0) { counter = delay; MagicProjectile newMagicMissle = Instantiate(MagicMissle, Wand.position, Wand.rotation); newMagicMissle.speed = missleSpeed; } } else { counter = 0; } }
private void UpdateAttacks() { if (this.attack1Timer <= 0) { if (Input.GetButtonDown("Action1")) { MagicAttack attack = Instantiate(MagicAttackPrefab, this.transform.position, Quaternion.AngleAxis(Random.Range(0, 360), Vector3.forward)); float damageModifier = Mathf.Max(0.5F, this.stats.Attack1Strength / 5F); float sizeModifier = Mathf.Max(0.5F, this.stats.Attack1Size / 10F); attack.Initialise(damageModifier, sizeModifier); // Play audio this.audioPlayer.PlayClipRandom(this.blastAttackAudio); // Reset attack timer this.attack1Timer = 1.0F / this.attack1RateOfFire; } } else { // Count down attack timer this.attack1Timer -= Time.deltaTime; } if (this.attack2Timer <= 0) { if (Input.GetButtonDown("Action2")) { // Find direction based on player's current facing direction float projectileSpeed = 15F; Direction projectileDirection = (Direction)this.spriteAnimator.GetInteger("Direction"); Vector2 baseVelocity = Vector2.zero; if (projectileDirection == Direction.Right) { baseVelocity = Vector2.right * projectileSpeed; } else if (projectileDirection == Direction.Down) { baseVelocity = Vector2.down * projectileSpeed; } else if (projectileDirection == Direction.Left) { baseVelocity = Vector2.left * projectileSpeed; } else if (projectileDirection == Direction.Up) { baseVelocity = Vector2.up * projectileSpeed; } // Create N projectiles scattered across a range float damageModifier = Mathf.Max(0.5F, this.stats.Attack2Strength / 5F); int numProjectiles = this.stats.Attack2NumberOfProjectiles; // Scatter range is wider for more projectiles float scatterAngle = Mathf.Min(90, 9F * numProjectiles); for (int i = 0; i < numProjectiles; i++) { MagicProjectile projectile = Container.InstantiatePrefab(MagicProjectilePrefab).GetComponent <MagicProjectile>(); projectile.transform.position = this.transform.position; projectile.transform.rotation = Quaternion.AngleAxis(Random.Range(0, 360), Vector3.forward); float angle = Random.Range(-scatterAngle / 2, scatterAngle / 2); projectile.Initialise(Quaternion.AngleAxis(angle, Vector3.forward) * baseVelocity, damageModifier); } // Play audio this.audioPlayer.PlayClipRandom(this.orbAttackAudio, 0.15F); // Reset attack timer this.attack2Timer = 1.0F / this.attack2RateOfFire; } } else { // Count down attack timer this.attack2Timer -= Time.deltaTime; } }
public void Unload() { OnRelease (); projectile.Unload (); projectile = null; }