private void LaunchAbilityPosition() { Vector3 spawnPos = Vector3.zero; GameObject projectileObj = null; switch (m_ability.AbilityBase.SkillShotType) { case ESkillShotType.FrontSkill: spawnPos = m_attacker.GetTransformPosition(m_ability.AbilityBase.LaunchPos).transform.position; break; case ESkillShotType.FloorSkill: if (m_ability.AbilityBase.LaunchPos == EEntityTransform.Floor) { spawnPos = Utils.Vector2ToVector3(m_targetPos); } else { spawnPos = m_attacker.GetTransformPosition(m_ability.AbilityBase.LaunchPos).transform.position; } break; default: break; } projectileObj = SpawnManager.instance.InstantiatePool(m_ability.AbilityBase.ProjectileIdentifier, spawnPos, m_attacker.GetTransformPosition(m_ability.AbilityBase.LaunchPos).transform.rotation); AbilityComponent projectile = projectileObj.GetComponent <AbilityComponent>(); projectile.Initialize(m_attacker, Utils.Vector2ToVector3(m_targetPos), m_ability, m_attacker.EntityAbilities.ServerAbilityHit); int projectileInstanceID = projectile.gameObject.GetInstanceID(); projectile.ServerInstanceId = m_ability.AbilityBase.ProjectileIdentifier + "_" + projectileInstanceID; m_attacker.EntityAbilities.CacheActiveAbility(projectile); m_attacker.EntityAbilities.RpcSpawnPositionProjectile(m_attacker.transform.rotation, m_ability.AbilityBase.ProjectileIdentifier, projectile.ServerInstanceId, projectile.Ability.AbilityBase.Identifier, Utils.Vector2ToVector3(m_targetPos), NetworkTime.Instance.ServerStep()); }
public override void Run() { m_attacker.transform.rotation = m_entityRotation; AbilityBase abilityBase = AbilityManager.instance.GetAbilityBase(m_abilityIdentifier); Ability ability = m_attacker.EntityAbilities.GetAbility(abilityBase.AttackType); EntityTransform launchPos = m_attacker.GetTransformPosition(abilityBase.LaunchPos); GameObject projectileObj = SpawnManager.instance.InstantiatePool(m_projectileIdentifier + "Client", launchPos.transform.position, launchPos.transform.rotation); AbilityComponent abilityComponent = projectileObj.GetComponent <AbilityComponent>(); abilityComponent.ServerInstanceId = m_instanceId; abilityComponent.Initialize(m_attacker, m_targetPos, ability); m_attacker.EntityAbilities.CacheActiveAbility(abilityComponent); }
private void LaunchAbilityTarget() { switch (m_ability.AbilityBase.Processor) { case AbilityProcessorType.DamageImpact: foreach (MobaEntity entity in m_targets) { new DamageProcess(m_attacker, entity, m_ability); if (m_ability.AbilityBase.ImpactParticleIdentifier != "") { EntityTransform impactTarget = entity.GetTransformPosition(m_ability.AbilityBase.LaunchPos); SpawnManager.instance.InstantiatePool(m_ability.AbilityBase.ImpactParticleIdentifier, impactTarget.transform.position, impactTarget.transform.rotation); entity.EntityAbilities.RpcSpawnImpactParticle(m_ability.AbilityBase.ImpactParticleIdentifier, (int)EEntityTransform.Center); } } break; case AbilityProcessorType.LaunchAbility: foreach (MobaEntity targetEntity in m_targets) { EntityTransform spawnPos = m_attacker.GetTransformPosition(m_ability.AbilityBase.LaunchPos); GameObject projectileObj = SpawnManager.instance.InstantiatePool(m_ability.AbilityBase.ProjectileIdentifier, spawnPos.transform.position, spawnPos.transform.rotation); AbilityComponent projectile = projectileObj.GetComponent <AbilityComponent>(); projectile.Initialize(m_attacker, targetEntity, m_ability, m_attacker.EntityAbilities.ServerAbilityHit); int projectileInstanceID = projectile.gameObject.GetInstanceID(); projectile.ServerInstanceId = m_ability.AbilityBase.ProjectileIdentifier + "_" + projectileInstanceID; m_attacker.EntityAbilities.CacheActiveAbility(projectile); m_attacker.EntityAbilities.RpcSpawnTargetProjectile(m_attacker.transform.rotation, m_ability.AbilityBase.ProjectileIdentifier, projectile.ServerInstanceId, projectile.Ability.AbilityBase.Identifier, targetEntity.InstanceId, NetworkTime.Instance.ServerStep()); } break; case AbilityProcessorType.CastSideEffectsOnly: foreach (MobaEntity targetEntity in m_targets) { targetEntity.EntityAbilities.ApplyAbilityEffects(m_ability, m_attacker); } break; default: break; } }