Пример #1
0
 void CheckSkillPart(SkillPart part, int idx)
 {
     if (partCounter[idx] > part.otherCount)
     {
         return;
     }
     if (skillTimer > part.NextTriggerTimer(partCounter[idx]))
     {
         TriggerPart(part, idx);
         partCounter[idx]++;
     }
 }
Пример #2
0
        private void ShowPartGizmons(SkillPart part)
        {
#if UNITY_EDITOR
            var col = part.collider;
            if (col.radius > 0)
            {
                //circle
                var pos = entity?.transform.TransformPoint(col.pos) ?? col.pos;
                Gizmos.DrawSphere(pos.ToVector3XZ(LFloat.one), col.radius.ToFloat());
            }
            else
            {
                //aabb
                var pos = entity?.transform.TransformPoint(col.pos) ?? col.pos;
                Gizmos.DrawCube(pos.ToVector3XZ(LFloat.one), col.size.ToVector3XZ(LFloat.one));
                DebugExtension.DebugLocalCube(Matrix4x4.TRS(
                                                  pos.ToVector3XZ(LFloat.one),
                                                  Quaternion.Euler(0, entity.transform.deg.ToFloat(), 0),
                                                  Vector3.one),
                                              col.size.ToVector3XZ(LFloat.one), Gizmos.color);
            }
#endif
        }
Пример #3
0
        void TriggerPart(SkillPart part, int idx)
        {
            eventHandler.OnSkillPartStart(this);
            _curPartIdx = idx;
#if DEBUG_SKILL
            _showTimer = Time.realtimeSinceStartup + 0.1f;
#endif

            var col = part.collider;
#if NO_DEBUG_NO_COLLISION
            if (col.radius > 0)
            {
                //circle
                PhysicSystem.QueryRegion(TargetLayer, entity.transform.TransformPoint(col.pos), col.radius,
                                         _OnTriggerEnter);
            }
            else
            {
                //aabb
                PhysicSystem.QueryRegion(TargetLayer, entity.transform.TransformPoint(col.pos), col.size,
                                         entity.transform.forward,
                                         _OnTriggerEnter);
            }
#else
            //TODO Ignore CollisionSystem
            if (col.radius > 0)
            {
                var colPos = entity.transform.TransformPoint(col.pos);
                foreach (var e in entity.GameStateService.GetEnemies())
                {
                    var targetCenter = e.transform.pos;
                    if ((targetCenter - colPos).sqrMagnitude < col.radius * col.radius)
                    {
                        _tempEntities.Add(e);
                    }
                }
            }
#endif
            foreach (var other in _tempEntities)
            {
                other.TakeDamage(entity, CurPart.damage, other.transform.pos.ToLVector3());
            }

            //add force
            if (part.needForce)
            {
                var force   = part.impulseForce;
                var forward = entity.transform.forward;
                var right   = forward.RightVec();
                var z       = forward * force.z + right * force.x;
                force.x = z.x;
                force.z = z.y;
                foreach (var other in _tempEntities)
                {
                    other.rigidbody.AddImpulse(force);
                }
            }

            if (part.isResetForce)
            {
                foreach (var other in _tempEntities)
                {
                    other.rigidbody.ResetSpeed(new LFloat(3));
                }
            }

            _tempEntities.Clear();
        }