/// <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); }
public override void Clear() { EnemyManager.GetInstance().RestoreEnemyObjectToPool(_enemyObj); _cfg = null; _enemyObj = null; _dropItemDatas = null; base.Clear(); }
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; }
/// <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); }
public void Init(string enemyId) { EnemyCfg cfg = EnemyManager.GetInstance().GetEnemyCfgById(enemyId); Init(cfg); }