/// <summary> /// 初始化,注册所有技能 /// </summary> /// <returns></returns> public static bool Init() { SkillGameManager.m_dicAllSkillBase.Clear(); SkillGameManager.Register(new SkillNone()); SkillGameManager.Register(new SkillNormalAttack()); return(true); }
public virtual void UpdateState() { Debug.Log("UpdateState"); float y = Input.mousePosition.y; float num = y / Screen.height; if (num > 0.27f && !this.m_bOutMainUI) { SkillBase skill = SkillGameManager.GetSkillBase(this.m_unSkillId); if (skill != null) { EnumErrorCodeCheckUse errorCode = skill.CheckUse(Singleton <BeastRole> .singleton.Id); if (errorCode != EnumErrorCodeCheckUse.eCheckErr_Success) { this.ShowErrCheckUse(errorCode); } else { this.m_bOutMainUI = true; //当鼠标离开UI做的处理 } } } if (num < 0.25f && this.m_bOutMainUI) { this.m_bOutMainUI = false; //当鼠标进入UI做的处理 } }
public void Init(bool bForceReInit) { ResourceManager.singleton.SetAllLoadFinishedEventHandler(new Action <bool>(this.OnBeforeStartGameResourceLoadFinished));//当资源全部加载完成之后回调,进入登陆状态 if (bForceReInit) { this.PreInit(); } else { if (this.m_bHasInited) { return; } } this.m_bHasInited = true; Singleton <ScreenManager> .singleton.Init();//设置fps=60帧 Singleton <PublishConfig> .singleton.Init(); Singleton <WordFilter> .singleton.Init(); GameConfig.singleton.Init(); SkillGameManager.Init(); GameConfig.singleton.DoGlobalConfig(); //设置游戏的运行速度 Singleton <ConfigCS> .singleton.Init(); //电脑配置信息 Singleton <UITipConfigMgr> .singleton.Init(); Singleton <NetworkManager> .singleton.Init(); Singleton <AudioManager> .singleton.Init(); }
public override void Trigger() { int attackEftId = 0; int beAttackEftId = 0; SkillGameManager.GetSkillAttackEffectId(this.SkillId, this.AttackerId, ref attackEftId, ref beAttackEftId); Beast beast = Singleton <BeastManager> .singleton.GetBeastById(this.AttackerId); if (beast != null) { DataSkillShow data = beast.GetSkillShow(this.SkillId); if (!this.MainBeAttacker && data != null) { if (data.SubHitEffectId != 0) { beAttackEftId = data.SubHitEffectId; } } if (bShowMissEffect) { //显示MIss漂浮字样 } else if (beAttackEftId > 0) { //取得被攻击者的位置,然后播放特效 Vector3 vTargetPos = this.BeAttackPos.Count > 0 ? Hexagon.GetHex3DPos(this.BeAttackPos[0], Space.World) : Vector3.zero; EffectManager.Instance.PlayEffect(beAttackEftId, this.BeAttackerId, Vector3.zero, null, 0L, vTargetPos, null, Vector3.zero); } } }
public override bool OnSelectSkill(EnumSkillType eType, int unSkillId) { Debug.Log("Use Skill Select Skill"); if (unSkillId == 0) { ActionState.Singleton.ChangeState(enumSubActionState.eSubActionState_Enable); return(true); } else if (this.m_curState.OnSelectSkill(eType, unSkillId)) { return(true); } else { if (this.ChangeSkill(eType, unSkillId)) { SkillBase skill = null; skill = SkillGameManager.GetSkillBase(unSkillId); EnumErrorCodeCheckUse errorCode = skill.CheckUse(Singleton <BeastRole> .singleton.Id); if (errorCode == EnumErrorCodeCheckUse.eCheckErr_Success) { this.m_curState.OnLockOperation(); } else { this.m_curState.ShowErrCheckUse(errorCode); ActionState.Singleton.ChangeState(enumSubActionState.eSubActionState_Enable); } } } return(true); }
public void PreInit() { this.m_log.Debug("ClientMain.PreInit()"); StringConfigMgr.singleton.Init(); ResourceManager.singleton.Init(UnityGameEntry.Instance.GetComponent("GameResourceManager") as IResourceManager); SkillGameManager.Init(); }
public float GetHitTime() { Vector3 vDestPos = (this.ListBeAttackPos.Count > 0) ? Hexagon.GetHex3DPos(this.ListBeAttackPos[0], Space.World) : Vector3.zero; long targetId = (this.ListBeAttackerId.Count > 0) ? this.ListBeAttackerId[0] : 0u; return(SkillGameManager.GetSkillHitTime(this.SkillID, this.AttackerId, targetId, vDestPos)); }
protected virtual void ShowCastRange() { SkillBase skill = SkillGameManager.GetSkillBase(this.m_unSkillId); if (skill != null) { List <CVector3> castRange = skill.GetCastRange(Singleton <BeastRole> .singleton.Id); CSceneMgr.singleton.ShowCaseRange(castRange); } }
/// <summary> /// 神兽血量改变 /// </summary> public void OnBeastHpChange() { foreach (var skill in this.m_listSkillData) { SkillBase skillStrategy = SkillGameManager.GetSkillBase(skill.Id); if (skillStrategy != null) { skillStrategy.OnBeastHpChange(this.m_unMasterBeastId); } } }
public override void Trigger() { XLog.Log.Debug("UseSkillEvent:Trigger:" + this.UseSkillParam.m_dwSkillId); base.Trigger(); SkillBase skill = SkillGameManager.GetSkillBase(this.m_param.m_dwSkillId); if (skill != null) { skill.OnUseSkillAction(this.m_param); } }
public Beast(BeastData beastData) { if (null == beastData) { this.m_bIsErrorBeast = true; this.m_skillManager = new SkillGameManager(0); } else { this.m_bIsErrorBeast = false; DataBeastlist dataBeast = null; GameData <DataBeastlist> .dataMap.TryGetValue(beastData.BeastTypeId, out dataBeast); if (dataBeast != null) { this.MaxMoveDis = dataBeast.Move; this.Hp = dataBeast.Hp; if (dataBeast.Skill_1 > 0) { this.m_listBeastOriginActivedSkillID.Add(dataBeast.Skill_1); } if (dataBeast.Skill_2 > 0) { this.m_listBeastOriginActivedSkillID.Add(dataBeast.Skill_2); } if (dataBeast.Skill_3 > 0) { this.m_listBeastOriginActivedSkillID.Add(dataBeast.Skill_3); } if (dataBeast.Skill_4 > 0) { this.m_listBeastOriginActivedSkillID.Add(dataBeast.Skill_4); } } else { this.m_log.Error(string.Format("null == beastConfig: beastData.BeastTypeId=:{0}", beastData.BeastTypeId)); } this.m_unBeastId = beastData.Id; this.m_unPlayerId = beastData.PlayerId; this.m_dwBeastTypeId = beastData.BeastTypeId; this.m_eCampType = beastData.CampType; this.m_unHp = beastData.Hp; this.m_suitId = beastData.SuitId; this.m_skillManager = new SkillGameManager(this.m_unBeastId); this.m_skillManager.AddSkill(1, false); foreach (var skillData in beastData.Skills) { this.m_skillManager.AddSkill(skillData, false, ESkillActivateType.SKILL_ACTIVATE_TYPE_INVALID); } } }
/// <summary> /// 取得技能延迟 /// </summary> /// <param name="skillID"></param> /// <param name="attakerId"></param> /// <param name="beAttacker"></param> /// <param name="targetPos"></param> /// <returns></returns> public static float GetSkillDuration(int skillID, long attakerId, List <long> beAttacker, Vector3 targetPos) { SkillBase skill = SkillGameManager.GetSkillBase(skillID); if (skill != null) { return(skill.GetDuration(attakerId, beAttacker, targetPos)); } else { return(0); } }
/// <summary> /// 获取技能特效的播放时间 /// </summary> /// <param name="skillId"></param> /// <param name="attackerId"></param> /// <param name="targetId"></param> /// <param name="vTargetPos"></param> /// <param name="type"></param> /// <returns></returns> public static float GetSkillHitTime(int skillId, long attackerId, long targetId, Vector3 vTargetPos, EffectInstanceType type) { SkillBase skill = SkillGameManager.GetSkillBase(skillId); if (skill != null) { return(skill.GetHitTime(attackerId, targetId, vTargetPos, type)); } else { return(-1); } }
/// <summary> /// 取得普通攻击范围内的所有敌人 /// </summary> /// <param name="unMasterBeastId"></param> /// <returns></returns> public override List <CVector3> GetValidTargetHexs(long unMasterBeastId) { List <CVector3> listTargetHex = new List <CVector3>(); Beast beast = Singleton <BeastManager> .singleton.GetBeastById(unMasterBeastId); if (beast == null || beast.IsError) { return(listTargetHex); } else { int maxAttackDis = beast.MaxAttackDis; SkillBase skill = SkillGameManager.GetSkillBase(this.m_unskillId); if (skill != null) { List <long> list = new List <long>(); Singleton <ClientMain> .singleton.scene.GetNearEnemys(unMasterBeastId, maxAttackDis, ref list); foreach (var id in list) { Beast beastById = Singleton <BeastManager> .singleton.GetBeastById(id); if (beastById != null) { listTargetHex.Add(beastById.Pos); } } } /* * ECampType nCamp = ECampType.CAMP_EMPIRE; * if (Singleton<BeastRole>.singleton.CampType == ECampType.CAMP_EMPIRE) * { * nCamp = ECampType.CAMP_LEAGUE; * } * CVector3 basePos = Singleton<ClientMain>.singleton. */ List <CVector3> targetList = new List <CVector3>(); Singleton <ClientMain> .singleton.scene.GetNearNodesIgnoreObstruct(1, 1, beast.Pos, ref targetList, true, true); targetList.ForEach(delegate(CVector3 hex) { if (listTargetHex.Contains(hex)) { listTargetHex.Remove(hex); } }); return(listTargetHex); } }
/// <summary> /// 技能释放特效 /// </summary> /// <param name="unSkillId"></param> /// <param name="castSkillParam"></param> public void OnCastSkillEffect(int unSkillId, CastSkillParam castSkillParam) { try { SkillBase skillStrategy = SkillGameManager.GetSkillBase(unSkillId); if (null != skillStrategy) { skillStrategy.OnCastSkillEffect(castSkillParam); } } catch (Exception ex) { this.m_log.Fatal(ex.ToString()); } }
/// <summary> /// 激活所有技能 /// </summary> public void ActiveSkills() { for (int i = 0; i < this.m_listSkillData.Count; i++) { SkillGameData skillData = this.m_listSkillData[i]; if (!skillData.IsActive) { } SkillBase skillBase = SkillGameManager.GetSkillBase(skillData.Id); if (skillBase != null) { skillBase.Active(this.m_unMasterBeastId); } } }
/// <summary> /// 神兽释放技能表现 /// </summary> /// <param name="skillId"></param> /// <param name="param"></param> public void OnCastSkillAction(int skillId, CastSkillParam param) { try { SkillBase skill = SkillGameManager.GetSkillBase(skillId); if (skill != null) { skill.OnCastAction(param); } } catch (Exception e) { this.m_log.Fatal(e.ToString()); } }
/// <summary> /// 激活某个技能 /// </summary> /// <param name="unSkillId"></param> public void ActiveSkill(int unSkillId) { SkillGameData skill = this.GetSkillById(unSkillId); if (skill != null && !skill.IsError) { if (!skill.IsActive) { //this.MasterBeast } SkillBase skillStrategy = SkillGameManager.GetSkillBase(skill.Id); if (skillStrategy != null) { skillStrategy.Active(this.m_unMasterBeastId); } } }
/// <summary> /// 取得该神兽能使用的技能列表 /// </summary> /// <returns></returns> public List <int> GetCanUseSkills() { List <int> list = new List <int>(); foreach (var data in this.m_listSkillData) { SkillBase skillStrategy = SkillGameManager.GetSkillBase(data.Id); if (skillStrategy != null) { if (skillStrategy.CheckUse(this.m_unMasterBeastId) == EnumErrorCodeCheckUse.eCheckErr_Success) { list.Add(data.Id); } } } return(list); }
public override void OnEnter() { base.OnEnter(); SkillBase skill = SkillGameManager.GetSkillBase(this.m_unSkillId); if (skill != null) { this.m_listValidTargetPos = skill.GetValidTargetHexs(Singleton <BeastRole> .singleton.Id); this.m_listValidTargetBeastId = skill.GetValidTargetPlayers(Singleton <BeastRole> .singleton.Id); } Beast beast = Singleton <BeastManager> .singleton.GetBeastById(Singleton <BeastRole> .singleton.Id); //还没有攻击过 if (beast.UsedAttackToBaseBuildingCount < 1) { Singleton <HexagonManager> .singleton.ShowHexagon(EnumShowHexagonType.eShowHexagonType_Highlight, this.m_listValidTargetPos); } //高亮角色模型(边缘外发光) }
private void Register(UseSkillBase skillState) { if (skillState != null) { SkillBase skill = SkillGameManager.GetSkillBase(skillState.SkillId); if (null == skill) { this.m_log.Error("null == skillBase,找不到该技能"); } else { if (!this.m_dicSkillState.ContainsKey(skillState.SkillType)) { this.m_dicSkillState.Add(skillState.SkillType, new Dictionary <int, UseSkillBase>()); } this.m_dicSkillState[skillState.SkillType][skillState.SkillId] = skillState; } } }
/// <summary> /// 创建被攻击者位置改变表现 /// </summary> /// <param name="beAttackId"></param> /// <param name="fStartTime"></param> /// <param name="data"></param> /// <param name="fAnimEndTime"></param> /// <returns></returns> private float BuildBeAttackPosChangeShow(long beAttackId, float fStartTime, DataSkillShow data, ref float fAnimEndTime) { float allTime = fStartTime; float delayTime = data == null ? 0f : data.BeAttackJumpStartDelayTime; Vector3 vec3DestPos = (this.BeAttackPosList.Count > 0) ? Hexagon.GetHex3DPos(this.BeAttackPosList[0], Space.World) : Vector3.zero; float hitTime = SkillGameManager.GetSkillHitTime(this.SkillId, this.AttackerId, beAttackId, vec3DestPos, EffectInstanceType.Trace); if (this.BeAttackerPosChanges.ContainsKey(beAttackId)) { foreach (var current in this.BeAttackerPosChanges[beAttackId]) { ChangePosTrigger trigger = new ChangePosTrigger(); trigger.SkillId = this.SkillId; trigger.TargetPlayerID = this.AttackerId; trigger.controlData.type = current.type; trigger.controlData.PlayerId = current.PlayerId; trigger.controlData.DestPos.AddRange(current.DestPos); trigger.IsForward = SkillGameManager.IsBeAttackForward(this.SkillId); if (null != data) { trigger.JumpEndAnim = data.BeAttackJumpEndAnim; trigger.JumpDuraAnim = data.BeAttackJumpDuraAnim; if (current.type == ChangePosType.e_Jump) { trigger.Jumptime = ((data.BeAttackJumpSpeed <= 0f) ? data.BeAttackJumpTime : (this.GetDistanceByPos(current.DestPos[0]) / data.BeAttackJumpSpeed)); trigger.Height = data.BeAttackJumpHeight; trigger.EffectId = data.BeAttackJumpEffect; } else if (current.type == ChangePosType.e_Walk) { trigger.EffectId = data.BeAttackJumpEffect; } } trigger.StartTime = allTime + delayTime + hitTime; trigger.Duration = trigger.GetDuration(); base.AddEvent(trigger); allTime = trigger.StartTime + trigger.Duration; fAnimEndTime = allTime; } } return(allTime); }
/// <summary> /// 创建攻击者位置改变表现 /// </summary> /// <param name="fStartTime"></param> /// <param name="fAnimEndTime"></param> /// <param name="dataSkillShow"></param> /// <returns></returns> private float BuildAttackPosChangeShow(float fStartTime, ref float fAnimEndTime, DataSkillShow dataSkillShow) { float time = fStartTime; float delayTime = dataSkillShow == null ? 0f : dataSkillShow.AttackJumpStartDelayTime; foreach (var current in this.AttackerPosChanges) { ChangePosTrigger trigger = new ChangePosTrigger(); trigger.controlData = current; trigger.StartTime = time + delayTime; if (dataSkillShow != null) { trigger.JumpEndAnim = dataSkillShow.AttackJumpEndAnim; trigger.JumpDuraAnim = dataSkillShow.AttackJumpDuraAnim; if (current.type == ChangePosType.e_Jump) { trigger.Jumptime = ((dataSkillShow.AttackJumpSpeed <= 0f) ? dataSkillShow.AttackJumpTime : (this.GetDistanceByPos(current.DestPos[0]) / dataSkillShow.AttackJumpSpeed)); trigger.EffectId = dataSkillShow.AttackJumpEffect; trigger.Height = dataSkillShow.AttackJumpHeight; } else if (current.type == ChangePosType.e_Walk) { trigger.EffectId = dataSkillShow.AttackJumpEffect; } } trigger.Duration = trigger.GetDuration(); trigger.SkillId = this.SkillId; trigger.IsForward = SkillGameManager.IsAttackForward(this.SkillId); if (!current.IgnoreDuration) { time = trigger.StartTime + trigger.Duration + 0.1f; fAnimEndTime = time; } if (this.BeAttackerList.Count > 0 && this.AttackerId != this.BeAttackerList[0]) { trigger.TargetPlayerID = this.BeAttackerList[0]; } base.AddEvent(trigger); } return(time); }
public override bool OnHoverPos(CVector3 pos) { if (m_listValidTargetPos.Exists((CVector3 p) => p.Equals(pos))) { SkillBase skill = SkillGameManager.GetSkillBase(this.m_unSkillId); if (skill != null) { List <CVector3> affectAreaByTargetBeast = skill.GetAffectAreaByTargetPos(Singleton <BeastRole> .singleton.Id, pos); Singleton <HexagonManager> .singleton.ShowHexagon(EnumShowHexagonType.eShowHexagonType_Affect, affectAreaByTargetBeast); List <long> affectBeastsByTargetBeast = skill.GetAffectBeastsByTargetPos(Singleton <BeastRole> .singleton.Id, pos); //高亮角色模型 } } else { Singleton <HexagonManager> .singleton.ClearHexagon(EnumShowHexagonType.eShowHexagonType_Affect); //不显示角色模型高亮 } return(true); }
public override bool OnHoverBeast(long beastId) { if (this.m_listValidTargetBeastId.Contains(beastId)) { SkillBase skill = SkillGameManager.GetSkillBase(this.m_unSkillId); if (skill != null) { List <CVector3> affectAreaByTargetBeast = skill.GetAffectAreaByTargetBeast(Singleton <BeastRole> .singleton.Id, beastId); Singleton <HexagonManager> .singleton.ShowHexagon(EnumShowHexagonType.eShowHexagonType_Affect, affectAreaByTargetBeast); List <long> affectBeastsByTargetBeast = skill.GetAffectBeastsByTargetBeast(Singleton <BeastRole> .singleton.Id, beastId); //高亮角色模型 } } else { Singleton <HexagonManager> .singleton.ClearHexagon(EnumShowHexagonType.eShowHexagonType_Affect); //不显示角色模型高亮 } return(true); }
/// <summary> /// 释放技能 /// </summary> /// <param name="skillId"></param> /// <param name="param"></param> public void OnCastSkill(int skillId, CastSkillParam param) { try { SkillGameData skillData = this.GetSkillById(skillId); if (skillData != null && !skillData.IsError) { foreach (var current in this.m_listSkillData) { SkillBase skillBegin = SkillGameManager.GetSkillBase(current.Id); if (skillBegin != null) { skillBegin.OnCastSkillBegin(this.m_unMasterBeastId, skillId); } } SkillBase skill = SkillGameManager.GetSkillBase(skillData.Id); if (skill != null) { param.unTargetSkillID = skillId; skill.Cast(param); } foreach (var current in this.m_listSkillData) { SkillBase skillEnd = SkillGameManager.GetSkillBase(current.Id); if (skillEnd != null) { skillEnd.OnCastSkillBegin(this.m_unMasterBeastId, skillId); } } } } catch (Exception e) { this.m_log.Fatal(e); } }
public float GetHitTime() { Vector3 vDestPos = this.BeAttackPos.Count > 0 ? Hexagon.GetHex3DPos(this.BeAttackPos[0], Space.World) : Vector3.zero; return(SkillGameManager.GetSkillHitTime(this.SkillId, this.AttackerId, this.BeAttackerId, vDestPos)); }
/// <summary> /// 该技能是否被攻击者向前 /// </summary> /// <param name="skillId"></param> /// <returns></returns> public static bool IsBeAttackForward(int skillId) { SkillBase skill = SkillGameManager.GetSkillBase(skillId); return(skill != null && skill.IsBeAttackForward); }
public float GetDuration() { Vector3 pos = this.BeAttackerPos.Count > 0 ? Hexagon.GetHex3DPos(this.BeAttackerPos[0], Space.World) : Vector3.zero; return(SkillGameManager.GetSkillDuration(this.SkillId, this.AttackerId, this.BeAttackerId, pos)); }
private float BuildBeAttackSkillAnimShow(long beAttacker, float fStartTime, bool bMainBeAttack, DataSkillShow data, ref float fBeAttackStartTime) { float allTime = fStartTime; if (data != null) { Debug.Log("f32f3"); Vector3 pos = this.BeAttackPosList.Count > 0 ? Hexagon.GetHex3DPos(this.BeAttackPosList[0], Space.World) : Vector3.zero; float hitTime = 0; //如果是普通攻击的话 if (this.SkillId == 1) { hitTime = SkillGameManager.GetSkillHitTime(this.SkillId, this.AttackerId, beAttacker, pos); } else { //如果是技能的话 hitTime = SkillGameManager.GetSkillHitTime(this.SkillId, this.AttackerId, beAttacker, pos, EffectInstanceType.Trace); if (data.AttackJumpSpeed > 0) { hitTime += this.GetDistanceByTargetBeastId(beAttacker) / data.AttackJumpSpeed; } } float beAttackAnimStartDelayTime = data.AttackAnimStartDelayTime; allTime += beAttackAnimStartDelayTime + hitTime; fBeAttackStartTime = allTime; if (this.HpChangeInfo.ContainsKey(beAttacker)) { Debug.Log("3f2332"); bool ShowAnim = false; if (!this.MissInfo.Contains(beAttacker)) { for (int i = 0; i < this.HpChangeInfo[beAttacker].Count; i++) { KeyValuePair <int, int> keyValuePair = this.HpChangeInfo[beAttacker][i]; if (keyValuePair.Key < keyValuePair.Value) { ShowAnim = true; } } } //配置文件里面配置被攻击者是否被攻击次数多次,如果不是就是默认1次 int attackCount = data.BeAttackCount > 0 ? data.BeAttackCount : 1; string[] arrayTime = string.IsNullOrEmpty(data.BeAttackSpaceTime) ? new string[0] : data.BeAttackSpaceTime.Split(';'); for (int i = 0; i < attackCount; i++) { Debug.Log("ff23f23rfwecw"); BeAttackSkillTrigger trigger = new BeAttackSkillTrigger(); trigger.AttackerId = this.AttackerId; trigger.BeAttackerId = beAttacker; trigger.StartTime = allTime; if (arrayTime.Length > 0) { trigger.IsSpaceAnim = i < attackCount - 1; float duration = 0; if (i < arrayTime.Length) { float.TryParse(arrayTime[i], out duration); } trigger.Duration = duration; } else if (data.BeAttackDuraTime > 0) { trigger.IsDuraAnim = true; trigger.Duration = data.BeAttackDuraTime; } else { trigger.Duration = trigger.GetDuration(); } trigger.MainBeAttcker = beAttacker; trigger.ShowAnim = ShowAnim; if (this.HpChangeInfo[beAttacker].Count > 0) { trigger.HpChange = this.HpChangeInfo[beAttacker][0].Key - this.HpChangeInfo[beAttacker][0].Value; } base.AddEvent(trigger); if (i == attackCount - 1) { float fStartTime1 = data.BeAttackDuraTime > 0 ? trigger.StartTime + trigger.Duration : allTime; this.BuildHpChangeShow(fStartTime1, beAttacker); } allTime = trigger.StartTime + trigger.Duration; } } } return(allTime); }