public async Task Initialize(PlayerConfig config) { var selection = config.Selection; var character = Registry.Get <CharacterData>().Get(selection.CharacterID); var prefab = await character.Prefab.LoadAsync(); Assert.IsNotNull(prefab); Model = Object.Instantiate(prefab); Model.name = $"Player {config.PlayerID + 1} Simulation ({character.name}, {selection.Pallete})"; PlayerUtil.DestroyAll(Model, typeof(Renderer), typeof(MeshFilter)); var task = Model.Broadcast <IPlayerComponent>( component => component.Initialize(config, false)); SimulationComponents = Model.GetComponentsInChildren <ISimulation <PlayerState, PlayerInputContext> >(); PlayerSimulationComponents = SimulationComponents.OfType <IPlayerSimulation>().ToArray(); await task; }
public async Task Initialize(PlayerConfig config) { var selection = config.Selection; var character = Registry.Get <CharacterData>().Get(selection.CharacterID); var prefab = await character.Prefab.LoadAsync(); View = Object.Instantiate(prefab); View.name = $"Player {config.PlayerID + 1} View ({character.name}, {selection.Pallete})"; PlayerUtil.DestroyAll(View, typeof(Collider), typeof(Hurtbox), typeof(Hitbox)); var task = View.Broadcast <IPlayerComponent>(component => component.Initialize(config, true)); var viewTasks = from factory in viewFactories where factory != null select factory.CreateViews(config); var views = (await Task.WhenAll(viewTasks)).SelectMany(v => v); await task; // TODO(james7132): Move character view components to it's own factory ViewComponents = View.GetComponentsInChildren <IStateView <PlayerState> >().Concat(views).ToArray(); }