示例#1
0
        /// <summary>
        /// 驗證發送加入好友請求資格
        /// </summary>
        /// <param name="initiatorData">initiatorData</param>
        /// <param name="receiverData">receiverData</param>
        /// <returns>bool</returns>
        private bool VerifyFriendRequestQualification(InteractiveData initiatorData, InteractiveData receiverData)
        {
            if (initiatorData.BlacklistIDs.Contains(receiverData.MemberID))
            {
                this.logger.LogError($"Verify Friend Request Qualification Error For Initiator BlacklistIDs >>> InitiatorID:{initiatorData.MemberID} ReceiverID:{receiverData.MemberID}");
                return(false);
            }

            if (initiatorData.FriendListIDs.Contains(receiverData.MemberID))
            {
                this.logger.LogError($"Verify Friend Request Qualification Error For Initiator FriendListIDs >>> InitiatorID:{initiatorData.MemberID} ReceiverID:{receiverData.MemberID}");
                return(false);
            }

            if (initiatorData.RequestListIDs.Contains(receiverData.MemberID))
            {
                this.logger.LogError($"Verify Friend Request Qualification Error For Initiator RequestListIDs >>> InitiatorID:{initiatorData.MemberID} ReceiverID:{receiverData.MemberID}");
                return(false);
            }

            if (receiverData.BlacklistIDs.Contains(initiatorData.MemberID))
            {
                this.logger.LogError($"Verify Friend Request Qualification Error For Receiver BlacklistIDs >>> InitiatorID:{initiatorData.MemberID} ReceiverID:{receiverData.MemberID}");
                return(false);
            }

            if (receiverData.FriendListIDs.Contains(initiatorData.MemberID))
            {
                this.logger.LogError($"Verify Friend Request Qualification Error For Receiver FriendListIDs >>> InitiatorID:{initiatorData.MemberID} ReceiverID:{receiverData.MemberID}");
                return(false);
            }

            return(true);
        }
示例#2
0
        /// <summary>
        /// 建立互動資料
        /// </summary>
        /// <param name="interactiveDto">interactiveDto</param>
        /// <returns>InteractiveData</returns>
        private InteractiveData CreateInteractiveData(InteractiveDto interactiveDto, int status)
        {
            InteractiveData interactiveData = this.mapper.Map <InteractiveData>(interactiveDto);

            interactiveData.Status = status;
            return(interactiveData);
        }
示例#3
0
    private IEnumerable <IPoolable> InstansiateArrow(float deltaY, InteractiveData interactiveData)
    {
        var arrow = Instantiate(arrowPrefab);

        arrow.transform.localScale *= 0.7f;
        arrow.name = "Arrow";

        var arrowComponent = arrow.GetComponent <Arrow>();

        arrowComponent.SetData(interactiveData);
        arrowComponent.IsRotating = true;

        var arrowRigitBody = arrow.GetComponent <Rigidbody2D>();
        var poolable       = new Poolable(arrow);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            arrow.transform.position = transform.position;
            arrow.transform.rotation = transform.rotation;

            arrowRigitBody.velocity     = Vector2.zero;
            arrowRigitBody.gravityScale = 0;
            arrowRigitBody.AddForce(accelerate.Change(y: deltaY));
        }
        );

        yield return(poolable);
    }
示例#4
0
    private IEnumerable <IPoolable> InstansiateGrenade(InteractiveData interactiveData)
    {
        var grenade = Instantiate(grenadePrefab, transform.position, transform.rotation);

        grenade.name = "Grenade";

        grenade.GetComponent <ISetData <InteractiveData> >().SetData(interactiveData);

        var grenadeRigidbody = grenade.GetComponent <Rigidbody2D>();

        var poolable = new Poolable(grenade);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            grenade.transform.position = transform.position;
            grenade.transform.rotation = transform.rotation;

            grenadeRigidbody.velocity = Vector2.zero;
            grenadeRigidbody.AddForce(accelerate);
        }
        );

        yield return(poolable);
    }
    public static InteractiveData SetAccelerateMultiplyingTo(this InteractiveData interactiveData, out float accelerateMultiply, out float accelerateMultiplyingTime)
    {
        accelerateMultiply        = interactiveData.AccelerateMultiply;
        accelerateMultiplyingTime = interactiveData.AccelerateMultiplyingTime;

        return(interactiveData);
    }
示例#6
0
        /// <summary>
        /// 更新互動資料
        /// </summary>
        /// <param name="interactiveData">interactiveData</param>
        /// <returns>bool</returns>
        public async Task <bool> UpdateInteractiveData(InteractiveData interactiveData)
        {
            try
            {
                FilterDefinition <InteractiveData> filter = Builders <InteractiveData> .Filter.Eq("_id", interactiveData.Id);

                ReplaceOneResult result = await this.interactiveDatas.ReplaceOneAsync(filter, interactiveData);

                if (!result.IsAcknowledged)
                {
                    this.logger.LogError($"Update Interactive Data Fail For IsAcknowledged >>> Data:{JsonConvert.SerializeObject(interactiveData)}");
                    return(false);
                }

                if (result.ModifiedCount == 0)
                {
                    this.logger.LogError($"Update Interactive Data Fail For ModifiedCount >>> Data:{JsonConvert.SerializeObject(interactiveData)}");
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Update Interactive Data Error >>> Data:{JsonConvert.SerializeObject(interactiveData)}\n{ex}");
                return(false);
            }
        }
示例#7
0
    private IEnumerable <IPoolable> InstantiateBullets(InteractiveData interactiveData)
    {
        for (int i = 0; i < bulletCount; i++)
        {
            var bullet = Instantiate(bulletPrefab);
            bullet.name = "BlasterBullet";

            var bulletRigidbody = bullet.GetComponent <Rigidbody2D>();
            bullet.GetComponent <ISetData <InteractiveData> >().SetData(interactiveData);

            var poolable = new Poolable(bullet);
            poolable.OnFloated.Subscribe
            (
                () =>
            {
                bullet.transform.position = transform.position;
                bullet.transform.rotation = transform.rotation;

                bulletRigidbody.velocity = Vector2.zero;
                bulletRigidbody.AddForce(new Vector2(accelerate, 0));
            }
            );

            yield return(poolable);
        }
    }
示例#8
0
    public void SetData(InteractiveData interactiveData)
    {
        interactiveData.SetTo(damageEntity);

        damagedTime   = interactiveData.DamageTime;
        damagingCount = interactiveData.DamageCount;
    }
示例#9
0
    private IEnumerable <IPoolable> InstansiateRocket(InteractiveData interactiveData)
    {
        var rocket = Instantiate(rocketPrefab, transform.position, transform.rotation);

        rocket.name = "Rocket";

        rocket.GetComponent <ISetData <InteractiveData> >().SetData(interactiveData);
        var rocketRigidbody = rocket.GetComponent <Rigidbody2D>();
        var poolable        = new Poolable(rocket);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            shootingExplosion.Play();
            rocket.transform.position = shootingExplosion.transform.position;
            rocket.transform.rotation = transform.rotation;
            rocketRigidbody.velocity  = Vector2.zero;

            rocketRigidbody.AddForce(accelerate);
        }
        );

        yield return(poolable);
    }
示例#10
0
    private IEnumerable <IPoolable> InstantiateBullet(InteractiveData interactiveData, UnityAction onInteractHandler)
    {
        var bullet = Instantiate(bulletPrefab);

        bullet.name = "bullet";

        bullet.GetComponent <ISetData <InteractiveData> >().SetData(interactiveData);
        bullet.GetComponent <ISubscribedInteract>().OnInteracted.Subscribe(onInteractHandler);

        var poolable = new Poolable(bullet);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            spriteRenderer.sprite     = withoutBullet;
            bullet.transform.position = transform.position;
            bullet.transform.rotation = transform.rotation;

            var rigitbody      = bullet.GetComponent <Rigidbody2D>();
            rigitbody.velocity = Vector2.zero;
            rigitbody.AddForce(accelerate);

            StartCoroutine(CoroutineT.Single
                           (
                               () => spriteRenderer.sprite = withBullet, shootingReload / 2)
                           );
        }
        );

        yield return(poolable);
    }
示例#11
0
        private static void DoAddRelationship(Actor ao, string animName)
        {
            if (settings.LimitRelationshipPointGain)
            {
                var mBehavior  = FieldRefAccess <Actor, BehaviorTree>(ao, "mBehavior");
                var mITActions = mBehavior.FindTasks <ITDecorator>();
                if (mITActions != null && mITActions.Count > 0)
                {
                    for (int i = 0; i < mITActions.Count; i++)
                    {
                        Dbgl($"{animName} interact id: {mITActions[i].iid.Value}");
                        if (mITActions[i] != null && mITActions[i].iid.Value == InteractIds[animName])
                        {
                            FieldRef <ITDecorator, int> mCurTimesRef = FieldRefAccess <ITDecorator, int>("mCurTimes");
                            if (mCurTimesRef(mITActions[i]) < InteractiveData.GetTimes(mITActions[i].iid.Value))
                            {
                                mCurTimesRef(mITActions[i])++;
                                Module <FavorManager> .Self.GainFavorValue(ao.InstanceId,
                                                                           InteractiveData.GetFavorValue(InteractIds[animName]), true, true);
                            }
                            return;
                        }
                    }
                }
            }

            Module <FavorManager> .Self.GainFavorValue(ao.InstanceId, InteractiveData.GetFavorValue(InteractIds[animName]), true, true);
        }
示例#12
0
        /// <summary>
        /// 取得會員互動狀態
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>Tuple(int, string)</returns>
        public async Task <Tuple <int, string> > GetMemberInteractiveStatus(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Get Member Interactive Status Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return(Tuple.Create((int)InteractiveStatusType.None, "取得會員互動狀態失敗."));
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData != null)
                {
                    if (receiverInteractiveData.BlacklistIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.None, "對方已設該會員為黑名單."));
                    }

                    if (receiverInteractiveData.FriendListIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Friend, string.Empty));
                    }

                    if (receiverInteractiveData.RequestListIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Request, string.Empty));
                    }
                }

                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData != null)
                {
                    if (initiatorInteractiveData.BlacklistIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Black, string.Empty));
                    }

                    if (initiatorInteractiveData.FriendListIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Friend, string.Empty));
                    }

                    if (initiatorInteractiveData.RequestListIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.RequestHandler, string.Empty));
                    }
                }

                return(Tuple.Create((int)InteractiveStatusType.None, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Member Interactive Status Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return(Tuple.Create((int)InteractiveStatusType.None, "取得會員互動狀態發生錯誤."));
            }
        }
示例#13
0
        /// <summary>
        /// 加入黑名單
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> AddBlacklist(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Add Blacklist Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入黑名單失敗.");
                }

                //// 處理發起者互動資料
                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Add Blacklist Fail For Get Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("加入黑名單失敗.");
                }

                bool updateInitiatorBlacklistResult   = this.UpdateListHandler(initiatorInteractiveData.BlacklistIDs, interactiveCommand.ReceiverID, true);
                bool updateInitiatorFriendListResult  = this.UpdateListHandler(initiatorInteractiveData.FriendListIDs, interactiveCommand.ReceiverID, false);
                bool updateInitiatorRequestListResult = this.UpdateListHandler(initiatorInteractiveData.RequestListIDs, interactiveCommand.ReceiverID, false);
                if (updateInitiatorBlacklistResult || updateInitiatorFriendListResult || updateInitiatorRequestListResult)
                {
                    bool initiatorUpdateResult = await this.interactiveRepository.UpdateInteractiveData(initiatorInteractiveData);

                    if (!initiatorUpdateResult)
                    {
                        return("黑名單更新失敗.");
                    }
                }

                //// 處理接收者互動資料
                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData != null)
                {
                    bool updateReceiverFriendListResult  = this.UpdateListHandler(receiverInteractiveData.FriendListIDs, interactiveCommand.InitiatorID, false);
                    bool updateReceiverRequestListResult = this.UpdateListHandler(receiverInteractiveData.RequestListIDs, interactiveCommand.InitiatorID, false);
                    if (updateReceiverFriendListResult || updateReceiverRequestListResult)
                    {
                        bool receiverUpdateResult = await this.interactiveRepository.UpdateInteractiveData(receiverInteractiveData);

                        if (!receiverUpdateResult)
                        {
                            return("黑名單更新失敗.");
                        }
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Add Blacklist Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("加入黑名單發生錯誤.");
            }
        }
示例#14
0
        /// <summary>
        /// 刪除好友
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> DeleteFriend(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Delete Friend Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("刪除好友失敗.");
                }

                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, false);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Delete Friend Fail For Get Initiator Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("刪除好友失敗.");
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData == null)
                {
                    this.logger.LogError($"Delete Friend Fail For Get Receiver Interactive Data >>> ReceiverID:{interactiveCommand.ReceiverID}");
                    return("刪除好友失敗.");
                }

                //// 更新發起者互動資料
                bool updateInitiatorFriendListResult = this.UpdateListHandler(initiatorInteractiveData.FriendListIDs, interactiveCommand.ReceiverID, false);
                if (updateInitiatorFriendListResult)
                {
                    bool initiatorUpdateResult = await this.interactiveRepository.UpdateFriendList(initiatorInteractiveData.MemberID, initiatorInteractiveData.FriendListIDs);

                    if (!initiatorUpdateResult)
                    {
                        return("好友名單更新失敗.");
                    }
                }

                //// 更新接收者互動資料
                bool updateReceiverFriendListResult = this.UpdateListHandler(receiverInteractiveData.FriendListIDs, interactiveCommand.InitiatorID, false);
                if (updateReceiverFriendListResult)
                {
                    bool receiverUpdateResult = await this.interactiveRepository.UpdateFriendList(receiverInteractiveData.MemberID, receiverInteractiveData.FriendListIDs);

                    if (!receiverUpdateResult)
                    {
                        return("好友名單更新失敗.");
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Delete Friend Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("刪除好友發生錯誤.");
            }
        }
    public static InteractiveData SetDamageTo(this InteractiveData interactiveData, out float damage, out DamageType damageType, out float damageTime, out int damageCount)
    {
        damage      = interactiveData.Damage;
        damageType  = interactiveData.DamageType;
        damageTime  = interactiveData.DamageTime;
        damageCount = interactiveData.DamageCount;

        return(interactiveData);
    }
示例#16
0
 private void InstantiateArrows(InteractiveData interactiveData)
 {
     arrowPool = new Pool
                 (
         InstansiateArrow(deltaY, interactiveData)
         .With(InstansiateArrow(0, interactiveData))
         .With(InstansiateArrow(-deltaY, interactiveData))
                 );
 }
示例#17
0
    public void SetData(InteractiveData interactiveData)
    {
        interactiveData.SetTo(damageEntity);

        damageEntity.ActionInCoroutineAttack =
        x => x.AddColorBy(damageEntity.DamagedColor, interactiveData.DamageTime);

        damageEntity.Collider = collider;
    }
示例#18
0
        /// <summary>
        /// 加入好友請求
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> AddFriendRequest(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Add Friend Request Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入好友請求失敗.");
                }

                //// 驗證發送加入好友請求資格
                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Add Friend Request Fail For Get Initiator Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("加入好友請求失敗.");
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, true);

                if (receiverInteractiveData == null)
                {
                    this.logger.LogError($"Add Friend Request Fail For Get Receiver Interactive Data >>> ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入好友請求失敗.");
                }

                bool verifyFriendRequestQualificationResult = this.VerifyFriendRequestQualification(initiatorInteractiveData, receiverInteractiveData);
                if (!verifyFriendRequestQualificationResult)
                {
                    return("加入好友請求失敗.");
                }

                //// 更新接收者互動資料
                bool updateReceiveRequestListResult = this.UpdateListHandler(receiverInteractiveData.RequestListIDs, interactiveCommand.InitiatorID, true);
                if (updateReceiveRequestListResult)
                {
                    bool receiverUpdateResult = await this.interactiveRepository.UpdateRequestList(receiverInteractiveData.MemberID, receiverInteractiveData.RequestListIDs);

                    if (!receiverUpdateResult)
                    {
                        return("加入好友請求名單更新失敗.");
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Add Friend Request Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("加入好友請求發生錯誤.");
            }
        }
    public virtual void SetData(InteractiveData interactiveData)
    {
        reloadingTimeBetweenShoots = interactiveData.DamageTime;
        interactiveData.SetTo(reloadingEntity);

        hittingEffectsPool = new Pool <Vector2>
                             (
            InstansiateHittingEffect()
            .With(InstansiateHittingEffect())
                             );

        bulletsPool = new Pool(InstansiateBullets(interactiveData));
    }
示例#20
0
    public void SetData(InteractiveData interactiveData)
    {
        interactiveData.SetTo(damageEntity);
        damageEntity.Collider = collider2D;

        damageEntity.ActionInCoroutineAttack =
            player =>
        {
            hittingEffect.transform.position = player.transform.position;
            hittingEffect.Play();
            player.AddColorBy(damageEntity.DamagedColor, damageEntity.ColoredTime);
        };
    }
示例#21
0
        /// <summary>
        /// 建立互動資料
        /// </summary>
        /// <param name="interactiveData">interactiveData</param>
        /// <returns>bool</returns>
        public async Task <bool> CreateInteractiveData(InteractiveData interactiveData)
        {
            try
            {
                await this.interactiveDatas.InsertOneAsync(interactiveData);

                return(true);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Create Interactive Data Error >>> Data:{JsonConvert.SerializeObject(interactiveData)}\n{ex}");
                return(false);
            }
        }
示例#22
0
    private void WriteCode()
    {
        if (!scriptCode.text.EndsWith("\n") && scriptCode.text.Length > 1)
        {
            scriptCode.text += "\n";
        }
        scriptCode.text += OALScriptBuilder.GetInstance().AddCall(
            interactiveData.fromClass, interactiveData.fromMethod,
            OALProgram.Instance.RelationshipSpace.GetRelationshipByClasses(interactiveData.fromClass, interactiveData.toClass).RelationshipName, interactiveData.toClass,
            interactiveData.toMethod
            );

        interactiveData = new InteractiveData();
    }
示例#23
0
        /// <summary>
        /// 加入好友
        /// </summary>
        /// <param name="interactiveDto">interactiveDto</param>
        /// <returns>string</returns>
        public async Task <string> JoinFriend(InteractiveDto interactiveDto)
        {
            try
            {
                if (string.IsNullOrEmpty(interactiveDto.MemberID))
                {
                    return("會員編號無效.");
                }

                if (string.IsNullOrEmpty(interactiveDto.InteractiveID))
                {
                    return("對方會員編號無效.");
                }

                InteractiveData interactiveData = await this.interactiveRepository.GetAppointInteractiveData(interactiveDto.MemberID, interactiveDto.InteractiveID);

                if (interactiveData == null)
                {
                    interactiveData = this.CreateInteractiveData(interactiveDto, (int)InteractiveType.Friend);
                    bool isSuccess = await this.interactiveRepository.CreateInteractiveData(interactiveData);

                    if (!isSuccess)
                    {
                        return("加入好友失敗.");
                    }
                }
                else
                {
                    if (interactiveData.Status != (int)InteractiveType.Friend)
                    {
                        interactiveData.Status = (int)InteractiveType.Friend;
                        bool updateInteractiveDataResult = await this.interactiveRepository.UpdateInteractiveData(interactiveData);

                        if (!updateInteractiveDataResult)
                        {
                            return("加入好友失敗.");
                        }
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Join Friend Error >>> MemberID:{interactiveDto.MemberID} InteractiveID:{interactiveDto.InteractiveID}\n{ex}");
                return("加入好友發生錯誤.");
            }
        }
示例#24
0
    public void StartAnimate()
    {
        InteractiveText.GetComponent <DotsAnimation>().currentText = "Select source class\n for call function\ndirectly in diagram\n.";
        scriptCode.text = "";
        OALScriptBuilder.GetInstance().Clear();
        InteractiveData interactiveData = new InteractiveData();

        isCreating = true;
        introScreen.SetActive(false);
        PanelInteractiveIntro.SetActive(true);
        PanelMethod.SetActive(false);
        PanelInteractive.SetActive(true);
        PanelInteractiveCompleted.SetActive(false);
        animationScreen.SetActive(true);
        mainScreen.SetActive(false);
    }
示例#25
0
    private InteractiveData AddInteractive(string filename, IdCode idCode, string name,
                                           long openCost, int maxLevel, long increasingObjectCost, long increasingCost, long score, int tier)
    {
        var dynamicParatetrs = TryRead <DynamicParatetrs>(filename, @dynamic => new DynamicParatetrs(@dynamic));

        var interactiveData = new InteractiveData
                              (
            dynamicParatetrs, name, openCost, maxLevel,
            increasingObjectCost, increasingCost,
            score, tier
                              );

        interactiveData.OnDataChanged.Subscribe(interactive => Write(filename, interactive.DynamicParatetrs));
        interactives.Add(idCode, interactiveData);

        return(interactiveData);
    }
    private IEnumerable <IPoolable> InstansiateBullets(InteractiveData interactiveData)
    {
        for (int i = 0; i < bulletCount; i++)
        {
            var bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
            bullet.name = BulletName;

            var bulleetLogic = bullet.GetComponent <Bullet>();

            bulleetLogic.OnInteract.Subscribe(hittingEffectsPool.PoolObject);

            bulleetLogic.SetData(interactiveData);
            bulleetLogic.EffectShower = EffectShower;

            var bulletRigidbody = bullet.GetComponent <Rigidbody2D>();
            var poolable        = new Poolable(bullet);

            poolable.OnFloated.Subscribe
            (
                () =>
            {
                if (distanceToPlayer.magnitude < minShootingDistanse)
                {
                    shootingExplosion.Play();
                    bullet.transform.position = shootingExplosion.transform.position;
                    bullet.transform.rotation = transform.rotation;

                    bulletRigidbody.velocity = Vector2.zero;

                    float angle = (PlayerTransform.position - transform.position).Atan2();
                    angle       = Mathf.Deg2Rad * (angle * Mathf.Rad2Deg + RandomizeAngle);

                    bulletRigidbody.AddForce(accelerate * angle.ToVectorFromRad());
                }
                else
                {
                    bullet.SetActive(false);
                }
            }
            );

            yield return(poolable);
        }
    }
示例#27
0
        /// <summary>
        /// 移除好友
        /// </summary>
        /// <param name="interactiveDto">interactiveDto</param>
        /// <returns>string</returns>
        public async Task <string> RemoveFriend(InteractiveDto interactiveDto)
        {
            try
            {
                if (string.IsNullOrEmpty(interactiveDto.MemberID))
                {
                    return("會員編號無效.");
                }

                if (string.IsNullOrEmpty(interactiveDto.InteractiveID))
                {
                    return("對方會員編號無效.");
                }

                InteractiveData interactiveData = await this.interactiveRepository.GetAppointInteractiveData(interactiveDto.MemberID, interactiveDto.InteractiveID);

                if (interactiveData == null)
                {
                    //// 不做處理,認定已移除好友
                    this.logger.LogWarning($"No Interactive Data For Remove Friend >>> MemberID:{interactiveDto.MemberID} InteractiveID:{interactiveDto.InteractiveID}");
                }
                else
                {
                    if (interactiveData.Status == (int)InteractiveType.Friend)
                    {
                        interactiveData.Status = (int)InteractiveType.None;
                        bool updateInteractiveDataResult = await this.interactiveRepository.UpdateInteractiveData(interactiveData);

                        if (!updateInteractiveDataResult)
                        {
                            return("移除好友失敗.");
                        }
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Remove Friend Error >>> MemberID:{interactiveDto.MemberID} InteractiveID:{interactiveDto.InteractiveID}\n{ex}");
                return("移除好友發生錯誤.");
            }
        }
示例#28
0
 public void ResetInteractiveSelection()
 {
     if (interactiveData.fromClass != null)
     {
         Animation.Instance.HighlightClass(interactiveData.fromClass, false);
     }
     if (interactiveData.toClass != null)
     {
         Animation.Instance.HighlightClass(interactiveData.toClass, false);
     }
     if (interactiveData.fromMethod != null)
     {
         Animation.Instance.HighlightMethod(interactiveData.fromClass, interactiveData.fromMethod, false);
     }
     InteractiveText.GetComponent <DotsAnimation>().currentText = "Select source class\nfor call function\ndirectly in diagram\n.";
     interactiveData = new InteractiveData();
     UpdateInteractiveShow();
     PanelInteractiveIntro.SetActive(true);
     PanelMethod.SetActive(false);
 }
示例#29
0
    /* Method to retrieve data from the .json file
     */
    private void LoadGameData()
    {
        // Path.Combine combines strings into a file path
        // Application.StreamingAssets points to Assets/StreamingAssets in the Editor, and the StreamingAssets folder in a build
        string filePath = Path.Combine(Application.streamingAssetsPath, animalDataFileName);

        if (File.Exists(filePath))
        {
            // Read the json from the file into a string
            string          dataAsJson = File.ReadAllText(filePath);
            InteractiveData loadedData = JsonUtility.FromJson <InteractiveData>(dataAsJson);

            // Retrieve the allAnimalData property of loadedData
            allAnimalData = loadedData.allAnimalData;
        }
        else
        {
            Debug.LogError("Cannot load game data!");
        }
    }
示例#30
0
    public IEnumerable <IPoolable> InstansiateExposion(InteractiveData interactiveData)
    {
        var explosion = Instantiate(explosionPrefab, transform.position, transform.rotation);

        explosion.name = "MineExplosion";

        explosion.GetComponent <ISetData <InteractiveData> >().SetData(interactiveData);

        var poolable = new Poolable(explosion);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            explosion.transform.position = transform.position;
            explosion.transform.rotation = transform.rotation;
        }
        );

        yield return(poolable);
    }