/// <summary>
    /// 设置ObjectCollider击中敌机的伤害
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderHitEnemyDamage(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-2) as ObjectColliderBase;
        int damage = luaState.ToInteger(-1);

        collider.SetHitEnemyDamage(damage);
        return(0);
    }
Beispiel #2
0
 public void Init(float angle, int index)
 {
     _dmg       = 35;
     _size      = 32;
     _curRot    = angle;
     _index     = index;
     _state     = 1;
     _totalTime = 190 - index * 10;
     CommandManager.GetInstance().Register(CommandConsts.PauseGame, this);
     CommandManager.GetInstance().Register(CommandConsts.ContinueGame, this);
     _collider = ColliderManager.GetInstance().CreateColliderByType(eColliderType.Circle);
     _collider.SetPosition(2000, 0);
     _collider.SetSize(_size, _size);
     _collider.RegisterCallback(eColliderGroup.Enemy, CollidedByEnemyCallback);
     _collider.SetEliminateType(eEliminateDef.PlayerSpellCard);
     _collider.SetColliderGroup(eColliderGroup.Enemy | eColliderGroup.EnemyBullet);
     _collider.SetHitEnemyDamage(_dmg);
     _isFinish = false;
 }
Beispiel #3
0
        private void OnState2Update()
        {
            bool isInScreen = MathUtil.DetectCollisionBetweenAABBAndAABB(_curPos, _size, _size, Vector2.zero, 192, 224);

            if (_target == null || (_target != null && _target.GetInstanceID() != _targetInstID))
            {
                _target = FindTarget();
                if (_target != null)
                {
                    _targetInstID = _target.GetInstanceID();
                }
            }
            if (_target != null)
            {
                float an = MathUtil.GetAngleBetweenXAxis(_target.GetPosition() - _curPos);
                float a  = an - _curRot;
                a = MathUtil.ClampAngle(a);
                if (a >= 180)
                {
                    a -= 360;
                }
                float da = 1200f / (Vector2.Distance(_target.GetPosition(), _curPos) + 1);
                if (da >= Mathf.Abs(a))
                {
                    _curRot = an;
                }
                else
                {
                    _curRot += da * Mathf.Sign(a);
                }
                //Logger.Log(string.Format("a={0},da={1},curRot={2}", a, da, _curRot));
            }
            float dx = 8f * Mathf.Cos(Mathf.Deg2Rad * _curRot);
            float dy = 8f * Mathf.Sin(Mathf.Deg2Rad * _curRot);

            if (isInScreen)
            {
                if (_curPos.x > 192)
                {
                    _curPos.x = 192;
                    dx        = dy = 0;
                }
                if (_curPos.x < -192)
                {
                    _curPos.x = -192;
                    dx        = dy = 0;
                }
                if (_curPos.y < -224)
                {
                    _curPos.y = -224;
                    dx        = dy = 0;
                }
                if (_curPos.y > 224)
                {
                    _curPos.y = 224;
                    dx        = dy = 0;
                }
            }
            _curPos          += new Vector2(dx, dy);
            _tf.localPosition = _curPos;
            if (_timer >= 230)
            {
                _dmg  = _dmg * 0.4f;
                _size = _size * 2;
                _collider.SetSize(64, 64);
                _collider.SetHitEnemyDamage(_dmg);
                _state = 3;
            }
        }