예제 #1
0
    /// <summary>
    /// 创建普通敌机
    /// <para>string enemyId 敌机id</para>
    /// <para>int maxHp 初始血量</para>
    /// <para>float posX 起始X坐标</para>
    /// <para>float posY 起始Y坐标</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateNormalEnemyById(ILuaState luaState)
    {
        string enemyId;

        if (luaState.Type(-4) == LuaType.LUA_TNUMBER)
        {
            enemyId = luaState.ToNumber(-4).ToString();
        }
        else
        {
            enemyId = luaState.ToString(-4);
        }
        int   maxHp = luaState.ToInteger(-3);
        float posX  = (float)luaState.ToNumber(-2);
        float posY  = (float)luaState.ToNumber(-1);

        luaState.Pop(3);
        EnemyCfg    cfg   = EnemyManager.GetInstance().GetEnemyCfgById(enemyId);
        NormalEnemy enemy = EnemyManager.GetInstance().CreateEnemyByType(eEnemyType.NormalEnemy) as NormalEnemy;

        enemy.Init(cfg);
        enemy.SetMaxHp(maxHp);
        enemy.SetPosition(posX, posY);
        luaState.PushLightUserData(enemy);
        return(1);
    }
예제 #2
0
 public override void Clear()
 {
     EnemyManager.GetInstance().RestoreEnemyObjectToPool(_enemyObj);
     _cfg           = null;
     _enemyObj      = null;
     _dropItemDatas = null;
     base.Clear();
 }
예제 #3
0
 public void Init(EnemyCfg cfg)
 {
     _cfg      = cfg;
     _enemyObj = EnemyManager.GetInstance().CreateEnemyObjectByType(cfg.type);
     _enemyObj.SetEnemyAni(cfg.aniId);
     _enemyGo = _enemyObj.GetObject();
     _enemyTf = _enemyGo.transform;
     SetCollisionParams(cfg.collisionHalfWidth, cfg.collisionHalfWidth);
     _dropItemDatas    = null;
     _checkOutOfBorder = true;
 }
예제 #4
0
    /// <summary>
    /// 创建自定义的敌机
    /// <para>customizedName 自定义的名称</para>
    /// <para>enemyId 配置的id</para>
    /// <para>posX</para>
    /// <para>posY</para>
    /// <para>paras...</para>
    /// <para>numArgs 参数个数</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateCustomizedEnemy2(ILuaState luaState)
    {
        int numArgs = luaState.ToInteger(-1);

        luaState.Pop(1);
        string customizedName = luaState.ToString(-4 - numArgs);
        string enemyId;

        if (luaState.Type(-3 - numArgs) == LuaType.LUA_TNUMBER)
        {
            enemyId = luaState.ToNumber(-3 - numArgs).ToString();
        }
        else
        {
            enemyId = luaState.ToString(-3 - numArgs);
        }
        float posX = (float)luaState.ToNumber(-2 - numArgs);
        float posY = (float)luaState.ToNumber(-1 - numArgs);
        // 创建敌机
        EnemyCfg    cfg   = EnemyManager.GetInstance().GetEnemyCfgById(enemyId);
        NormalEnemy enemy = EnemyManager.GetInstance().CreateEnemyByType(eEnemyType.NormalEnemy) as NormalEnemy;

        enemy.Init(cfg);
        enemy.SetPosition(posX, posY);
        int onEliminateFuncRef = InterpreterManager.GetInstance().GetEnemyOnEliminateFuncRef(customizedName);

        if (onEliminateFuncRef != 0)
        {
            enemy.SetOnEliminateFuncRef(onEliminateFuncRef);
        }
        // init函数
        int initFuncRef = InterpreterManager.GetInstance().GetEnemyInitFuncRef(customizedName);

        luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, initFuncRef);
        luaState.PushLightUserData(enemy);
        luaState.Replace(-3 - numArgs);
        luaState.Replace(-3 - numArgs);
        luaState.Call(numArgs + 1, 0);
        // 弹出剩余两个参数
        luaState.Pop(2);
        // 将返回值压入栈
        luaState.PushLightUserData(enemy);
        return(1);
    }
예제 #5
0
    public void Init(string enemyId)
    {
        EnemyCfg cfg = EnemyManager.GetInstance().GetEnemyCfgById(enemyId);

        Init(cfg);
    }