// Use this for initialization void Start() { // Score Delta var scoreDelayed = score.Throttle(TimeSpan.FromMilliseconds(500)).ToReactiveProperty(); var scoreDelta = score.Select(x => x - scoreDelayed.Value); // Change deltaScoreText and format it so that if the number is positive it has a "+" in front of it scoreDelta.SubscribeToText(deltaScoreText, x => (x > 0 ? ("+" + x) : x.ToString())); // Add animation everytime score delta changes scoreDelta.Subscribe(_ => AnimateObj(deltaScoreText.gameObject)); scoreDelayed.Subscribe(delayedScore => { // Change text scoreText.text = delayedScore.ToString(); // You can also set by doing scoreDelayed.SubscribeToText(scoreText); // Start animation AnimateObj(scoreText.gameObject); // Clear deltaScore ocne we've updated the score deltaScoreText.text = ""; }); // Button actions ------------------------ addButton.onClick.AddListener(() => score.Value++); resetButton.onClick.AddListener(() => score.Value = 0); }
private void SetupGame(Level level) { GetComponent <BaseLauncher>().Setup(level); DestroyedTargetCount.Value = 0; TargetsToDestory.Value = level.Targets.Length; HitCount.Select(x => x.ToString()).SubscribeToText(HitCountText); HitCount.Value = level.MaxHitCount; SubscribeTo(level); }
// Use this for initialization void Start() { // ---------------------------------- // Activate mainMenu // ---------------------------------- mainMenu.SetActive(true); endMenu.SetActive(false); gameMenu.SetActive(false); // ---------------------------------- // Setup scoreDelayed + scoreDelta // ---------------------------------- // Score Delayed scoreDelayed = score.Throttle(TimeSpan.FromSeconds(1)).ToReactiveProperty(); // Score Delta ( no need to have it as a private value since we're not gonna need to use it again in another function ) var scoreDelta = score.Select(x => x - scoreDelayed.Value); // Change deltaScoreText and format it so that if the number is positive it has a "+" in front of it scoreDelta.SubscribeToText(deltaScoreText, x => (x > 0 ? ("+" + x) : x.ToString())); // Add animation everytime score delta changes scoreDelta.Subscribe(_ => AnimateObj(deltaScoreText.gameObject)); scoreDelayed.Subscribe(delayedScore => { // Change text scoreText.text = delayedScore.ToString(); // You can also set it using scoreDelayed.SubscribeToText(scoreText); // Start animation AnimateObj(scoreText.gameObject); // Clear deltaScore ocne we've updated the score deltaScoreText.text = ""; }); // ---------------------------------- // Setup highscore ( and save values ) // ---------------------------------- int lastHighScore = PlayerPrefs.GetInt("highscore"); highscore = score.StartWith(lastHighScore).DistinctUntilChanged().Scan(int.MinValue, Math.Max).Do(x => PlayerPrefs.SetInt("highscore", x)).ToReactiveProperty(); // ---------------------------------- // Setup levels // ---------------------------------- level.SubscribeToText(levelText, x => "Level " + x.ToString()); // ---------------------------------- // Button actions // ---------------------------------- startButton.onClick.AddListener(StartGame); restartButton.onClick.AddListener(StartGame); }
private void Start() { // HPが0以下になったら通知 isDead = currentHP.Select(hp => hp <= 0).ToReactiveProperty(); // HPの変更があったらhpTextを(現在のHPに)変更する currentHP.Where(_ => !isDead.Value).Subscribe(hp => hpText.text = hp.ToString()); // ボタンをおしたらHPが1減るようにする damageButton.OnClickAsObservable().Subscribe(_ => currentHP.Value -= 1); // 死んだら死んだと表示する isDead.Where(d => d).Subscribe(_ => hpText.text = "死んだ"); }
void CreateObservables() { // trigger an observable based on when the player's position changes playerLocation = new BehaviorSubject <Vector2>(Vector2.zero); latitude.Merge(longitude) .Select((float _) => { // value could be either lat or lng, so just cheat and grab the current property values return(new Vector2(longitude.Value, latitude.Value)); }) .Subscribe((Vector2 coords) => { playerLocation.OnNext(coords); }); activeStar = new BehaviorSubject <StarController>(null); deliveryDestinations = new BehaviorSubject <Dictionary <int, int> >(GenerateDeliveries()); fuelAvailable .Select((x) => x < 3 && fuelTimeRemaining.Value == 0) .Subscribe((x) => { StartFuelTimer(); }); }
public EnemyModel(int hp) { //初始化 HP = new IntReactiveProperty(hp); isInteractable = HP.Select(HP => HP <= 0).ToReadOnlyReactiveProperty(); }
private void Awake() { IsDead = hp.Select(x => x <= 0).ToReadOnlyReactiveProperty(); }