Beispiel #1
0
    public ObjectColliderBase CreateColliderByType(eColliderType type)
    {
        ObjectColliderBase collider = null;

        switch (type)
        {
        case eColliderType.Circle:
            collider = new ColliderCircle();
            break;

        case eColliderType.Rect:
            collider = new ColliderRect();
            break;

        case eColliderType.ItalicRect:
            collider = new ColliderItalicRect();
            break;

        default:
            Logger.LogError("Collider Type " + type + " is not exist!");
            break;
        }
        _colliderList.Add(collider);
        _colliderCount++;
        return(collider);
    }
    /// <summary>
    /// ObjectCollider清除自身
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int ObjectColliderClearSelf(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-1) as ObjectColliderBase;

        collider.ClearSelf();
        return(0);
    }
    /// <summary>
    /// 根据类型创建一个引力场
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateGravitationFieldByType(ILuaState luaState)
    {
        eColliderType      type     = (eColliderType)luaState.ToInteger(-1);
        ObjectColliderBase collider = ColliderManager.GetInstance().CreateGravitationFieldByType(type);

        luaState.PushLightUserData(collider);
        return(1);
    }
    /// <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);
    }
    /// <summary>
    /// 设置ObjectCollider的清除类型
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderEliminateType(ILuaState luaState)
    {
        ObjectColliderBase collider      = luaState.ToUserData(-2) as ObjectColliderBase;
        eEliminateDef      eliminateType = (eEliminateDef)luaState.ToInteger(-1);

        collider.SetEliminateType(eliminateType);
        return(0);
    }
    /// <summary>
    /// 设置物体碰撞器的生存时间
    /// <para>duration 生存时间</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderExistDuration(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-2) as ObjectColliderBase;
        int duration = luaState.ToInteger(-1);

        collider.SetExistDuration(duration);
        return(0);
    }
    /// <summary>
    /// 设置物体碰撞器的碰撞组
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderColliderGroup(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-2) as ObjectColliderBase;
        int colliderGroup           = luaState.ToInteger(-1);

        collider.SetColliderGroup((eColliderGroup)colliderGroup);
        return(0);
    }
Beispiel #8
0
 private void ClearCollider()
 {
     if (_collider != null)
     {
         _collider.ClearSelf();
         _collider = null;
     }
 }
    /// <summary>
    /// 将ObjectCollider缩放至指定尺寸
    /// <para>toWidth 圆的半径、矩形的宽</para>
    /// <para>toHeight</para>
    /// <para>duration 持续时间</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int ObjectColliderScaleToSize(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-4) as ObjectColliderBase;
        float toWidth  = (float)luaState.ToNumber(-3);
        float toHeight = (float)luaState.ToNumber(-2);
        int   duration = luaState.ToInteger(-1);

        collider.ScaleToSize(toWidth, toHeight, duration);
        return(0);
    }
    /// <summary>
    /// 设置物体碰撞器的尺寸
    /// <para>arg0 矩形碰撞器的宽、圆碰撞器的半径</para>
    /// <para>arg1 矩形碰撞器的高,圆碰撞器不使用</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderSize(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-3) as ObjectColliderBase;
        float arg0 = (float)luaState.ToNumber(-2);
        float arg1 = (float)luaState.ToNumber(-1);

        luaState.Pop(3);
        collider.SetSize(arg0, arg1);
        return(0);
    }
    /// <summary>
    /// 设置物体碰撞器的位置
    /// <para>posX</para>
    /// <para>posY</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetObjectColliderToPos(ILuaState luaState)
    {
        ObjectColliderBase collider = luaState.ToUserData(-3) as ObjectColliderBase;
        float posX = (float)luaState.ToNumber(-2);
        float posY = (float)luaState.ToNumber(-1);

        luaState.Pop(3);
        collider.SetPosition(posX, posY);
        return(0);
    }
Beispiel #12
0
 private void CollidedByEnemyCallback(ObjectColliderBase collider, ICollisionObject enemy)
 {
     ClearCollider();
     if (!_isFinish)
     {
         Explode();
         ShakeEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.ShakeEffect) as ShakeEffect;
         effect.DoShake(0, 5, 1, 5);
         //ObjectColliderBase newCollider = ColliderManager.GetInstance().CreateColliderByType(eColliderType.Circle);
         //newCollider.SetSize(_size, _size);
         //newCollider.SetPosition(_curPos);
         //newCollider.SetEliminateType(eEliminateDef.PlayerSpellCard);
         //newCollider.SetColliderGroup(eColliderGroup.Enemy | eColliderGroup.EnemyBullet);
         //newCollider.SetHitEnemyDamage(_dmg);
         //newCollider.SetExistDuration(1);
         _isFinish = true;
     }
 }
Beispiel #13
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 #14
0
    public ObjectColliderBase CreateGravitationFieldByType(eColliderType type)
    {
        ObjectColliderBase collider = null;

        switch (type)
        {
        case eColliderType.Circle:
            collider = new GravitationFieldCircle();
            break;

        case eColliderType.Rect:
            collider = new GravitationFieldRect();
            break;

        default:
            Logger.LogError("GravitationField Type " + type + " is not exist!");
            break;
        }
        _fieldList.Add(collider);
        _fieldCount++;
        return(collider);
    }
    /// <summary>
    /// 创建自定义的collider
    /// <para>customizedName 自定义的类型名称</para>
    /// <para>eColliderType collider的形状类别</para>
    /// <para>参数...</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateCustomizedCollider(ILuaState luaState)
    {
        int           top            = luaState.GetTop();
        int           numArgs        = top - 2;
        string        customizedName = luaState.ToString(-top);
        eColliderType type           = (eColliderType)luaState.ToInteger(-top + 1);
        int           funcRef        = InterpreterManager.GetInstance().GetCustomizedFuncRef(customizedName, eCustomizedType.Collider, eCustomizedFuncRefType.Init);

        luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef);
        ObjectColliderBase collider = ColliderManager.GetInstance().CreateColliderByType(type);

        luaState.PushLightUserData(collider);
        // 复制参数
        int copyIndex = -numArgs - 2;

        for (int i = 0; i < numArgs; i++)
        {
            luaState.PushValue(copyIndex);
        }
        luaState.Call(numArgs + 1, 0);
        // 返回结果
        luaState.PushLightUserData(collider);
        return(1);
    }