public override void Play(ISkillAttacker attacker, SkillEffect se) { AttachFxNodeProp prop = m_NodeProp as AttachFxNodeProp; if (prop == null) { return; } int level = 0; if (attacker != null) { if (attacker.GetSkillPart() != null) { level = attacker.GetSkillPart().FxLevel; } } skillMaster = attacker.GetGameObject(); AddLinkEffect node = new AddLinkEffect(); node.nFollowType = (int)0; node.rotate = Vector3.zero; node.vOffset = prop.offset_pos; node.nLevel = level; // string effectName = prop.fx_name.Replace( "prefab" , "fx" ); // node.strEffectName = SkillEffectHelper.FxDir + effectName; node.strEffectName = prop.fx_name; node.strLinkName = prop.attach_name; if (skillMaster != null) { effectID = (uint)(int)skillMaster.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node); } }
public void InitFollowFx() { if (m_attacker == null) { DestroyFx(); return; } bStart = true; bDestory = false; m_targetObj = m_attacker.GetTargetGameObject(); ISkillPart skillPart = m_attacker.GetSkillPart(); if (skillPart != null) { m_SkillTarget = skillPart.GetSkillTarget(); table.SkillDatabase db = GameTableManager.Instance.GetTableItem <table.SkillDatabase>((uint)m_skillId, 1); if (db != null) { if (db.flyspeed != 0) { m_speed = db.flyspeed * 1.0f / 100; } } } // m_targetNode = m_attacker.GetTargetHitNode(); m_startTime = Time.time; castPos = m_attacker.GetTargetHitNodePos(m_SkillTarget, targetHitNode); float dis = GetVectorDistance(transform.position, castPos); totalTime = dis / m_speed; }
bool IsHideFx() { if (m_Atttacker != null) { ISkillPart sp = m_Atttacker.GetSkillPart(); if (sp != null) { return(sp.IsHideOtherFx()); } } return(false); }
public override void Play(ISkillAttacker attacker, SkillEffect se) { m_ef = se; Transform attacker_node = attacker.GetRoot(); if (attacker_node == null) { return; } PlaceFxNodeProp prop = m_NodeProp as PlaceFxNodeProp; if (prop == null) { return; } // Engine.Utility.Log.Error("play PlaceFxNodeProp {0}", prop.fx_name); string stateName = prop.nodeState; int stateIndex = 0; if (!string.IsNullOrEmpty(stateName)) { Client.SkillState state = SkillSystem.GetSkillStateByString(stateName); stateIndex = (int)state - 1; } if (stateIndex < 0) { stateIndex = 0; } Vector3 pos = attacker_node.TransformPoint(prop.position); //Vector3 vscale = attacker_node.localScale * prop.scale; Vector3 vscale = Vector3.one * prop.scale; Vector3 angles = attacker_node.eulerAngles; angles += prop.rotation; if (prop.by_target) { pos = se.GetPlayEffectInitPos() + prop.position; } int level = 0; if (attacker != null) { if (attacker.GetSkillPart() != null) { level = attacker.GetSkillPart().FxLevel; } } m_uEffectID = helper.ReqPlayFx(prop.fx_name, pos, angles, vscale, level); m_startTime = Time.time; uint skillID = se.CurSkillID; m_curDb = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(skillID, 1); if (m_curDb != null) { if (stateIndex >= 0) { if (!string.IsNullOrEmpty(m_curDb.skillEffectTime)) { string[] timeArray = SkillSystem.GetTimeArrayByString(m_curDb.skillEffectTime); if (stateIndex < timeArray.Length) { uint time = 1000; if (uint.TryParse(timeArray[stateIndex], out time)) { m_uEffectLen = time; } } } } } // m_bRmove = false; IEffect ef = GetEffectByID(m_uEffectID); if (ef != null) { Transform trans = ef.GetNodeTransForm(); if (trans == null) { return; } m_placeHandle = trans.gameObject.GetComponent <PlaceFxHandle>(); if (m_placeHandle == null) { m_placeHandle = trans.gameObject.AddComponent <PlaceFxHandle>(); } } m_placeHandle.m_attacker = attacker; m_placeHandle.m_len = m_uEffectLen; m_placeHandle.m_effectid = m_uEffectID; m_placeHandle.m_placeNode = this; m_placeHandle.InitPlaceFx(); }
public override void Play(ISkillAttacker attacker, SkillEffect se) { m_ef = se; GameObject fxObj = new GameObject();//helper.CreateFxObj(fx_name); if (fxObj == null) { //Log.Error("no fx: {0}", fx_name); return; } Transform attacker_root = attacker.GetRoot(); //callback.OnTriggerHit(); //ArrowFxHandle handler = Util.AddComponent(fxObj, "ArrowFxHandle") as ArrowFxHandle; m_Handler = fxObj.AddComponent <ArrowFxHandle>(); ArrowFxNodeProp prop = m_NodeProp as ArrowFxNodeProp; if (prop == null) { return; } m_Handler.m_attacker = attacker; m_Handler.m_speed = prop.speed; m_Handler.m_acce = prop.acce; m_Handler.m_range = prop.range; m_Handler.m_radius = prop.radius; m_Handler.m_hitIndex = hit_index; m_Handler.m_hitNode = this; m_Handler.m_hitNum = prop.fx_num; //handler.transform.localPosition = attacker_obj.transform.position; Vector3 scale; scale.x = m_Handler.transform.localScale.x * attacker_root.localScale.x; scale.y = m_Handler.transform.localScale.y * attacker_root.localScale.y; scale.z = m_Handler.transform.localScale.z * attacker_root.localScale.z; m_Handler.transform.localScale = scale; //handler.transform.localPosition += handler.transform.forward * z_offset; //handler.transform.localRotation = caster.transform.rotation; //handler.transform.Rotate(Vector3.forward, pitch, Space.Self); if (prop.fx_num == 1) { m_Handler.transform.parent = SkillEffectManager.Helper.PlaceFxRoot; Vector3 angles = attacker_root.eulerAngles; angles.z = prop.pitch; m_Handler.transform.localEulerAngles = angles; m_Handler.transform.Translate(0, prop.height, prop.z_offset); return; } float start_angle = -prop.angle / 2; float per_angle = prop.angle / (prop.fx_num - 1); for (int i = 0; i < prop.fx_num; i++) { GameObject fxObjInst; if (i == 0) { fxObjInst = fxObj; } else { fxObjInst = new GameObject();//GameObject.Instantiate(fxObj) as GameObject; } m_Handler = fxObjInst.GetComponent <ArrowFxHandle>(); m_Handler.m_attacker = attacker; m_Handler.m_speed = prop.speed; m_Handler.m_acce = prop.acce; m_Handler.m_range = prop.range; m_Handler.m_radius = prop.radius; m_Handler.m_hitIndex = hit_index; m_Handler.m_hitNode = this; m_Handler.m_hitNum = prop.fx_num; fxObjInst.transform.parent = SkillEffectManager.Helper.PlaceFxRoot; Vector3 euler = attacker_root.eulerAngles; euler.y += start_angle; euler.z = prop.pitch; fxObjInst.transform.localEulerAngles = euler; fxObjInst.transform.localScale = scale; fxObjInst.transform.localPosition = attacker_root.position; fxObjInst.transform.Translate(0, prop.height, prop.z_offset); start_angle += per_angle; int level = 0; if (attacker != null) { if (attacker.GetSkillPart() != null) { level = attacker.GetSkillPart().FxLevel; } } m_Handler.m_effectid = helper.ReqPlayFx(prop.fx_name, fxObjInst.transform, Vector3.zero, Vector3.one, level); } }
public override void Play(ISkillAttacker attacker, SkillEffect se) { m_ef = se; GameObject go = attacker.GetTargetGameObject(); if (go == null) { return; } FollowFxNodeProp prop = m_NodeProp as FollowFxNodeProp; if (prop == null) { return; } skill_id = se.CurSkillID; m_uDamageID = attacker.GetDamageID(); Transform attacker_node = attacker.GetRoot(); if (attacker_node == null) { return; } //GameObject fxObj = SkillEffectHelper.Instance.GetFollowGameObject(); //if (fxObj == null) //{ // Engine.Utility.Log.Error("============================fxobj is null"); // return; //} //fxObj.transform.parent = SkillEffectManager.Helper.PlaceFxRoot; //EffectUtil.ResetLocalTransform(fxObj.transform); //fxObj.transform.localEulerAngles = attacker_node.eulerAngles; //fxObj.transform.position = attacker_node.position; //fxObj.transform.Translate(prop.offset_pos); int level = 0; if (attacker != null) { if (attacker.GetSkillPart() != null) { level = attacker.GetSkillPart().FxLevel; } } uint effectid = helper.ReqPlayFx(prop.fx_name, helper.PlaceFxRoot, Vector3.zero, Vector3.one, level); IEffect ef = GetEffectByID(effectid); if (ef != null) { if (ef.GetNodeTransForm() == null) { return; } GameObject fxObj = ef.GetNodeTransForm().gameObject; if (fxObj == null) { return; } fxObj.transform.localEulerAngles = attacker_node.eulerAngles; fxObj.transform.position = attacker_node.position; fxObj.transform.Translate(prop.offset_pos); m_Handler = fxObj.GetComponent <FollowFxHandle>(); if (m_Handler == null) { m_Handler = fxObj.AddComponent <FollowFxHandle>(); } m_Handler.m_attacker = attacker; m_Handler.m_speed = prop.speed; m_Handler.targetHitNode = prop.target_hitnode; m_Handler.m_acce = prop.acce; m_Handler.m_len = prop.len; m_Handler.m_hitIndex = hit_index; m_Handler.m_hitNode = this; m_Handler.m_effectid = effectid; m_Handler.InitFollowFx(); } // fxObj.name = m_Handler.m_effectid.ToString(); }