Beispiel #1
0
        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, 0);
        }
Beispiel #2
0
 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;
     UnityEngine.CollisionFlags flag;
     if (ati.MoveControler != null)
     {
         flag = ati.MoveControler.Move(target_pos - ati.TargetObj.transform.position);
     }
     else
     {
         return(false);
     }
     UnityEngine.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 & UnityEngine.CollisionFlags.CollidedSides) <= 0)
     {
         ati.TargetObj.transform.position = target_pos;
         return(true);
     }
     else
     {
         LogSystem.Info("----can't move to " + target_pos + "  just move to " + cur_pos);
         return(false);
     }
 }
Beispiel #3
0
        private void SendFinalImpact()
        {
            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)
                {
                    //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, 0);
                }
            }
        }
Beispiel #4
0
        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, 0);
                    }
                }
            }
        }