public override void UpdateSkillActivation(ItemSkill SourceItemSkill, float CurrentActivationTime, bool StillActivating, bool ActivationIntervallReached) { if (CurrentActivationTime < ActivationTime) { return; } // Spawn and Initialize Projectile: SkillProjectile SpawnedProjectile = Instantiate(ProjectilePrefab, SourceItemSkill.transform.position, SourceItemSkill.GetCurrentOwner().transform.rotation); SpawnedProjectile.InitializeProjectile(SourceItemSkill.GetCurrentOwner(), SourceItemSkill, this); if (ThrowSound) { var audioSource = SourceItemSkill.GetComponent <AudioSource>(); audioSource.clip = ThrowSound; audioSource.volume = 1; audioSource.loop = false; audioSource.Play(); } // Stop Skill Activation: if (Cooldown > 0) { SourceItemSkill.SetCurrentCooldown(Cooldown); } RemoveActivationMovementRateModifier(SourceItemSkill, SourceItemSkill.GetCurrentOwner()); SourceItemSkill.StoppedActivatingSkillWithHitObjects(this); SourceItemSkill.FinishedSkillActivation(); }
// private bool CastAreaBottomSkill(Mage mage, LayerMask IgnorePlayerSpell, LayerMask FloorMask, Vector3 mousePosition, bool isAnimation){ private bool CastAreaBottomSkill(Mage mage, LayerMask FloorMask, Vector3 mousePosition) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit floorHit; RaycastHit uiHit; // if ( isAnimation ){ // Vector3 vec = new Vector3(Random.Range(-40,40), 50, 10f+Random.Range(-40,40)); // SkillProjectile projectile = AreaBotSkillProjectile.Clone(ElementController.Instance.GetSkillProjectile(mage.Data.GetElement()), mage, vec, new Vector3(vec.x, 0, vec.z),isAnimation); // _animationList.Add(projectile); // return true; // } // if (!Physics.Raycast(ray, out uiHit, Mathf.Infinity, IgnorePlayerSpell) && // Physics.Raycast(ray, out floorHit, Mathf.Infinity, FloorMask) && // !isAnimation) if (!Physics.Raycast(ray, out uiHit, Mathf.Infinity, IgnoreSkill) && Physics.Raycast(ray, out floorHit, Mathf.Infinity, FloorMask)) { // SkillProjectile projectile = AreaBotSkillProjectile.Clone(ElementController.Instance.GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(floorHit.point.x, 0, floorHit.point.z), new Vector3(floorHit.point.x, 0, floorHit.point.z),isAnimation); SkillProjectile.Clone <AreaBotSkillProjectile>(GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(floorHit.point.x, 0, floorHit.point.z), null, new Vector3(floorHit.point.x, 0, floorHit.point.z)); return(true); } else { return(false); } }
public uint CreateSkillProjectile(SkillType skillP, Facing facing, Position position, int rankP, int speed) { SkillProjectile skillProjectile; Movement movement; Sprite sprite; Collideable collideable; uint eid = Entity.NextEntity(); Vector2 direction = getDirectionFromFacing(facing); position.EntityID = eid; position.Center += direction * 70; switch (skillP) { case SkillType.BenignParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/BlueBullet"), SpriteBounds = new Rectangle(0, 0, 10, 10), }; position.Radius = 5; break; default: throw new Exception("Not a projectile skill"); } collideable = new Collideable() { EntityID = eid, RoomID = position.RoomID, Bounds = new CircleBounds(position.Center, position.Radius), }; game.SkillProjectileComponent.Add(eid, skillProjectile); game.MovementComponent.Add(eid, movement); game.PositionComponent.Add(eid, position); game.SpriteComponent.Add(eid, sprite); game.CollisionComponent.Add(eid, collideable); return(eid); }
// public static PathFollowerSkillProjectile Clone(SkillProjectile skillPrefab, Mage mage, Waypoint EndWaypoint, bool isAnimation) public static PathFollowerSkillProjectile Clone(SkillProjectile skillPrefab, Mage mage, Waypoint EndWaypoint) { Vector3 pos = new Vector3(EndWaypoint.transform.position.x, EndWaypoint.transform.position.y, EndWaypoint.transform.position.z); var skillProjectile = (PathFollowerSkillProjectile)GetPoolable(skillPrefab); skillProjectile.transform.position = pos; skillProjectile.transform.rotation = Quaternion.identity; skillProjectile.transform.LookAt(EndWaypoint.Previous.transform); skillProjectile._data = mage.Data.GetSkillData(); skillProjectile._player = mage.Player; // skillProjectile._isAnimation = isAnimation; return(skillProjectile); }
// private bool CastAllMinionsSkill(Mage mage, LayerMask IgnorePlayerSpell, LayerMask FloorMask, Vector3 mousePosition, bool isAnimation){ private bool CastAllMinionsSkill(Mage mage, LayerMask FloorMask, Vector3 mousePosition) { mage.Player.WaveManager.GetMinionList().ForEach((Minion minion) => { // SkillProjectile projectile = AllMinionsSkillProjectile.Clone(ElementController.Instance.GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(minion.transform.position.x, 50, minion.transform.position.z), minion.gameObject,isAnimation); SkillProjectile.Clone <AllMinionsSkillProjectile>(GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(minion.transform.position.x, 50, minion.transform.position.z), minion.gameObject, new Vector3()); // if (isAnimation){ // _animationList.Add(projectile); // } }); return(true); }
// private bool CastAllTowersSkill(Mage mage, LayerMask IgnorePlayerSpell, LayerMask FloorMask, Vector3 mousePosition, bool isAnimation){ private bool CastAllTowersSkill(Mage mage, LayerMask FloorMask, Vector3 mousePosition) { mage.Player.Data.GetMages().ToList().ForEach((Mage thisMage) => { if (thisMage.GetBuilding() != null && thisMage.GetBuilding() is Tower) { Tower tower = thisMage.GetBuilding() as Tower; // SkillProjectile projectile = AllTowersSkillProjectile.Clone(ElementController.Instance.GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(tower.gameObject.transform.position.x, 50, tower.gameObject.transform.position.z), tower.gameObject,isAnimation); SkillProjectile.Clone <AllTowersSkillProjectile>(GetSkillProjectile(mage.Data.GetElement()), mage, new Vector3(tower.gameObject.transform.position.x, 50, tower.gameObject.transform.position.z), tower.gameObject, new Vector3()); // if (isAnimation){ // _animationList.Add(projectile); // } } }); return(true); }
private void SkillProjectileCollision(uint p, uint p_2, bool friendly) { uint skillId, oId; if (_game.SkillProjectileComponent.Contains(p)) { skillId = p; oId = p_2; } else { skillId = p_2; oId = p; } SkillProjectile skill = _game.SkillProjectileComponent[skillId]; _game.SkillSystem.TriggerEffect(skill.skill, skill.rank, friendly, oId); }
public virtual IEnumerator Fire(Character caster, Vector2Int direction, DungeonManager dungeonManager) { int index = 0; while (index < arrows) { Vector3 spawnPosition = caster.transform.position + new Vector3(direction.x, direction.y) * castRange; GameObject projectile = Instantiate(skillProjectilePrefab.gameObject, spawnPosition, skillProjectilePrefab.gameObject.transform.rotation); SkillProjectile skillProjectile = projectile.GetComponent <SkillProjectile>(); skillProjectile.Initialize(caster, this, dungeonManager.dungeonGenerator.DungeonTerrainTiles, dungeonManager.dungeonGenerator.grid); Grid grid = dungeonManager.dungeonGenerator.grid; Vector3 target = caster.transform.position + new Vector3Int(direction.x, direction.y, 0) * (int)skillProjectile.range; skillProjectile.SetNextTile(grid.WorldToCell(target)); index++; yield return(new WaitForSeconds(0.1f)); } }
/// <summary> /// For using basic projectile: rank is damage, use last parameter for spritesheet /// </summary> /// <param name="skillP"></param> /// <param name="direction"></param> /// <param name="position"></param> /// <param name="rankP"></param> /// <param name="speed"></param> /// <param name="owner"></param> /// <param name="canHitPlayers"></param> /// <param name="canHitEnemies"></param> /// <param name="spriteSheet"></param> /// <returns></returns> public uint CreateSkillProjectile(SkillType skillP, Vector2 direction, Position position, int rankP, int speed, uint owner, bool canHitPlayers = false, bool canHitEnemies = true, string spriteSheet = null, Rectangle spriteBounds = new Rectangle()) { SkillProjectile skillProjectile; Movement movement; Sprite sprite; Collideable collideable; uint eid = Entity.NextEntity(); direction = Vector2.Normalize(direction); position.EntityID = eid; position.Center += direction * 40; switch (skillP) { #region Vermis Projectiles case SkillType.ThrownBlades: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(0, 250, 50, 50), }; position.Radius = 10; break; case SkillType.MaliciousParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(300, 150, 50, 50), }; position.Radius = 10; break; case SkillType.MindlessParasites: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(250, 50, 50, 50), }; position.Radius = 10; break; case SkillType.BenignParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; #endregion #region Cultist Projectiles #region Psionic Spear case SkillType.PsionicSpear: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Enslave case SkillType.Enslave: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Taint case SkillType.Taint: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Rot case SkillType.Rot: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #endregion case SkillType.SniperShot: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 800, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/Skills/Effects/AlienOrb"), SpriteBounds = new Rectangle(0, 0, 20, 20), }; position.Radius = 10; break; case SkillType.BasicRangedAttack: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 800, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>(spriteSheet), SpriteBounds = spriteBounds, }; position.Radius = 10; break; default: throw new Exception("Not a projectile skill"); } collideable = new Collideable() { EntityID = eid, RoomID = position.RoomID, Bounds = new CircleBounds(position.Center, position.Radius), }; game.SkillProjectileComponent.Add(eid, skillProjectile); game.MovementComponent.Add(eid, movement); game.PositionComponent.Add(eid, position); game.SpriteComponent.Add(eid, sprite); game.CollisionComponent.Add(eid, collideable); return eid; }
public uint CreateSkillProjectile(Skills skillP, Facing facing, Position position) { SkillProjectile skillProjectile; Movement movement; Sprite sprite; Collideable collideable; uint eid = Entity.NextEntity(); Vector2 direction = getDirectionFromFacing(facing); position.EntityID = eid; position.Center += direction * 70; switch (skillP) { case Skills.benignParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = 300, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load<Texture2D>("Spritesheets/BlueBullet"), SpriteBounds = new Rectangle(0, 0, 10, 10), }; position.Radius = 5; break; default: throw new Exception("Not a projectile skill"); } collideable = new Collideable() { EntityID = eid, RoomID = position.RoomID, Bounds = new CircleBounds(position.Center, position.Radius), }; game.SkillProjectileComponent.Add(eid, skillProjectile); game.MovementComponent.Add(eid, movement); game.PositionComponent.Add(eid, position); game.SpriteComponent.Add(eid, sprite); game.CollisionComponent.Add(eid, collideable); return eid; }
/// <summary> /// For using basic projectile: rank is damage, use last parameter for spritesheet /// </summary> /// <param name="skillP"></param> /// <param name="direction"></param> /// <param name="position"></param> /// <param name="rankP"></param> /// <param name="speed"></param> /// <param name="owner"></param> /// <param name="canHitPlayers"></param> /// <param name="canHitEnemies"></param> /// <param name="spriteSheet"></param> /// <returns></returns> public uint CreateSkillProjectile(SkillType skillP, Vector2 direction, Position position, int rankP, int speed, uint owner, bool canHitPlayers = false, bool canHitEnemies = true, string spriteSheet = null, Rectangle spriteBounds = new Rectangle()) { SkillProjectile skillProjectile; Movement movement; Sprite sprite; Collideable collideable; uint eid = Entity.NextEntity(); direction = Vector2.Normalize(direction); position.EntityID = eid; position.Center += direction * 40; switch (skillP) { #region Vermis Projectiles case SkillType.ThrownBlades: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(0, 250, 50, 50), }; position.Radius = 10; break; case SkillType.MaliciousParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(300, 150, 50, 50), }; position.Radius = 10; break; case SkillType.MindlessParasites: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(250, 50, 50, 50), }; position.Radius = 10; break; case SkillType.BenignParasite: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; #endregion #region Cultist Projectiles #region Psionic Spear case SkillType.PsionicSpear: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Enslave case SkillType.Enslave: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Taint case SkillType.Taint: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #region Rot case SkillType.Rot: { skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 1, rank = rankP, OwnerID = owner, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/skillPlaceHolder2"), SpriteBounds = new Rectangle(100, 0, 50, 50), }; position.Radius = 10; break; } #endregion #endregion case SkillType.SniperShot: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 800, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>("Spritesheets/Skills/Effects/AlienOrb"), SpriteBounds = new Rectangle(0, 0, 20, 20), }; position.Radius = 10; break; case SkillType.BasicRangedAttack: skillProjectile = new SkillProjectile() { EntityID = eid, skill = skillP, maxRange = 800, rank = rankP, CanHitEnemies = canHitEnemies, CanHitPlayers = canHitPlayers, }; movement = new Movement() { EntityID = eid, Direction = direction, Speed = speed, }; sprite = new Sprite() { EntityID = eid, SpriteSheet = game.Content.Load <Texture2D>(spriteSheet), SpriteBounds = spriteBounds, }; position.Radius = 10; break; default: throw new Exception("Not a projectile skill"); } collideable = new Collideable() { EntityID = eid, RoomID = position.RoomID, Bounds = new CircleBounds(position.Center, position.Radius), }; game.SkillProjectileComponent.Add(eid, skillProjectile); game.MovementComponent.Add(eid, movement); game.PositionComponent.Add(eid, position); game.SpriteComponent.Add(eid, sprite); game.CollisionComponent.Add(eid, collideable); return(eid); }
public void DeleteAnimation(SkillProjectile item) { //Debug.Log("Deleted Animation"); _animationList.Remove(item); }