public void Update(int filterIndex, Selection selection, float deltaTime) { foreach (var s in selection) { } Entity e = selection.First(); C_MonsterGenerator c = e.GetComp <C_MonsterGenerator>(); if (c.current == null) { return; } if (c.timeForNextWave > 0) { c.timeForNextWave -= deltaTime; if (c.timeForNextWave > 0) { return; } } if (c.timeForNextWave < 0) { float fixTime = -c.timeForNextWave; c.timeForNextWave = 0; c.timer = fixTime; return; } c.timer += deltaTime; while (c.timer > c.current.interval) { c.timer -= c.current.interval; MonsterEntry mm = CfgProxy.Instance.Get <MonsterEntry>(c.current.monsterID); Entity monster = context.CreateMonster(mm); c.counter++; if (c.counter == c.current.count) { if (c.currentWave < c.monsterSequences.Count - 1) { c.currentWave++; c.current = c.monsterSequences[c.currentWave]; c.ResetCounter(); } else { c.current = null; } break; } } }
public static Entity CreateMonster(this Context context, MonsterEntry monsterEntry) { Entity monster = context.Add(); IRecipe recipe = Recipes.Get <MonsterRecipe>(); if (recipe == null) { throw new Exception($"获取 {nameof(MonsterRecipe)}失败 {monsterEntry.recipe}"); } monster.AddComp <C_MonsterConfig>().cfg = monsterEntry; recipe.Setup(monster, context); return(monster); }
public void Setup(Entity e, Context context) { e.AddComp <C_IdentifyMonster>(); C_Position position = e.AddComp <C_Position>(); Entity e1 = context.SelectOne <C_LevelData>(); LinkedListNode <LevelEntry.TileData> first = e1.GetComp <C_LevelData>().paths.First; position.position = first.Value.position; e.AddComp <C_Rotation>(); MonsterEntry monsterEntry = e.GetComp <C_MonsterConfig>().cfg; C_MonsterFindPath monsterFindPath = e.AddComp <C_MonsterFindPath>(); monsterFindPath.target = first; monsterFindPath.rotating = 0; e.AddComp <C_TargetPos>(); e.AddComp <C_MoveToPos>().speed = monsterEntry.speed / 100f; e.AddComp <C_MoveStart>(); C_MonsterHp hp = e.AddComp <C_MonsterHp>(); int h = monsterEntry.hp / 100; hp.max = h; hp.rest = h; C_Asset asset = e.AddComp <C_Asset>(); asset.mesh = "Mesh/MonsterTest"; // monsterEntry.asset; asset.material = "Materials/Red"; e.AddComp <C_Renderer>(); }