コード例 #1
0
        private void InitCoffee()
        {
            Color coffeeColor = new Color(111 / 255.0f, 78 / 255.0f, 55 / 255.0f, 0.95f);
            CoffeeEffectParameters coffeeEffect = new CoffeeEffectParameters(main.Effects["Coffee"],
                                                                             main.Textures["CoffeeUV"], main.Textures["CoffeeFlow"], coffeeColor);
            Transform3D transform3D = new Transform3D(Vector3.Zero, -Vector3.Forward, Vector3.Up);

            coffee = new Coffee("Coffee", ActorType.Primitive,
                                StatusType.Update | StatusType.Drawn, transform3D, coffeeEffect,
                                main.Models["CoffeePlane"], levelData.coffeeInfo,
                                main.ObjectManager.ActorList.Find(actor3D => actor3D.ActorType == ActorType.Player) as PlayerTile);
            //Most of these constructor arguments are not used, need to refactor the entire structure.
            coffee.ControllerList.Add(new CoffeeMovementComponent("cmc", ControllerType.Movement,
                                                                  ActivationType.Activated, 0, Smoother.SmoothingMethod.Smooth, coffee));
            coffee.ControllerList.Add(new ColliderComponent("cc Coffee", ControllerType.Collider,
                                                            (skin0, skin1) =>
            {
                if (skin1.Owner.ExternalData is Tile tile)
                {
                    if (tile.TileType == ETileType.Player)
                    {
                        EventManager.FireEvent(new RemoveActorEvent {
                            body = tile.Body
                        });
                        EventManager.FireEvent(new SoundEventInfo()
                        {
                            category       = SoundCategory.UI, sfxType = SfxType.Lose,
                            soundEventType = SoundEventType.PlaySfx
                        });
                        TimeManager.CallFunctionInSeconds("lose",
                                                          () =>
                        {
                            EventManager.FireEvent(new GameStateMessageEventInfo {
                                GameState = GameState.Lost
                            });
                        }, 2);
                    }

                    if (tile.SpawnPos.Y < ((Coffee)skin0.Owner.ExternalData).Transform3D.Translation.Y)
                    {
                        EventManager.FireEvent(new RemoveActorEvent {
                            body = tile.Body
                        });
                        EventManager.FireEvent(new TileEventInfo {
                            Id = tile.ID, Type = TileEventType.Consumed
                        });
                    }
                    else
                    {
                        tile.Body.SetInactive();
                        EventManager.FireEvent(new TileEventInfo
                        {
                            Id = tile.ID, Type = TileEventType.Reset, IsEasy = main.IsEasy
                        });
                    }

                    return(true);
                }

                return(false);
            }));

            main.ObjectManager.Add(coffee);
            UiTimeController controller =
                main.UiManager.UIObjectList.Find(actor2D => actor2D.ID == "TimeText")?.ControllerList[0] as
                UiTimeController;

            controller?.SetCoffee(coffee);
        }