void ApplySkill() { m_AttackInAir = motionMgr.GetMaskState(PEActionMask.InAir); m_AttackInWater = (null != phyMotor && phyMotor.spineInWater); if (m_AttackInAir) { m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInAir); } else if (m_AttackInWater) { m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInWater); } else { m_AttackInMove = null != move && move.velocity.magnitude > m_MoveAttackSpeed; m_AttackInSprint = null != move && move.velocity.magnitude > m_SprintAttackSpeed; if (m_AttackInSprint) { m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInSprint); } else if (m_AttackInMove) { m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInMove); } else { m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillID); } } }
public override void ApplyAnim(string anim, SkRuntimeInfo info) { base.ApplyAnim(anim, info); if (anim == "Knock") { SkInst inst = info as SkInst; if (inst != null) { if (m_View != null && inst._colInfo != null && inst._colInfo.hitTrans != null && inst._colInfo.hitTrans.GetComponent <Rigidbody>() != null) { //Vector3 direction = inst._colTarget.transform.position - inst._colCaster.transform.position; RagdollHitInfo hitInfo = PETools.PE.CapsuleHitToRagdollHit(inst._colInfo); if (m_View is BiologyViewCmpt) { (m_View as BiologyViewCmpt).ActivateRagdoll(hitInfo, true); } } } else { Debug.LogError("[ApplyAnim] Unsupported SkRuntimeInfo type"); } } else { if (m_Animator != null) { m_Animator.SetTrigger(anim); } } }
public override void OnHurtSb(SkInst inst, float dmg) { base.OnHurtSb(inst, dmg); if (m_MotionEquip != null && null != m_MotionEquip.Weapon && null != m_MotionEquip.Weapon.ItemObj) { Entity.SendMsg(EMsg.Battle_EquipAttack, m_MotionEquip.Weapon.ItemObj); } }
void ApplyForce(SkInst inst) { //TODO:llj if (null != m_Beat) { if (PETools.PEUtil.CanDamage(inst.Caster, inst.Target)) { m_Beat.Beat(inst.Target, (null != inst._colInfo) ? inst._colInfo.hitTrans : null, inst._forceDirection, inst._forceMagnitude); } } }
private void ProcDigB45s(SkEntity caster) { SkInst inst = SkRuntimeInfo.Current as SkInst; IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is Block45Man))) { return; } float damage = caster.GetAttribute((int)AttribType.Atk); float radius = caster.GetAttribute((int)AttribType.ResRange); float height = caster.GetAttribute((int)AttribType.ResRange); // float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns); // bool returnResource = digPos.w == 1; PeEntity entity = caster != null?caster.GetComponent <PeEntity>() : null; if (entity != null && entity.monster != null) { radius = entity.bounds.extents.x + 1; height = entity.bounds.extents.y + 1; } if (null != inst && null != inst._colInfo) { int effecID = 0; if (radius < 3) { effecID = 258; } else if (radius < 5f) { effecID = 259; } else { effecID = 260; } Pathea.Effect.EffectBuilder.Instance.Register(effecID, null, inst._colInfo.hitPos, Quaternion.identity); } if (!GameConfig.IsMultiMode) { List <B45Block> removeList = new List <B45Block>(); DigTerrainManager.DigBlock45(digPos.ToIntVector3(), damage * 0.2f, radius, height, ref removeList, false); } else { /// TODO : code for multiplayer } }
public override void ApplyRepelEff(SkRuntimeInfo info) { base.ApplyRepelEff(info); SkInst inst = info as SkInst; if (inst != null) { ApplyForce(inst); } else { Debug.LogError("[ApplySpEff] Unsupported SkRuntimeInfo type"); } }
public void RegisterEffectFromSkill(int id, SkRuntimeInfo info, Transform caster) { EffectData data = EffectData.GetEffCastData(id); if (data != null) { SkInst inst = info as SkInst; if (inst != null && data.m_posStr == "0") { Register(id, info, (inst._colInfo != null ? inst._colInfo.hitPos : caster.position), Quaternion.identity); } else { Register(id, info, caster); } } }
void OnEndAction() { if (null != skillCmpt && null != m_SkillInst && skillCmpt.IsSkillRunning(m_SkillInst.SkillID)) { skillCmpt.CancelSkillById(m_SkillInst.SkillID); } motionMgr.SetMaskState(PEActionMask.SwordAttack, false); m_WaitInput = false; m_TstAttack = false; m_SkillInst = null; m_AttackTargetDir = Vector3.zero; if (null != phyMotor) { phyMotor.CancelMoveRequest(); phyMotor.desiredMovementDirection = Vector3.zero; } if (null != m_AttackTrigger) { m_AttackTrigger.ClearHitInfo(); m_AttackTrigger.onHitTrigger -= OnHitTrigger; m_AttackTrigger.active = false; m_AttackTrigger = null; } else if (null != m_AttackCol) { m_AttackCol.enabled = false; m_AttackCol = null; } if (null != ikCmpt) { ikCmpt.aimActive = false; if (null != ikCmpt.m_IKAimCtrl) { ikCmpt.m_IKAimCtrl.EndSyncAimAxie(); } } anim.speed = 1f; DestroyEffect(); }
public override GameObject Create() { if (m_EffectData == null) { return(null); } //GameObject proto = AssetsLoader.Instance.LoadPrefabImm(data.m_path) as GameObject; GameObject proto = Instance.GetEffect(m_EffectData.m_path); if (proto != null) { GameObject effect = Instantiate(proto, position, rotation) as GameObject; //effect.AddComponent<DestroyTimer>().m_LifeTime = data.m_liveTime; if (m_EffectData.m_liveTime > -PETools.PEMath.Epsilon) { GameObject.DestroyObject(effect, m_EffectData.m_liveTime); } if (m_Data != null) { MonoBehaviour[] behaviours = effect.GetComponentsInChildren <MonoBehaviour>(); foreach (MonoBehaviour behaviour in behaviours) { SkInst inst = m_Data as SkInst; ISkEffectEntity skEffect = behaviour as ISkEffectEntity; if (inst != null && skEffect != null && !skEffect.Equals(null)) { skEffect.Inst = inst; } } } if (null != parent) { effect.transform.parent = parent; } OnSpawned(effect); return(effect); } return(null); }
protected virtual void CastSkill(SkEntity skEntity, PECapsuleHitResult hitResult) { if (PETools.PEUtil.IsVoxelOrBlock45(skEntity)) { if (m_SkillTerrainID > 0) { SkInst skillinst = StartSkill(skEntity, m_SkillTerrainID, null, false); if (skillinst != null) { skillinst._colInfo = hitResult; skillinst.Start(); } } } else { if (m_SkillID > 0) { SkInst skillinst = StartSkill(skEntity, m_SkillID, null, false); if (skillinst != null) { skillinst._colInfo = hitResult; skillinst.Start(); } } } if (null != onCastSkill) { onCastSkill(skEntity); } if (null != skEntity && null != onHitSkEntity) { onHitSkEntity(skEntity); } }
protected override void OnAnimEvent(string eventParam) { if (null != sword && motionMgr.IsActionRunning(ActionType)) { string[] subStrs = eventParam.Split('_'); bool fpEvent = subStrs[0] == "FP"; bool tpEvent = subStrs[0] == "TP"; bool specialEvent = (fpEvent || tpEvent); if (specialEvent && fpEvent != firstPersonAttack) { return; } string effectEvent = specialEvent ? subStrs[1] : subStrs[0]; switch (effectEvent) { case "AnimEffect": StartEffect(Convert.ToInt32(specialEvent ? subStrs[2] : subStrs[1])); break; case "StartAttack": if (null != m_SkillInst) { m_SkillInst.SkipWaitPre = true; } // m_AttackApplied = true; ActiveCol(specialEvent ? subStrs[2] : subStrs[1]); m_Farmcount = Time.frameCount; break; case "WeightInputStart": m_WaitInput = true; break; case "WeightInputEnd": m_WaitInput = false; break; case "EndAttack": m_WaitInput = false; motionMgr.StartCoroutine(OnEndAttack()); break; case "MonsterEndAttack": if (null != m_SkillInst) { m_SkillInst.SkipWaitAll = true; } break; case "EndAction": case "OnEndFullAnim": if (Time.time - m_LastAtackTime >= 0.3f) //for recive event right after combo { m_EndAction = true; m_CombAttack = false; if (null != m_SkillInst && null != skillCmpt) { skillCmpt.CancelSkillById(m_SkillInst.SkillID); m_SkillInst = null; } } break; } } }
public override GameObject Create() { if (m_EffectData == null || _bone == null) { return(null); } //GameObject proto = AssetsLoader.Instance.LoadPrefabImm(data.m_path) as GameObject; GameObject proto = Instance.GetEffect(m_EffectData.m_path); if (proto != null) { //StartCoroutine(InstantiateCoroutine(proto, bone, data.m_Axis, data.m_liveTime, data.m_bind)); Quaternion rot = Quaternion.identity; if (m_EffectData.m_Rot) { rot = _bone.rotation; } GameObject effect = Instantiate(proto, _bone.position, rot) as GameObject; //effect.AddComponent<DestroyTimer>().m_LifeTime = data.m_liveTime; if (m_EffectData.m_liveTime > -PETools.PEMath.Epsilon) { GameObject.DestroyObject(effect, m_EffectData.m_liveTime); } if (m_EffectData.m_bind) { EffectLateupdateHelper lateU = effect.GetComponent <EffectLateupdateHelper>(); if (null != lateU) { lateU.Init(_bone); if (m_EffectData.m_posStr == "CenterPos") { PeEntity entity = _rootTrans.GetComponentInParent <PeEntity>(); if (entity != null) { lateU.local = entity.bounds.center; HitEffectScale scaleEffect = effect.GetComponent <HitEffectScale>(); if (scaleEffect != null) { scaleEffect.Scale = entity.maxRadius * 2.0f; if (entity.peTrans != null) { scaleEffect.EmissionScale = entity.peTrans.bound.size; } } } } } } if (m_Data != null) { Profiler.BeginSample("GetMono"); MonoBehaviour[] behaviours = effect.GetComponentsInChildren <MonoBehaviour>(); Profiler.EndSample(); foreach (MonoBehaviour behaviour in behaviours) { SkInst inst = m_Data as SkInst; ISkEffectEntity skEffect = behaviour as ISkEffectEntity; if (inst != null && skEffect != null && !skEffect.Equals(null)) { skEffect.Inst = inst; } } } OnSpawned(effect); return(effect); } return(null); }
private void ProcDigVoxels(SkEntity caster) { SkInst inst = SkRuntimeInfo.Current as SkInst; IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is VFVoxelTerrain))) { return; } float damage = caster.GetAttribute((int)AttribType.Atk) * (1f + caster.GetAttribute((int)AttribType.ResDamage)); float radius = caster.GetAttribute((int)AttribType.ResRange); float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns); float height = caster.GetAttribute((int)AttribType.ResDamage); bool returnResource = digPos.w == 1; IntVector3 intPos = digPos.XYZ; if (!GameConfig.IsMultiMode) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x, intPos.y, intPos.z); List <VFVoxel> removeList = new List <VFVoxel>(); DigTerrainManager.DigTerrain(intPos, damage * (returnResource ? 5f : 1f), radius, height, ref removeList, returnResource); if (returnResource) { bool bGetSpItems = false; if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } Dictionary <int, int> itemGet = DigTerrainManager.GetResouce(removeList, resourceBonus, bGetSpItems); if (itemGet.Count > 0) { List <int> itemsArray = new List <int>(itemGet.Count * 2); foreach (int intemID in itemGet.Keys) { itemsArray.Add(intemID); itemsArray.Add(itemGet[intemID]); } caster.Pack += itemsArray.ToArray(); } } } else { if (caster != null && caster._net != null) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x,intPos.y, intPos.z); bool bGetSpItems = false; if (returnResource) { if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } } DigTerrainManager.DigTerrainNetwork((SkNetworkInterface)(caster._net), intPos, damage * (returnResource ? 5f : 1f), radius, resourceBonus, returnResource, bGetSpItems, 0.3f); } } }
public override void OnGetHurt(SkInst inst, float dmg) { base.OnGetHurt(inst, dmg); Entity.SendMsg(EMsg.Battle_BeAttacked, dmg, inst.Caster); }