private void AddAttachObject(Collider collider) { GameObject parent = m_ColliderInfo.GetCollider(); if (parent == null) { return; } AttachConfig attach_config = m_ColliderInfo.GetAttachConfig(); AttachTargetInfo attach_info = new AttachTargetInfo(); attach_info.ParentObj = parent; attach_info.TargetObj = collider.gameObject; attach_info.AttachNode = TriggerUtil.GetChildNodeByName(collider.gameObject, attach_config.AttachNodeName); UnityEngine.Vector3 hit_pos = parent.GetComponent <Collider>().ClosestPointOnBounds(attach_info.AttachNode.position); attach_info.ParentPos = attach_info.ParentObj.transform.InverseTransformPoint(hit_pos); attach_info.Rotate = attach_config.AttachRotation; attach_info.MoveControler = attach_info.TargetObj.GetComponent <CharacterController>(); m_AttachedObjects.Add(attach_info); UpdateAttachTargetPos(attach_info); LogicSystem.NotifyGfxMoveControlStart(attach_info.TargetObj, m_OwnSkill.SkillId, true); //Debug.Log("---AttachImpact: send " + attach_config.AttachImpact + " to " + attach_info.TargetObj.name); m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(), collider.gameObject, attach_config.AttachImpact, attach_config.AttachImpactTime, m_OwnSkill.SkillId, m_CurHitCountId); }
private bool UpdateAttachTargetPos(AttachTargetInfo ati) { if (ati.AttachNode == null) { return(false); } ati.TargetObj.transform.rotation = ati.ParentObj.transform.rotation; ati.TargetObj.transform.Rotate(ati.Rotate); UnityEngine.Vector3 relative_motion = (ati.TargetObj.transform.position - ati.AttachNode.position); UnityEngine.Vector3 target_pos = ati.ParentObj.transform.TransformPoint(ati.ParentPos) + relative_motion; //CollisionFlags flag; if (ati.MoveControler != null) { //flag = ati.MoveControler.Move(target_pos - ati.TargetObj.transform.position); } else { return(false); } //Vector3 cur_pos = ati.TargetObj.transform.position; //if (/*Math.Abs(cur_pos.x - target_pos.x) <= 0.5 && Math.Abs(cur_pos.z - target_pos.z) <= 0.5*/) { //if ((flag & CollisionFlags.CollidedSides) <= 0) { ati.TargetObj.transform.position = target_pos; return(true); // } else { // //Debug.Log("----can't move to " + target_pos + " just move to " + cur_pos); // return false; // } }
private void SendFinalImpact() { AttachConfig attach_config = m_ColliderInfo.GetAttachConfig(); UpdateHitCount(); for (int i = m_AttachedObjects.Count - 1; i >= 0; --i) { AttachTargetInfo ati = m_AttachedObjects[i]; if (ati.ParentObj != null) { //Debug.Log("---FinalImpact: send " + attach_config.FinalImpact + " to " + ati.TargetObj.name); m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(), ati.TargetObj, attach_config.FinalImpact, attach_config.FinalImpactTime, m_OwnSkill.SkillId, m_CurHitCountId); } } }
private void UpdateAttachObjects() { AttachConfig attach_config = m_ColliderInfo.GetAttachConfig(); for (int i = m_AttachedObjects.Count - 1; i >= 0; --i) { AttachTargetInfo ati = m_AttachedObjects[i]; if (ati.ParentObj != null) { if (!UpdateAttachTargetPos(ati)) { m_AttachedObjects.RemoveAt(i); //Debug.Log("---FallImpact: send to " + ati.TargetObj.name); m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(), ati.TargetObj, attach_config.FallImpact, attach_config.FallImpactTime, m_OwnSkill.SkillId, m_CurHitCountId); } } } }