Пример #1
0
 // Update is called once per frame
 void Update()
 {
     if (IsActive)
     {
         if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim))
         {
         }
         else if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim) + m_MovingTime)
         {
             if (!m_AnimationPlayer.IsPlaying(m_RotateAnim))
             {
                 m_AnimationPlayer.Play(m_RotateAnim);
             }
             if (!m_HasRotateEffect)
             {
                 m_HasRotateEffect = true;
                 if (null != m_RotateEffect)
                 {
                     GameObject rotateEffect = ResourceSystem.NewObject(m_RotateEffect, m_MovingTime) as GameObject;
                     if (null != rotateEffect)
                     {
                         Transform parent = LogicSystem.FindChildRecursive(this.transform, m_RotateEffectBone);
                         if (null != parent)
                         {
                             rotateEffect.transform.parent        = parent;
                             rotateEffect.transform.localPosition = Vector3.zero;
                             rotateEffect.transform.localRotation = Quaternion.identity;
                             m_EffectList.Add(rotateEffect);
                         }
                     }
                 }
             }
             Vector3 motion = m_Direction * Time.deltaTime * m_Speed;
             if (!m_MoveController.isGrounded)
             {
                 motion.y += -9.8f * Time.deltaTime;
             }
             m_MoveController.Move(m_Direction * Time.deltaTime * m_Speed);
             LogicSystem.NotifyGfxUpdatePosition(gameObject, this.transform.position.x, this.transform.position.y, this.transform.position.z, 0, this.transform.rotation.eulerAngles.y * Mathf.PI / 180f, 0);
             HandleDamage();
         }
         else if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim) + m_MovingTime + m_AnimationPlayer.AnimationLenth(m_EndAnim))
         {
             if (!m_AnimationPlayer.IsPlaying(m_EndAnim))
             {
                 SetEndure(gameObject, false);
                 m_AnimationPlayer.Play(m_EndAnim);
             }
         }
         else
         {
             StopSkill();
         }
         if (IsLogicDead())
         {
             NotifyNpcDead(gameObject);
             StopSkill();
         }
     }
 }
Пример #2
0
 private void ApplyGravity(GameObject target, float delta, SkillAnimInfo animInfo)
 {
     if (target == null)
     {
         return;
     }
     if (!Script_Util.IsOnGround(target, GroundTweak))
     {
         StartControlGravity();
         m_Vertical += Gravity * delta;
         Vector3   posOff     = m_Vertical * delta;
         Vector3   pos        = target.transform.position + posOff;
         Component controller = target.GetComponent <CharacterController>();
         if (controller != null)
         {
             ((CharacterController)controller).Move(posOff);
         }
         else
         {
             target.transform.position += posOff;
         }
         LogicSystem.NotifyGfxUpdatePosition(target, pos.x, pos.y, pos.z);
     }
     else
     {
         EndControlGravity();
     }
 }
Пример #3
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GameObject obj = sender as GameObject;

            if (null != obj)
            {
                if (curSectionTime <= m_Duration)
                {
                    float dist = (float)(int)delta / 1000.0f * m_Velocity;
                    UnityEngine.Vector3 targetPos = obj.transform.position + obj.transform.forward * dist;
                    CharacterController ctrl      = obj.GetComponent <CharacterController>() as CharacterController;
                    if (null != ctrl)
                    {
                        ctrl.Move(obj.transform.forward * dist);
                    }
                    else
                    {
                        obj.transform.position = targetPos;
                    }
                    LogicSystem.NotifyGfxUpdatePosition(obj, targetPos.x, targetPos.y, targetPos.z);
                    return(true);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }
Пример #4
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            if (curSectionTime < m_StartTime)
            {
                return(true);
            }
            UnityEngine.GameObject obj = sender as UnityEngine.GameObject;
            if (obj == null)
            {
                return(false);
            }
            SharedGameObjectInfo owner_info = LogicSystem.GetSharedGameObjectInfo(obj);

            if (owner_info.Summons.Count <= 0)
            {
                return(false);
            }
            UnityEngine.GameObject first_summon = LogicSystem.GetGameObject(owner_info.Summons[0]);
            if (first_summon == null)
            {
                return(false);
            }
            UnityEngine.Vector3 summon_pos = first_summon.transform.position;
            first_summon.transform.position = obj.transform.position;
            obj.transform.position          = summon_pos;
            LogicSystem.NotifyGfxUpdatePosition(obj, obj.transform.position.x, obj.transform.position.y, obj.transform.position.z);
            LogicSystem.NotifyGfxUpdatePosition(first_summon, first_summon.transform.position.x,
                                                first_summon.transform.position.y, first_summon.transform.position.z);
            return(false);
        }
Пример #5
0
 public static void ChangeDir(GameObject obj, float direction)
 {
     UnityEngine.Vector3 rotate = new UnityEngine.Vector3(0, direction * 180 / UnityEngine.Mathf.PI, 0);
     obj.transform.eulerAngles = rotate;
     LogicSystem.NotifyGfxUpdatePosition(obj, obj.transform.position.x, obj.transform.position.y,
                                         obj.transform.position.z, 0, direction, 0);
 }
Пример #6
0
        protected override void UpdateMovement(ImpactLogicInfo info, float deltaTime)
        {
            ///////////// temp code,禁止某些受击带来的位置突变
            bool bNoMovement = false;

            if (info.ConfigData.ParamNum == 4 && info.ConfigData.ExtraParams[3] == "456")
            {
                bNoMovement = true;
            }


            if (!bNoMovement)
            {
                if (null != info.ConfigData && null != info.Target)
                {
                    float speedRate            = GetLockFrameRate(info, Time.time - info.StartTime);
                    UnityEngine.Vector3 motion = info.MoveDir * info.MovementInfo.GetSpeedByTime(info.ElapsedTimeForEffect) * deltaTime * speedRate;
                    info.NormalPos += motion;
                    motion          = GfxImpactSystem.Instance.GetAdjustPoint(info.NormalPos - info.OrignalPos, info) + info.OrignalPos - info.Target.transform.position;
                    UnityEngine.Vector3 pos = info.Target.transform.position + motion;
                    pos = new UnityEngine.Vector3(pos.x, GetTerrainHeight(pos), pos.z);
                    MoveTo(info.Target, pos);
                    LogicSystem.NotifyGfxUpdatePosition(info.Target, info.Target.transform.position.x, info.Target.transform.position.y, info.Target.transform.position.z, 0, info.Target.transform.rotation.eulerAngles.y * UnityEngine.Mathf.PI / 180f, 0);
                }
            }
        }
    private void ProcessAttractImpact(GameObject attacker, List <GameObject> targets, Vector3 pos, float attractOff, float disMin)
    {
        if (targets == null || targets.Count <= 0)
        {
            return;
        }

        foreach (GameObject target in targets)
        {
            if (target != null)
            {
                Vector3 attractDir = pos - target.transform.position;
                float   distance   = attractDir.magnitude;
                if (distance >= disMin)
                {
                    Vector3   posOff     = attractDir.normalized * attractOff;
                    Vector3   targetPos  = target.transform.position + posOff;
                    Component controller = target.GetComponent <CharacterController>();
                    if (controller != null)
                    {
                        ((CharacterController)controller).Move(posOff);
                    }
                    else
                    {
                        target.transform.position += posOff;
                    }
                    LogicSystem.NotifyGfxUpdatePosition(target, targetPos.x, targetPos.y, targetPos.z);
                    TriggerImpl.RecordTarget(GetAttacker(), target);
                }
            }
        }
    }
Пример #8
0
 public virtual void UpdateSkill()
 {
     if (m_ObjAnimation == null)
     {
         return;
     }
     if (m_IsSkillActive)
     {
         Vector3 pos = gameObject.transform.position;
         LogicSystem.NotifyGfxUpdatePosition(gameObject, pos.x, pos.y, pos.z);
         if (CheckSkillOver())
         {
             m_IsSkillActive = false;
             StopSkill();
         }
     }
     if (m_IsHaveCollideMoveCurve)
     {
         if (!string.IsNullOrEmpty(m_CollideMoveCurve) && m_ColliderManager.IsCollided())
         {
             m_SkillMovement.StartCurveMove(m_CollideMoveCurve);
             m_IsHaveCollideMoveCurve = false;
         }
     }
 }
Пример #9
0
 public static void UpdateObjPosition(GameObject obj)
 {
     if (obj == null)
     {
         return;
     }
     LogicSystem.NotifyGfxUpdatePosition(obj, obj.transform.position.x, obj.transform.position.y, obj.transform.position.z);
 }
Пример #10
0
 public static void ChangeDir(GameObject obj, UnityEngine.Vector3 dir)
 {
     dir.y = 0;
     obj.transform.forward = dir;
     UnityEngine.Vector3 rotate = obj.transform.rotation.eulerAngles;
     LogicSystem.NotifyGfxUpdatePosition(obj, obj.transform.position.x, obj.transform.position.y,
                                         obj.transform.position.z, 0, rotate.y * UnityEngine.Mathf.PI / 180, 0);
 }
Пример #11
0
 public static void UpdateObjTransform(GameObject obj)
 {
     if (obj == null)
     {
         return;
     }
     LogicSystem.NotifyGfxUpdatePosition(obj, obj.transform.position.x, obj.transform.position.y, obj.transform.position.z,
                                         0, (float)(obj.transform.rotation.eulerAngles.y * Math.PI / 180.0f), 0);
 }
Пример #12
0
 // Update is called once per frame
 void Update()
 {
     if (IsActive)
     {
         if (null != m_Player)
         {
             if (Vector3.Distance(this.transform.position, m_Player.transform.position) < m_SafeDis + 1.0f)
             {
                 Quaternion rotation = Quaternion.LookRotation(GetFleeDir());
                 if (m_MinAngle < Mathf.Abs(Quaternion.Angle(this.transform.rotation, rotation)))
                 {
                     this.transform.rotation = Quaternion.Lerp(this.transform.rotation, rotation, 0.2f);
                 }
                 else
                 {
                     if (!m_AnimationPlayer.IsPlaying(m_FleeAnim.name))
                     {
                         m_AnimationPlayer.Play(m_FleeAnim.name);
                     }
                     if (m_MoveController.isGrounded)
                     {
                         m_YSpeed = 0.0f;
                     }
                     else
                     {
                         m_YSpeed += Time.deltaTime * m_Gravity;
                     }
                     m_MoveController.Move((this.transform.forward * m_FleeSpeed + new Vector3(0, m_YSpeed, 0)) * Time.deltaTime);
                 }
             }
             else if (Vector3.Distance(this.transform.position, m_Player.transform.position) > m_SafeDis)
             {
                 Quaternion faceRotation = Quaternion.LookRotation(GetFleeDir() * -1);
                 if (m_MinAngle < Mathf.Abs(Quaternion.Angle(this.transform.rotation, faceRotation)))
                 {
                     this.transform.rotation = Quaternion.Lerp(this.transform.rotation, faceRotation, 0.2f);
                 }
                 else
                 {
                     StopSkill();
                 }
             }
             LogicSystem.NotifyGfxUpdatePosition(gameObject, this.transform.position.x, this.transform.position.y, this.transform.position.z, 0, this.transform.rotation.eulerAngles.y * Mathf.PI / 180.0f, 0);
         }
         else
         {
             StopSkill();
         }
         if (Time.time > m_LastTriggerTime + m_MaxFleeTime)
         {
             StopSkill();
         }
     }
 }
Пример #13
0
    public void SetFacePos(Vector3 targetPos)
    {
        Vector3 dir = targetPos - transform.position;

        dir.y             = 0;
        transform.forward = dir;
        Vector3 rotate = gameObject.transform.rotation.eulerAngles;

        LogicSystem.NotifyGfxUpdatePosition(gameObject, transform.position.x, transform.position.y,
                                            transform.position.z, 0, rotate.y * Mathf.PI / 180, 0);
    }
Пример #14
0
 protected void GeneralTickImpact(float delatTime)
 {
     TickEffect(delatTime);
     TickAnimation(delatTime);
     TickMovement(delatTime);
     if (m_IsHitHighLight && Time.time > m_StartTime + m_HitHilghtLightTime)
     {
         m_IsHitHighLight    = false;
         m_Renderer.material = m_NormalMaterial;
     }
     LogicSystem.NotifyGfxUpdatePosition(gameObject, this.transform.position.x, this.transform.position.y, this.transform.position.z, 0, this.transform.rotation.eulerAngles.y * Mathf.PI / 180f, 0);
 }
Пример #15
0
 protected override void UpdateMovement(ImpactLogicInfo info, float deltaTime)
 {
     if (null != info.ConfigData && null != info.Target)
     {
         info.Velocity = info.MoveDir * info.MovementInfo.GetSpeedByTime(Time.time - info.StartTime);
         UnityEngine.Vector3 motion = info.Velocity * deltaTime;
         info.NormalPos += motion;
         motion          = GfxImpactSystem.Instance.GetAdjustPoint(info.NormalPos - info.OrignalPos, info) + info.OrignalPos - info.Target.transform.position;
         UnityEngine.Vector3 pos = info.Target.transform.position + motion;
         pos = new UnityEngine.Vector3(pos.x, GetTerrainHeight(pos), pos.z);
         MoveTo(info.Target, pos);
         LogicSystem.NotifyGfxUpdatePosition(info.Target, info.Target.transform.position.x, info.Target.transform.position.y, info.Target.transform.position.z, 0, info.Target.transform.rotation.eulerAngles.y * UnityEngine.Mathf.PI / 180f, 0);
     }
 }
Пример #16
0
    public void SetFacePos(Vector3 targetPos, MathRange YRotateRange)
    {
        //Debug.Log("---face: cur pos " + gameObject.transform.position + " target-pos:" + targetPos);
        Vector3 dir = targetPos - transform.position;

        //dir.y = 0;

        transform.forward = dir;
        Vector3 rotate = gameObject.transform.rotation.eulerAngles;

        rotate.x = YRotateRange.Clip(rotate.x);
        gameObject.transform.rotation = Quaternion.Euler(rotate);
        LogicSystem.NotifyGfxUpdatePosition(gameObject, transform.position.x, transform.position.y, transform.position.z,
                                            0, rotate.y * Mathf.PI / 180, 0);
    }
Пример #17
0
 // Update is called once per frame
 void Update()
 {
     if (IsActive)
     {
         if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim.name))
         {
         }
         else if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim.name) + m_AnimationPlayer.AnimationLenth(m_BladeAnim.name))
         {
             if (!m_AnimationPlayer.IsPlaying(m_BladeAnim.name))
             {
                 m_AnimationPlayer.Play(m_BladeAnim.name);
             }
             m_MoveController.Move(Time.deltaTime * m_MoveSpeed * this.transform.forward);
             LogicSystem.NotifyGfxUpdatePosition(gameObject, this.transform.position.x, this.transform.position.y, this.transform.position.z, 0, this.transform.rotation.eulerAngles.y * Mathf.PI / 180f, 0);
         }
         else if (Time.time < m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_StartAnim.name) + m_AnimationPlayer.AnimationLenth(m_BladeAnim.name) + m_AnimationPlayer.AnimationLenth(m_EndAnim.name))
         {
             if (!m_AnimationPlayer.IsPlaying(m_EndAnim.name))
             {
                 m_AnimationPlayer.CrossFade(m_EndAnim.name);
             }
         }
         else
         {
             StopSkill();
         }
         if (Time.time > m_LastTriggerTime + m_DamageDelay && !m_HasDamageSend)
         {
             m_HasDamageSend = true;
             if (m_DamageAngle <= 0.1 || m_DamageRange <= 0.1)
             {
                 return;
             }
             foreach (GameObject obj in GetObjInSector(this.transform.position - this.transform.forward * 0.0f, m_DamageRange, m_DamageAngle))
             {
                 if (obj.tag == "Player")
                 {
                     ImpactInfo impact = m_ImpactInfo.Clone() as ImpactInfo;
                     impact.Attacker   = gameObject;
                     impact.m_Velocity = this.transform.forward * impact.m_Velocity.z;
                     ImpactSystem.Instance.SendImpact(gameObject, obj, impact as ImpactInfo);
                 }
             }
         }
     }
 }
 protected override void UpdateMovement(ImpactLogicInfo info, float deltaTime)
 {
     // update virtical
     if (null != info.ConfigData && null != info.Target)
     {
         HitFlyParams param         = GetHitFlyParams(info);
         float        virticalSpeed = info.Velocity.y;
         info.Velocity = info.MoveDir * info.MovementInfo.GetSpeedByTime(Time.time - info.StartTime, -30);
         UnityEngine.Vector3 motion = UnityEngine.Vector3.zero;
         if (HitFlyState.Rising == param.ImpactState || HitFlyState.Falling == param.ImpactState)
         {
             info.Velocity = new UnityEngine.Vector3(info.Velocity.x, info.Velocity.y, info.Velocity.z);
         }
         else
         {
             info.Velocity = new UnityEngine.Vector3(info.Velocity.x, 0.0f, info.Velocity.z);
         }
         motion          = info.Velocity * deltaTime;
         info.NormalPos += motion;
         motion          = GfxImpactSystem.Instance.GetAdjustPoint(info.NormalPos - info.OrignalPos, info) + info.OrignalPos - info.Target.transform.position;
         Move(info.Target, motion);
         LogicSystem.NotifyGfxUpdatePosition(info.Target, info.Target.transform.position.x, info.Target.transform.position.y, info.Target.transform.position.z, 0, info.Target.transform.rotation.eulerAngles.y * UnityEngine.Mathf.PI / 180f, 0);
     }
 }
Пример #19
0
 private void OnMovePos(Vector3 posTarget, Vector3 posOff)
 {
     LogicSystem.NotifyGfxUpdatePosition(this.gameObject, posTarget.x, posTarget.y, posTarget.z);
 }