2025-05-18 01:04:31 +08:00

1888 lines
54 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "Cha_Skill" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.ResourceManagement.AsyncOperations;
namespace G
{
/// <summary>
/// 角色技能
/// </summary>
public class Cha_Skill : MonoBehaviour
{
class SkillInfo
{
public readonly List<GameObject> prefabs = new List<GameObject>();
public readonly List<GameObject> instances = new List<GameObject>();
public GameObject instance => instances[0];
public GameObject instance2 => instances[1];
public bool isInit;
public int repeat;
public int repeatCount;
public float repeatDelay;
public int repeatDamage;
//public Vector3 repeatPosition;
}
#region Field
private Transform _mytransform;
/// <summary>
///
/// </summary>
private Transform _chaRHand;
/// <summary>
///
/// </summary>
private float _baseDamage = 1f;
public float skillatk;
private int _skillAttack;
private int _motionKind;
private int _gSkillAttack;
private int _gMotionKind;
/// <summary>
/// 施法延迟
/// </summary>
private float _castingDelay;
private float _repeatAtk;
private bool _repeat;
private int _repeatTime;
private int _repeatKind;
private float _repeatDelay;
/// <summary>
///
/// </summary>
private float _currentDelay = 10f;
private EntityMainPlayer _scriptCha1;
private int _skillIndex = -1;
private Ef_rotfog _scriptRotfog;
private float _ptOffDelay = 10f;
public Transform swordwind;
public Transform rapidstab;
public Transform supersword;
public Transform energypillar;
public Transform pt_attackup;
public Transform pt_defenceup;
public Transform pt_boom;
public Transform pt_poison;
public Transform ef_gather;
public Transform deathhand;
public Transform chosun;
public Transform junwui;
public Transform jin;
public Transform ef_rotfog;
public Transform fincanon;
public Transform swordrain_b;
public Transform swordrain_s;
public Transform swordrain;
public Transform wing;
public Transform ef_groundbreak;
public Transform bombsphere;
public Transform lightningblade;
private Transform directionArrow;
private Transform pt_ki;
private Transform c_fincanon;
private Transform c_groundbreak;
private Transform c_bombsphere;
private const int MAX_SKILL_COUNT = 40;
private readonly SkillInfo[] _skillInfos = new SkillInfo[MAX_SKILL_COUNT];
private Cha_Sound _scriptSound;
#endregion
#region Method
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
public void SetBaseDamage(float damage)
{
_baseDamage = damage;
}
/// <summary>
///
/// </summary>
/// <param name="attack"></param>
/// <param name="skillAttack"></param>
/// <param name="motionKind"></param>
public void SetSkill(int attack, int skillAttack, int motionKind)
{
_skillAttack = Mathf.Max(1, skillAttack);
}
/// <summary>
/// 设置
/// </summary>
/// <param name="attack"></param>
/// <param name="skillAttack"></param>
/// <param name="motionKind"></param>
public void SetGeneralSkill(int attack, int skillAttack, int motionKind)
{
_gSkillAttack = (int)(attack * skillAttack * 0.01f);
_gSkillAttack = Mathf.Max(1, _gSkillAttack);
_gMotionKind = motionKind;
}
/// <summary>
///
/// </summary>
/// <param name="hand"></param>
public void SetRHand(Transform hand)
{
_chaRHand = hand;
}
/// <summary>
/// 角色技能
/// </summary>
/// <param name="index"></param>
/// <param name="general"></param>
/// <returns></returns>
public float SkillOn(int index, bool general)
{
float result = 10;
_scriptCha1.SkillStart();
//pt_ki.particleEmitter().emit = true;
//_rigidbody.drag = 20f;
_scriptCha1.drag = 20f;
_skillIndex = index;
ef_rotfog.position = _mytransform.position;
_scriptRotfog.RotfogOn(1.5f, 40f, 800, 150, 0.5f);
Time.timeScale = 0.1f;
if (!general)
{
//var skillItem = ItemProxy.Instance.GetStaticItem<ItemSkill>(skill_index + 2001);
//motionkind = skillItem.kind;// script_DBskill.ss[skill_index, 0]._kind;
//cur_skill_grade[skill_index] = Mathf.Max(0, cur_skill_grade[skill_index]);
skillatk = _scriptCha1.sourceTotalAttack;// skillItem.attackpoint;// script_DBskill.ss[skill_index, cur_skill_grade[skill_index]]._attackpoint;
//result = skillItem.cooltime;// script_DBskill.ss[skill_index, 0]._cooltime;
}
else
{
_motionKind = _gMotionKind;
skillatk = _gSkillAttack;
_skillIndex += 21;
}
//
if (_motionKind == 1)
{
directionArrow.GetComponent<Renderer>().enabled = true;
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast1);
//script_cha1.PlayAnim("cast1");
}
else if (_motionKind == 2)
{
GameCamera.Instance.ZoomIn(20, 16, 0.3f);
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast2);
if (_skillIndex == 13 || _skillIndex == 15)
{
jin.gameObject.SetActive(true);
jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f;
}
else if (_skillIndex == 19)
{
wing.gameObject.SetActive(true);
}
}
else if (_motionKind == 3)
{
directionArrow.GetComponent<Renderer>().enabled = true;
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast3);
if (_skillIndex == 8)
{
ef_gather.position = _mytransform.position + Vector3.up * 0.22f;
ef_gather.gameObject.SetActive(true);
ef_gather.GetComponent<Ef_energy_gather>().SetTex(0, 1.2f);
}
else if (_skillIndex == 9)
{
ef_gather.position = _mytransform.position + Vector3.up * 0.22f;
ef_gather.gameObject.SetActive(true);
ef_gather.GetComponent<Ef_energy_gather>().SetTex(1, 0.8f);
}
}
else if (_motionKind == 4)
{
directionArrow.GetComponent<Renderer>().enabled = true;
//script_cha1.PlayAnim("cast4");
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast4);
if (_skillIndex == 16)
{
jin.gameObject.SetActive(true);
jin.position = _mytransform.position + Vector3.up * 0.01f;
if (c_fincanon == null)
{
c_fincanon = Instantiate(fincanon, _mytransform.position, _mytransform.rotation);
c_fincanon.GetComponent<Rigidbody>().mass = skillatk * _baseDamage * 0.01f;
c_fincanon.parent = _mytransform;
}
else
{
c_fincanon.gameObject.SetActive(true);
c_fincanon.position = _mytransform.position;
c_fincanon.rotation = _mytransform.rotation;
c_fincanon.parent = _mytransform;
}
}
}
return result;
}
/// <summary>
/// 宠物技能
/// </summary>
/// <param name="index"></param>
public void PetSkillOn(int index)
{
ef_rotfog.position = _mytransform.position;
_scriptRotfog.RotfogOn(3f, 4f, 80, 5, 3f);
GameCamera.Instance.ZoomIn(5, 15, 1f);
switch (index)
{
case 0:
_scriptCha1.CallHorse();
break;
case 1:
_scriptCha1.Fly();
break;
}
}
/// <summary>
/// 延迟技能
/// </summary>
/// <param name="index"></param>
public void DelaySkill(int index)
{
if (c_groundbreak == null)
{
c_groundbreak = Instantiate(ef_groundbreak, _mytransform.position, Quaternion.identity);
}
else
{
c_groundbreak.position = _mytransform.position;
c_groundbreak.gameObject.SetActive(true);
}
int damage = _scriptCha1.sourceTotalAttack;
c_groundbreak.GetComponent<Rigidbody>().mass = damage;
switch (index)
{
case 2:
c_groundbreak.localScale = Vector3.one * 0.5f;
GameCamera.Instance.Hitcam2(2f);
break;
case 19:
c_groundbreak.localScale = Vector3.one * 1f;
GameCamera.Instance.Hitcam2(4f);
Time.timeScale = 0.6f;
StartCoroutine(ResetTimeScale());
c_bombsphere = Object.Instantiate(bombsphere, _mytransform.position, Quaternion.identity);
Object.Destroy(c_bombsphere.gameObject, 1.2f);
break;
}
}
/// <summary>
/// 重复技能
/// </summary>
/// <param name="kind"></param>
/// <param name="count"></param>
/// <param name="delay"></param>
/// <param name="next"></param>
public void Repeatskill(int kind, int count, float delay, bool next = false)
{
_repeat = true;
_repeatKind = kind;
_repeatTime = count;
_repeatDelay = delay;
_currentDelay = _repeatDelay;
if (next)
return;
switch (_repeatKind)
{
case 8:
{
Vector3 rndPos = transform.position + Random.onUnitSphere * Random.Range(0.3f, 0.6f);
rndPos.y = 0f;
if (!TryNewOrGetSkillInfo(_repeatKind, out var skillInfo) && _repeatTime > 0)
{
int instance_index = Mathf.Max(1, _repeatTime);
skillInfo.instances[instance_index].transform.SetPositionAndRotation(rndPos + Vector3.up * 0.05f, _mytransform.rotation);
skillInfo.instances[instance_index].GetComponent<SkillBase>().damage = Mathf.Max(1, skillInfo.repeatDamage);
skillInfo.instances[instance_index].SetActive(true);
}
}
break;
case 11:
{
var rndpos = _mytransform.position + _mytransform.forward * 0.3f + _mytransform.right * Random.Range(-0.2f, 0.2f);
rndpos.y = 0.01f;
var skillInfo = _skillInfos[10];
skillInfo.instance.transform.position = rndpos;
skillInfo.instance.GetComponent<Rigidbody>().mass = _repeatAtk;
GameCamera.Instance.Hitcam2(1.5f);
}
break;
case 17:
{
Vector3 rndPos;
if (_scriptCha1.targetEnemy)
rndPos = _scriptCha1.targetEnemy.position;
else
rndPos = transform.position + Random.onUnitSphere * Random.Range(0.2f, 0.35f);
rndPos.y = -1f;
if (!TryNewOrGetSkillInfo(17, out var skillInfo) && _repeatTime > 0)
{
int instance_index = Mathf.Max(0, 5 - _repeatTime);
skillInfo.instances[instance_index].GetComponent<Rigidbody>().mass = skillInfo.repeatDamage;
skillInfo.instances[instance_index].transform.position = rndPos;
skillInfo.instances[instance_index].SetActive(true);
GameCamera.Instance.Hitcam2(1.2f);
}
}
break;
case 25:
{
float num = (3 - _repeatTime) * 45;
Vector3 eulerAngles = _mytransform.eulerAngles;
var tempradian = (num - eulerAngles.y + 90f) * 0.01745f;
var rndpos = _mytransform.position + 0.3f * Vector3.right * Mathf.Cos(tempradian) + 0.3f * Vector3.forward * Mathf.Sin(tempradian);
rndpos.y = -1f;
var skillInfo = _skillInfos[10];
skillInfo.instances[_repeatTime + 1].GetComponent<Rigidbody>().mass = _repeatAtk;
skillInfo.instances[_repeatTime + 1].transform.localScale = Vector3.one + Vector3.up * Random.Range(-0.1f, 0.5f);
skillInfo.instances[_repeatTime + 1].transform.localScale *= Random.Range(0.7f, 1.2f);
skillInfo.instances[_repeatTime + 1].transform.position = rndpos;
skillInfo.instances[_repeatTime + 1].gameObject.SetActive(true);
break;
}
case 29:
{
var rndpos = _mytransform.position + _mytransform.forward * (0.1f + 0.14f * (6 - _repeatTime)) + _mytransform.right * Random.Range(-0.1f, 0.1f);
rndpos.y = -1f;
var skillInfo = _skillInfos[28];
skillInfo.instances[_repeatTime + 1].GetComponent<Rigidbody>().mass = _repeatAtk;
skillInfo.instances[_repeatTime + 1].transform.position = rndpos;
skillInfo.instances[_repeatTime + 1].gameObject.SetActive(true);
}
break;
case 31:
{
var skillInfo = _skillInfos[30];
skillInfo.instance.GetComponent<Rigidbody>().mass = _repeatAtk;
skillInfo.instance.transform.position = _mytransform.position;
skillInfo.instance.transform.rotation = Quaternion.Euler(0f, _repeatTime * 60, 0f);
skillInfo.instance.SetActive(true);
}
break;
}
}
/// <summary>
///
/// </summary>
/// <param name="index"></param>
/// <param name="args"></param>
public void FireSkill(int index, int[] args)
{
_scriptCha1.SkillStart();
_scriptSound.PlaySound("bt_jin");
pt_ki.particleEmitter().emit = false;
int damage = _scriptCha1.sourceTotalAttack * args[2] / 100 + args[1];
switch (index)
{
case 1:
Sk_1_();
break;
case 2:
Sk_2_wheelwind(damage, args);
break;
case 3:
Sk_3_();
break;
case 4:
Sk_4_(damage);
break;
case 5:
Sk_05_(damage);
break;
case 6:
Sk_06_Async(damage, args);
break;
case 7:
Sk_07_(damage);
break;
case 8:
Sk_08_Async(damage, args);
//Sk_08_(damage);
break;
case 9:
Sk_09_(damage);
break;
case 10:
Sk_10_(damage);
break;
case 11:
Sk_11_(damage, args);
break;
case 12:
Sk_12_Async(damage, args);
break;
case 13:
Sk_13_Async(damage, args);
break;
case 14:
Sk_14_Async(damage, args);
break;
case 15:
Sk_15_(damage, args);
break;
case 16:
Sk_16_(damage, args);
break;
case 17:
Sk_17_Async(damage, args);
break;
case 18:
Sk_18_(damage, args);
break;
case 19:
Sk_19_(damage, args);
break;
case 20:
Sk_20_Async(damage, args);
break;
case 21:
Sk_21_Feilong_Async(damage, args[6], args[8]);
break;
case 22:
Sk_22_(damage, args);
break;
case 23:
Sk_23_(damage, args);
break;
case 24:
Sk_24_(damage, args);
break;
case 25:
Sk_25_(damage, args);
break;
case 26:
Sk_26_(damage, args);
break;
case 27:
Sk_27_(damage, args);
break;
case 28:
Sk_28_(damage, args);
break;
case 29:
Sk_29_(damage, args);
break;
case 30:
Sk_30_(damage, args);
break;
case 31:
Sk_31_(damage, args);
break;
case 32:
Sk_32_(damage, args);
break;
case 33:
Sk_33_(damage, args);
break;
case 34:
Sk_34_(damage, args);
break;
case 35:
Sk_35_(damage, args);
break;
case 36:
Sk_36_(damage, args);
break;
case 37:
Sk_37_(damage, args);
break;
case 38:
Sk_38_(damage, args);
break;
case 39:
Sk_39_(damage, args);
break;
case 40:
Sk_40_(damage, args);
break;
}
_skillIndex = -1;
GameLevel.Instance.OnSkill(index);
MissionProxy.Instance.OnEvent(MissionProxy.使, 1, index);
}
public IEnumerator Pt_Off(Transform _pt)
{
yield return new WaitForSeconds(_ptOffDelay);
//_pt.particleEmitter().emit = false;
}
public void BoomOn(int index, bool collider)
{
pt_boom.GetComponent<Ef_boom>().SetTex(index, _mytransform.position, collider);
}
public IEnumerator ResetTimeScale()
{
yield return new WaitForSeconds(0.5f);
Time.timeScale = 1f;
BoomOn(0, false);
}
public IEnumerator BambooFin()
{
yield return new WaitForSeconds(3.5f);
//c_crow.particleEmitter().emit = false;
//c_bamboobase.particleEmitter().emit = false;
}
/// <summary>
///
/// </summary>
private void Sk_AttackUp()
{
//pt_attackup.particleEmitter().emit = false;
_scriptCha1.ResetAtk();
}
/// <summary>
///
/// </summary>
private void Sk_DefenceUp()
{
var skillInfo = _skillInfos[2];
skillInfo.instance.SetActive(false);
_scriptCha1.ResetDef();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IEnumerator Sk_SwordDance()
{
yield return new WaitForSeconds(0.5f);
_scriptCha1.StopAnimation();
//AnimationState comein = script_cha1.PlayAnimQueued("change_in_atk");
//comein.speed = 0.5f;
//_scriptCha1.PlayAnimation("change_in_atk");
_scriptCha1.entityView.Appear();
_scriptCha1.StartControl();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IEnumerator Sk_Mirage()
{
yield return new WaitForSeconds(1f);
_scriptCha1.entityView.Appear();
_scriptCha1.StartControl();
_scriptCha1.PlayAnimation("attackex2_impact");
}
/// <summary>
///
/// </summary>
/// <param name="kind"></param>
/// <param name="skillInfo"></param>
/// <returns>is New</returns>
private bool TryNewOrGetSkillInfo(int kind, out SkillInfo skillInfo)
{
int index = kind - 1;
skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
return true;
}
return false;
}
private void Sk_1_()
{
_scriptCha1.PlayAnimation("jumpattack_air");
//AnimationState animationState = script_cha1.PlayAnimQueued("jumpattack_impact");
//animationState.speed = 0.25f;
}
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
private async void Sk_2_wheelwind(int damage, int[] args)
{
_scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind);
int index = 1;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var wheelwind = await LoadAssetAsync("sk_wheelwind").Task;
var instance = Instantiate(wheelwind, _mytransform);
instance.transform.localPosition = Vector3.zero;
skillInfo.instances.Add(instance);
}
if (args.Length > 9 && args[8] > 0)
skillInfo.instance.GetComponent<SkillWheelwind>().SetTornado(args[8], args[9]);
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
}
private void Sk_3_()
{
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Skill03);
int index = 2;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(pt_defenceup, _mytransform.position, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
}
else
{
CancelInvoke(nameof(Sk_DefenceUp));
}
pt_boom.GetComponent<Ef_boom>().SetTex(1, _mytransform.position, true);
_scriptCha1.DefenceUp(100, 0);
Invoke(nameof(Sk_DefenceUp), skillatk);
}
private void Sk_4_(int damage)
{
_scriptCha1.PlayAnimation("rapidstab");
int index = 3;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(rapidstab, _mytransform.position + _mytransform.forward * 0.25f + Vector3.up * 0.04f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.25f + Vector3.up * 0.04f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
}
private void Sk_05_(int damage)
{
//script_cha1.SetAnimSpeed("attackex3", 0.35f);
_scriptCha1.PlayAnimation("attackex3");
//temp = script_cha1.PlayAnimQueued("attackex3_impact");
//temp.speed = 0.25f;
int index = 4;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(lightningblade, _mytransform.position + Vector3.up * 0.05f, _mytransform.rotation);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
}
/// <summary>
/// 幽灵剑
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_06_Async(int damage, int[] args)
{
//script_cha1.PlayAnimation("skill03");
int index = 5;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var prefab = await LoadAssetAsync("sk_spiritsword").Task;
var instance = Instantiate(prefab);
skillInfo.instances.Add(instance.gameObject);
}
var sword1 = skillInfo.instance.GetComponent<SkillSpiritSword>();
sword1.Reset();
sword1.swordCount = args[6];
sword1.power = damage;
skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.2f, _mytransform.rotation);
skillInfo.instance.SetActive(true);
}
private void Sk_07_(int damage)
{
_scriptCha1.PlayAnimation("skill03");
//ParticleEmitter particleEmitter = pt_attackup.particleEmitter();
//if (!particleEmitter.emit)
//{
// particleEmitter.emit = true;
//}
//else
//{
// CancelInvoke(nameof(Sk_AttackUp));
//}
pt_boom.GetComponent<Ef_boom>().SetTex(0, _mytransform.position, true);
_scriptCha1.AttackUp(0, 150);
Invoke(nameof(Sk_AttackUp), skillatk);
}
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
private void Sk_08_(int damage)
{
_scriptCha1.PlayAnimation("skill02");
ef_gather.position = _mytransform.position + Vector3.up * 0.22f;
ef_gather.gameObject.SetActive(true);
ef_gather.GetComponent<Ef_energy_gather>().SetTex(0, 1.2f);
int index = 7;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(pt_poison, _mytransform.position + Vector3.up * 0.22f, Quaternion.identity);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = Mathf.Max(1, damage);
}
/// <summary>
/// 如来神掌
/// </summary>
/// <param name="damage"></param>
private async void Sk_08_Async(int damage, int[] args)
{
_scriptCha1.PlayAnimation(EntityPlayer.Hash_Skill02);
const int MAX_RLSZ_AMOUNT = 10;
if (TryNewOrGetSkillInfo(8, out SkillInfo skillInfo))
{
var prefab = await LoadAssetAsync("sk_rlsz").Task;
var instance = Instantiate(prefab);
skillInfo.instances.Add(instance);
for (int i = 0; i < MAX_RLSZ_AMOUNT; i++)
{
instance = Instantiate(prefab);
instance.transform.localScale = Vector3.one * (0.6f - i * 0.03f);
skillInfo.instances.Add(instance);
}
}
if (_scriptCha1.targetEnemy)
{
var targetPos = _scriptCha1.targetEnemy.position;
var forward = (targetPos - _mytransform.position).normalized;
skillInfo.instance.transform.SetPositionAndRotation(targetPos + Vector3.up * 0.05f, Quaternion.LookRotation(forward));
}
else
{
skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, _mytransform.rotation);
}
skillInfo.instance.GetComponent<SkillBase>().damage = Mathf.Max(1, damage);
skillInfo.instance.SetActive(true);
int amoutIndex = (int)Cha_Moves.ArgIndex.Amount;
if (args != null && args.Length > amoutIndex)
{
int count = Mathf.Min(MAX_RLSZ_AMOUNT, args[amoutIndex]);
if (count > 0)
{
skillInfo.repeatDamage = damage;
skillInfo.repeatCount = count;
skillInfo.repeatDelay = 1f;
Repeatskill(8, count, 0.3f, true);
}
}
}
private void Sk_09_(int damage)
{
_scriptCha1.PlayAnimation("skill04");
ef_gather.position = _mytransform.position + Vector3.up * 0.22f;
ef_gather.gameObject.SetActive(true);
ef_gather.GetComponent<Ef_energy_gather>().SetTex(1, 0.8f);
int index = 8;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(deathhand, _mytransform.position + Vector3.up * 0.05f, _mytransform.rotation);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
}
private void Sk_10_(int damage)
{
_scriptCha1.PlayAnimation("skill_chargesmash");
int index = 9;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(supersword, _chaRHand.position, _chaRHand.rotation);
instance.up = _chaRHand.forward;
instance.parent = _chaRHand;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
}
private void Sk_11_(int damage, int[] args)
{
_scriptCha1.Invincibility(5f);
_scriptCha1.PlayAnimation("skill03");
_repeatAtk = damage;
int index = 10;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Object.Instantiate(energypillar);
skillInfo.instances.Add(instance.gameObject);
}
Repeatskill(11, 5, 0.8f);
}
/// <summary>
/// 独孤九剑
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_12_Async(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill01");
if (TryNewOrGetSkillInfo(12, out SkillInfo skillInfo))
{
var sworddance = await LoadAssetAsync("sk_sworddance").Task;
var instance = Instantiate(sworddance);
skillInfo.instances.Add(instance.gameObject);
//sworddance = await LoadAssetAsync("sk_sworddance2").Task;
//instance = Instantiate(sworddance);
//skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<SkillBase>().damage = damage;
skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right));
skillInfo.instance.SetActive(true);
if (args != null && args.Length > (int)Cha_Moves.ArgIndex.Special1 && args[(int)Cha_Moves.ArgIndex.Special1] > 0)
skillInfo.instance.GetComponent<SkillBase>().special1 = args[(int)Cha_Moves.ArgIndex.Special1];
//if (args[7] == 0)
//{
// skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
// skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right));
// skillInfo.instance.SetActive(true);
//}
//else
//{
// skillInfo.instance2.GetComponent<Rigidbody>().mass = damage;
// skillInfo.instance2.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right));
// skillInfo.instance2.SetActive(true);
//}
_scriptCha1.entityView.Disappear();
_scriptCha1.StopControl();
StartCoroutine(Sk_SwordDance());
}
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_13_Async(int damage, int[] args)
{
if (TryNewOrGetSkillInfo(13, out SkillInfo skillInfo))
{
var skillAsset = await LoadAssetAsync("sk_machine").Task;
for (int i = 0; i < 2; i++)
{
var instance = Instantiate(skillAsset);
instance.SetActive(false);
skillInfo.instances.Add(instance);
}
}
//_scriptCha1.PlayAnimation("skill03");
_scriptCha1.Invincibility(0.5f);
if (args.Length >= 7)
{
int count = args[6];
float life = args[7] * 0.001f;
for (int i = 0; i < count; i++)
{
skillInfo.instances[i].SetActive(true);
//skillInfo.instances[i].GetComponent<SkillGuard>().SetDamage(damage);
//skillInfo.instances[i].GetComponent<SkillGuard>().lifeTime = life;
skillInfo.instances[i].transform.position = transform.TransformPoint(Vector3.forward * 0.2f);
skillInfo.instances[i].transform.rotation = transform.rotation;
}
}
//if (TryNewOrGetSkillInfo(13, out SkillInfo skillInfo))
//{
// var skillAsset = await LoadAssetAsync("sk_guard").Task;
// for (int i = 0; i < 2; i++)
// {
// var instance = Instantiate(skillAsset);
// instance.SetActive(false);
// skillInfo.instances.Add(instance);
// }
//}
//_scriptCha1.PlayAnimation("skill03");
//_scriptCha1.Invincibility(1f);
//if (args.Length >= 7)
//{
// int count = args[6];
// float life = args[7] * 0.001f;
// for (int i = 0; i < count; i++)
// {
// skillInfo.instances[i].SetActive(true);
// skillInfo.instances[i].GetComponent<SkillGuard>().SetDamage(damage);
// skillInfo.instances[i].GetComponent<SkillGuard>().lifeTime = life;
// skillInfo.instances[i].transform.position = transform.TransformPoint(Vector3.forward * 0.2f);
// skillInfo.instances[i].transform.rotation = transform.rotation;
// }
//}
//jin.gameObject.SetActive(true);
//jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f;
}
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_14_Async(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill04");
_scriptCha1.Invincibility(2f);
if (TryNewOrGetSkillInfo(14, out SkillInfo skillInfo))
{
var dragonhead = await LoadAssetAsync("sk_dragonhead").Task;
var instance = Instantiate(dragonhead, _mytransform.position - _mytransform.forward * 0.2f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<AllyDamage>().physicsDamage = damage;
skillInfo.instance.SetActive(true);
//有目标
if (_scriptCha1.targetEnemy)
{
var targetPos = _scriptCha1.targetEnemy.position;
var forward = (targetPos - _mytransform.position).normalized;
skillInfo.instance.transform.SetPositionAndRotation(targetPos - forward * 0.4f, Quaternion.LookRotation(forward));
}
else
{
var targetPos = _mytransform.TransformPoint(-Vector3.forward * 0.2f);
skillInfo.instance.transform.SetPositionAndRotation(targetPos, _mytransform.rotation);
}
}
private void Sk_15_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
_scriptCha1.Invincibility(4f);
int index = 14;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(chosun, _mytransform.position + _mytransform.forward * 0.2f, chosun.localRotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = skillatk * _baseDamage * 0.01f;
skillInfo.instance.SetActive(false);
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.2f;
skillInfo.instance.transform.rotation = chosun.localRotation;
GameCamera.Instance.LookTarget(skillInfo.instance.transform, 28, 0.5f);
jin.gameObject.SetActive(true);
jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f;
}
private void Sk_16_(int damage, int[] args)
{
jin.gameObject.SetActive(true);
jin.position = _mytransform.position + Vector3.up * 0.01f;
if (c_fincanon == null)
{
c_fincanon = Instantiate(fincanon, _mytransform.position, _mytransform.rotation);
c_fincanon.GetComponent<Rigidbody>().mass = skillatk * _baseDamage * 0.01f;
c_fincanon.parent = _mytransform;
}
else
{
c_fincanon.gameObject.SetActive(true);
c_fincanon.position = _mytransform.position;
c_fincanon.rotation = _mytransform.rotation;
c_fincanon.parent = _mytransform;
}
_scriptCha1.PlayAnimation("skill03");
//temp = script_cha1.PlayAnimQueued("skill03");
//temp.speed = 0.2f;
}
/// <summary>
/// 竹子
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_17_Async(int damage, int[] args)
{
const int MAX_COUNT = 5;
if (TryNewOrGetSkillInfo(17, out SkillInfo skillInfo))
{
var bamboo = await LoadAssetAsync("sk_bamboo").Task;
for (int i = 0; i < MAX_COUNT; i++)
{
var instance = Object.Instantiate(bamboo);
instance.SetActive(false);
skillInfo.instances.Add(instance);
}
}
_scriptCha1.PlayAnimation("skill03");
StartCoroutine(BambooFin());
if (args.Length >= 7)
{
int count = Mathf.Min(MAX_COUNT, args[6]);
skillInfo.repeatDamage = damage;
skillInfo.repeatCount = count;
skillInfo.repeatDelay = 1f;
Repeatskill(17, count, 1f);
}
else
{
Repeatskill(17, 1, 1f);
}
}
private void Sk_18_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 17;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var instance = Instantiate(swordrain_s, _mytransform.position, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
var instance2 = Instantiate(swordrain, _mytransform.position + Vector3.up * 1f, _mytransform.rotation);
skillInfo.instances.Add(instance2.gameObject);
var instance3 = Instantiate(swordrain_b, _mytransform.position + Vector3.up * -0.1f, _mytransform.rotation);
skillInfo.instances.Add(instance3.gameObject);
}
skillInfo.instances[0].SetActive(true);
skillInfo.instances[0].transform.position = _mytransform.position;
skillInfo.instances[1].SetActive(true);
skillInfo.instances[1].transform.position = _mytransform.position + Vector3.up * 1f;
skillInfo.instances[1].transform.rotation = _mytransform.rotation;
skillInfo.instances[2].SetActive(true);
skillInfo.instances[2].transform.position = _mytransform.position + Vector3.up * -0.1f;
skillInfo.instances[2].transform.rotation = _mytransform.rotation;
skillInfo.instances[2].GetComponent<Rigidbody>().mass = skillatk * _baseDamage * 0.01f;
}
private void Sk_19_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("wing");
//temp = script_cha1.PlayAnimQueued("wing_i");
//temp.speed = 0.2f;
}
/// <summary>
///
/// </summary>
/// <param name="damage"></param>
/// <param name="args"></param>
private async void Sk_20_Async(int damage, int[] args)
{
//script_cha1.PlayAnimation(EntityMainPlayer.Hash_Skill01);
int index = 19;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var prefab = await LoadAssetAsync("sk_swordwind").Task;
for (int i = 0; i < 4; i++)
{
var instance = Instantiate(prefab);
instance.SetActive(false);
skillInfo.instances.Add(instance);
}
}
for (int i = 0; i < 4; i++)
{
var instance = skillInfo.instances[i];
if (!instance.activeSelf)
{
instance.GetComponent<Rigidbody>().mass = damage;
instance.transform.SetPositionAndRotation(_mytransform.position, _mytransform.rotation);
instance.SetActive(true);
break;
}
}
}
/// <summary>
/// 飞龙
/// </summary>
/// <param name="swordCount"></param>
/// <param name="damage"></param>
private async void Sk_21_Feilong_Async(int damage, int swordCount, int swordType)
{
int index = 21 - 1;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
var prefab = await LoadAssetAsync("general_spiritsword").Task;
for (int i = 0; i < 6; i++)
{
var instance = Instantiate(prefab);
instance.SetActive(false);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.isInit = true;
_skillInfos[index] = skillInfo;
}
for (int i = 0; i < skillInfo.instances.Count; i++)
{
var go = skillInfo.instances[i];
if (!go.activeSelf)
{
var sword2 = go.GetComponent<SpiritSword2>();
sword2.power = damage;
sword2.swordCount += swordCount;
sword2.maxHitCount = 12;
go.transform.position = _mytransform.position + Vector3.up * 0.2f;
go.transform.rotation = Quaternion.Euler(0f, GlobalUtils.RndAngle, 0f);
go.SetActive(true);
swordCount--;
if (swordCount <= 0)
{
break;
}
}
}
if (swordType != 0)
Sk_14_Async(damage, null);
}
private async void Sk_22_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill_chargesmash");
int index = 21;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_spinaxe").Task;
var instance = Instantiate(load_skobj.transform, _chaRHand.position + _chaRHand.forward * 0.2f, _chaRHand.rotation);
instance.parent = _chaRHand;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
//skillInfo.instance.transform.GetChild(0).particleEmitter().emit = true;
_ptOffDelay = 2.5f;
StartCoroutine(Pt_Off(skillInfo.instance.transform.GetChild(0)));
}
private async void Sk_23_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 22;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_fly").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f;
skillInfo.instance.SetActive(true);
}
private async void Sk_24_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 23;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_sister").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = skillatk;
skillInfo.instance.transform.position = _mytransform.position;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.SetActive(true);
}
private async void Sk_25_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 24;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
GameObject gameObject = await LoadAssetAsync("general_icebg").Task;
var instance = Object.Instantiate(gameObject.transform, _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.01f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
var load_skobj = await LoadAssetAsync("general_ice_spear").Task;
skillInfo.prefabs.Add(load_skobj);
for (int i = 0; i < 5; i++)
{
instance = Object.Instantiate(load_skobj.transform, Vector3.zero, Quaternion.Euler(0f, Random.Range(0, 360), 0f));
skillInfo.instances.Add(instance.gameObject);
}
}
//skillInfo.instance.transform.particleEmitter().emit = true;
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.01f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
_repeatAtk = skillatk;
_ptOffDelay = 6f;
StartCoroutine(Pt_Off(skillInfo.instance.transform));
Repeatskill(_skillIndex, 5, 0.12f);
}
private async void Sk_26_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 25;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_sworddance").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.transform.position = _mytransform.position;
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
}
private async void Sk_27_(int damage, int[] args)
{
_scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind);
int index = 26;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_axedance").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position;
skillInfo.instance.SetActive(true);
}
private async void Sk_28_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill04");
int index = 27;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_arrowrain").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 1f - _mytransform.forward * 0.7f, _mytransform.rotation);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
load_skobj = await LoadAssetAsync("general_arrowrain_base").Task;
instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * -0.03f + _mytransform.forward * 0.35f, _mytransform.rotation);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instances[0].SetActive(true);
skillInfo.instances[0].transform.position = _mytransform.position + Vector3.up * 1f - _mytransform.forward * 0.7f;
skillInfo.instances[0].transform.rotation = _mytransform.rotation;
skillInfo.instances[1].GetComponent<Rigidbody>().mass = damage;
skillInfo.instances[1].SetActive(true);
skillInfo.instances[1].transform.position = _mytransform.position + Vector3.up * -0.03f + _mytransform.forward * 0.35f;
skillInfo.instances[1].transform.rotation = _mytransform.rotation;
}
private async void Sk_29_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 28;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_risespear").Task;
for (int i = 0; i < 7; i++)
{
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
_repeatAtk = skillatk;
Repeatskill(_skillIndex, 6, 0.1f);
}
private async void Sk_30_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill02");
int index = 29;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_meteo").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.gameObject.SetActive(true);
}
private async void Sk_31_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 30;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_mirage").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
_repeatAtk = damage;
Repeatskill(31, 6, 0.05f);
StartCoroutine(Sk_Mirage());
_scriptCha1.entityView.Disappear();
_scriptCha1.StopControl();
}
private async void Sk_32_(int damage, int[] args)
{
//script_cha1.PlayAnim("dodge");
//temp = script_cha1.PlayAnimQueued("attackex2");
//temp.speed = 0.28f;
//temp.layer = 2;
//temp = script_cha1.PlayAnimQueued("attackex2_impact");
//temp.speed = 0.25f;
//temp.layer = 2;
_scriptCha1.AddForwardForce(180f);
int index = 31;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_edge_wheel").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f + _mytransform.forward * 0.2f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f + _mytransform.forward * 0.2f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.SetActive(true);
}
private async void Sk_33_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill04");
int index = 32;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_swamp").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.01f + _mytransform.forward * 0.5f, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.01f + _mytransform.forward * 0.5f;
skillInfo.instance.SetActive(true);
}
private async void Sk_34_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill04");
int index = 33;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_multispear").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.SetActive(true);
}
private async void Sk_35_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 34;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_fincanon").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation);
instance.parent = _mytransform;
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = skillatk;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.transform.parent = _mytransform;
this.GetComponent<Collider>().enabled = false;
_scriptCha1.Invincibility(3f);
}
private async void Sk_36_(int damage, int[] args)
{
_scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind);
int index = 35;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_flowerfan").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
skillInfo.instance.SetActive(true);
}
private async void Sk_37_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 36;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_chain").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position - Vector3.up * 0.1f, Quaternion.identity);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position - Vector3.up * 0.1f;
}
private async void Sk_38_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill03");
int index = 37;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_arrow_poison").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.05f + Vector3.up * 0.07f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.1f + Vector3.up * 0.07f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
}
private async void Sk_39_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("rapidstab");
int index = 38;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_rapidthrust").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.05f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.05f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
}
private async void Sk_40_(int damage, int[] args)
{
_scriptCha1.PlayAnimation("skill04");
int index = 39;
var skillInfo = _skillInfos[index];
if (skillInfo == null)
{
skillInfo = new SkillInfo();
_skillInfos[index] = skillInfo;
var load_skobj = await LoadAssetAsync("general_elec_shock").Task;
var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.22f + Vector3.up * 0.06f, _mytransform.rotation);
skillInfo.instances.Add(instance.gameObject);
}
skillInfo.instance.GetComponent<Rigidbody>().mass = damage;
skillInfo.instance.SetActive(true);
skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.22f + Vector3.up * 0.06f;
skillInfo.instance.transform.rotation = _mytransform.rotation;
}
private void UpdateSkill()
{
if (_skillIndex != -1)
{
_castingDelay += Time.unscaledDeltaTime;
if (_castingDelay > 1f)
{
_scriptCha1.drag = 10f;
Time.timeScale = 1f;
//script_cha1.StopAnim();
//FireSkill(_skillIndex);
_castingDelay = 0f;
directionArrow.GetComponent<Renderer>().enabled = false;
}
}
if (!_repeat || _currentDelay <= 0f)
{
return;
}
_currentDelay -= Time.unscaledDeltaTime;
if (_currentDelay <= 0f)
{
_repeatTime--;
if (_repeatTime > 0)
{
Repeatskill(_repeatKind, _repeatTime, _repeatDelay);
}
else
{
_repeat = false;
}
}
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private AsyncOperationHandle<GameObject> LoadAssetAsync(string name)
{
string key = $"skill/{name}.prefab";
return AssetProxy.Instance.TryGetAssetAsync<GameObject>(key, nameof(Cha_Skill));
}
/// <summary>
/// 预加载
/// </summary>
private void PreloadAsset()
{
StartCoroutine(PreloadAssetCO());
}
/// <summary>
///
/// </summary>
/// <returns></returns>
private IEnumerator PreloadAssetCO()
{
yield return new WaitForSeconds(2f);
//LoadAssetAsync("general_spiritsword");
}
#endregion
#region Unity
private void Awake()
{
_mytransform = this.transform;
}
private void Start()
{
AssetProxy.Instance.CreateReleasePool(nameof(Cha_Skill));
_scriptCha1 = GetComponent<EntityMainPlayer>();
_scriptSound = GetComponent<Cha_Sound>();
_scriptRotfog = ef_rotfog.GetComponent<Ef_rotfog>();
pt_ki = _mytransform.Find("pt_ki");
directionArrow = _mytransform.Find("directionArrow");
this.PreloadAsset();
}
private void OnDestroy()
{
AssetProxy.Instance.RemoveReleasePool(nameof(Cha_Skill));
}
// Update is called once per frame
private void FixedUpdate()
{
UpdateSkill();
}
#if !UNITY_WEBGL && UNITY_EDITOR
private void OnGUI()
{
if (KGMOptions.Instance != null && KGMOptions.Instance.)
for (int i = 0; i < 40; i++)
{
if (GUILayout.Button($"{i + 1}", GUILayout.MinWidth(100), GUILayout.MinHeight(50)))
{
int[] args = new int[10];
FireSkill(i + 1, args);
}
}
}
#endif
#endregion
}
}