public void Initialize() { // 有効になった後 DidActiveDisposable = ActivateSubject // 受付時間が経過した後 .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(Constant.MoleActiveDuration))) // まだ攻撃が有効な場合 .Where(_ => CanAttack) // 非表示にする .Subscribe(_ => HideSubject.Do()); // 無効になった後 DidInactiveDisposable = DeactivateSubject // ランダムに待った後 .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(UnityEngine.Random.Range(Constant.MoleInactiveDurationFrom, Constant.MoleInactiveDurationTo)))) // 次の処理をランダムに決定して実行 .Subscribe(_ => NextActionMap.Random().Value(this).Do()); ActivateSubject.Subscribe(_ => CanAttack = true); DeactivateSubject.Subscribe(_ => CanAttack = false); // 表示が終わったら当たり判定を有効にする ShowSubject.WhenDid().Subscribe(_ => ActivateSubject.OnNext(Unit.Default)); // 消去が始まったら当たり判定を無効にする HideSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); // フェイントが終わったら当たり判定を無効にする FeintSubject.WhenDid().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); // 攻撃が始まったら当たり判定を無効にする AttackSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); }
void OnWeaponInstantiate(ItemSolid itemSolid) { _weaponSolid = itemSolid; _weapon = (Weapon)_weaponSolid.item; _weaponSolid.transform.SetParent(_animator.GetBoneTransform(weapon.targetBone)); _weaponSolid.transform.localPosition = Vector3.zero; _weaponSolid.transform.localRotation = Quaternion.identity; _weaponSolid.transform.localScale = new Vector3(0.08f, 0.08f, 0.08f); _weaponSolid.enabled = false; _weaponSolid.GetComponent <Floater>().enabled = false; _weaponSolid.GetComponent <ItemSpawnEffector>().enabled = false; //Should Make AttackerNULL and AttackerImpl for ProjectileWeapon _attackSubject = _weaponSolid.GetComponent <AttackSubject>(); _attackSubject.enabled = false; _attackSubject.owner = this; }
public void Attack() { AttackSubject.Did(MoleIndex); }
void OnWeaponInstantiate(ItemSolid itemSolid) { _weaponSolid = itemSolid; _weapon = (Weapon)_weaponSolid.item; _weaponSolid.transform.SetParent(_animator.GetBoneTransform(weapon.targetBone)); _weaponSolid.transform.localPosition = Vector3.zero; _weaponSolid.transform.localRotation = Quaternion.identity; _weaponSolid.transform.localScale = new Vector3(0.08f, 0.08f, 0.08f); _weaponSolid.enabled = false; _weaponSolid.GetComponent<Floater>().enabled = false; _weaponSolid.GetComponent<ItemSpawnEffector>().enabled = false; //Should Make AttackerNULL and AttackerImpl for ProjectileWeapon _attackSubject = _weaponSolid.GetComponent<AttackSubject>(); _attackSubject.enabled = false; _attackSubject.owner = this; }