Esempio n. 1
0
            public static bool TryParse(string value, out ConditionStatus result)
            {
                result = default(ConditionStatus);

                if (value == "provisional")
                {
                    result = ConditionStatus.Provisional;
                }
                else if (value == "working")
                {
                    result = ConditionStatus.Working;
                }
                else if (value == "confirmed")
                {
                    result = ConditionStatus.Confirmed;
                }
                else if (value == "refuted")
                {
                    result = ConditionStatus.Refuted;
                }
                else
                {
                    return(false);
                }

                return(true);
            }
Esempio n. 2
0
        //call this whenever your condition has been changed!
        protected void UpdateSatisfaction(bool satisfied, bool invokeEvent)
        {
            if (Status == ConditionStatus.Unknown)
            {
                Status = satisfied ? ConditionStatus.Satisfied : ConditionStatus.Unsatisfied;
            }
            else if (satisfied && Status == ConditionStatus.Unsatisfied)
            {
                Status = ConditionStatus.Satisfied;
            }
            else if (!satisfied && Status == ConditionStatus.Satisfied)
            {
                Status = ConditionStatus.Unsatisfied;
            }
            else
            {
                invokeEvent = false;
            }

            if (invokeEvent)
            {
                if (Status == ConditionStatus.Satisfied)
                {
                    onSatisfied.Invoke();
                }
                else
                {
                    onUnsatisfied.Invoke();
                }
            }
        }
Esempio n. 3
0
 /// <summary>
 /// 異常状態を解除する
 /// </summary>
 /// <param name="status">Status.</param>
 public void Remove_c_status(ConditionStatus status)
 {
     if (CheckFlag(status))
     {
         conditionStatus &= ~status;
     }
 }
Esempio n. 4
0
 /// <summary>
 /// 異常状態を設定する
 /// </summary>
 /// <param name="newStatus">New status.</param>
 public void Set_c_Status(ConditionStatus newStatus)
 {
     if (CheckFlag(newStatus))
     {
         return;
     }
     conditionStatus |= newStatus;
 }
Esempio n. 5
0
        private void BuildParamList( )
        {
            if (this.ConditionStatus == ConditionStatus.Default)
            {
                paramList.Clear();

                ParamNameIndex = 0;

                this.BuildParamList(paramList, this.ConditionList);

                this.ConditionStatus = ConditionStatus.BuildParam;
            }
        }
Esempio n. 6
0
        public bool SetCondition(string type, ConditionStatus status, string reason, string message)
        {
            if (this.Conditions == null)
            {
                this.Conditions = new List <MobileDeviceCondition>();
            }

            var currentCondition = this.Conditions.FirstOrDefault(c => c.Type == type);

            if (currentCondition == null)
            {
                this.Conditions.Add(
                    new MobileDeviceCondition()
                {
                    Type               = type,
                    Status             = status,
                    Reason             = reason,
                    Message            = message,
                    LastHeartbeatTime  = DateTimeOffset.Now,
                    LastTransitionTime = DateTimeOffset.Now,
                });

                return(true);
            }
            else if (currentCondition.Status != status ||
                     currentCondition.Reason != reason ||
                     currentCondition.Message != message)
            {
                currentCondition.LastHeartbeatTime  = DateTimeOffset.Now;
                currentCondition.LastTransitionTime = DateTimeOffset.Now;
                currentCondition.Status             = status;
                currentCondition.Reason             = reason;
                currentCondition.Message            = message;

                return(true);
            }
            else if (currentCondition.LastHeartbeatTime.AddMinutes(5) < DateTimeOffset.Now)
            {
                currentCondition.LastHeartbeatTime = DateTimeOffset.Now;

                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 7
0
        public Condition ReplaceItem(string fieldName, object val)
        {
            if (!this.ConditionList.Any())
            {
                return(this);
            }

            foreach (var cond in ConditionList)
            {
                this.ReplaceItem(cond.ConditionItems, fieldName, val);

                this.ReplaceItem(cond.ConditionList, fieldName, val);
            }

            this.ConditionStatus = ConditionStatus.Default;

            return(this);
        }
Esempio n. 8
0
    /// <summary>
    /// 状態の時間をカウント
    /// </summary>
    /// <param name="c_status">状態</param>
    /// <param name="time">効果時間</param>
    public IEnumerator StatusCounter(ConditionStatus c_status, float time)
    {
        float startTime = Time.time;

        while (true)
        {
            if (CheckFlag(c_status))
            {
                if ((Time.time - startTime) >= time)
                {
                    Remove_c_status(c_status);
                    yield break;
                }
                yield return(new WaitForSeconds(COROUTINE_WAIT_TIME));
            }
            else
            {
                yield break;
            }
        }
    }
Esempio n. 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public Condition RemoveItem(params string[] fieldNames)
        {
            if (!this.ConditionList.Any())
            {
                return(this);
            }

            if (fieldNames == null || !fieldNames.Any())
            {
                return(this);
            }

            foreach (var cond in ConditionList)
            {
                this.RemoveItem(cond.ConditionItems, fieldNames);

                this.RemoveItem(cond.ConditionList, fieldNames);
            }
            this.ConditionStatus = ConditionStatus.Default;

            return(this);
        }
Esempio n. 10
0
 public static string ToString(ConditionStatus value)
 {
     if (value == ConditionStatus.Provisional)
     {
         return("provisional");
     }
     else if (value == ConditionStatus.Working)
     {
         return("working");
     }
     else if (value == ConditionStatus.Confirmed)
     {
         return("confirmed");
     }
     else if (value == ConditionStatus.Refuted)
     {
         return("refuted");
     }
     else
     {
         throw new ArgumentException("Unrecognized ConditionStatus value: " + value.ToString());
     }
 }
Esempio n. 11
0
        /// <summary>
        /// Asynchronously sets a device condition.
        /// </summary>
        /// <param name="client">
        /// A client which provides access to the Kubernetes cluster.
        /// </param>
        /// <param name="device">
        /// The device for which to set the status.
        /// </param>
        /// <param name="type">
        /// The name of the condition.
        /// </param>
        /// <param name="status">
        /// The status of the condition.
        /// </param>
        /// <param name="reason">
        /// A machine-readable reason for the condition status.
        /// </param>
        /// <param name="message">
        /// A human-readable reason for the condition status.
        /// </param>
        /// <param name="cancellationToken">
        /// A <see cref="CancellationToken"/> which can be used to cancel the asynchronous operation.
        /// </param>
        /// <returns>
        /// A <see cref="Task"/> which represents the asynchronous operation.
        /// </returns>
        public static async Task SetDeviceConditionAsync(this NamespacedKubernetesClient <MobileDevice> client, MobileDevice device, string type, ConditionStatus status, string reason, string message, CancellationToken cancellationToken)
        {
            Requires.NotNull(device, nameof(device));
            Requires.NotNull(type, nameof(type));

            bool hasStatus     = device.Status != null;
            bool hasConditions = device.Status?.Conditions != null;

            if (device.Status == null)
            {
                device.Status = new MobileDeviceStatus();
            }

            if (device.Status.SetCondition(type, status, reason, message))
            {
                var patch = new JsonPatchDocument <MobileDevice>();

                if (!hasStatus)
                {
                    patch.Add(p => p.Status, device.Status);
                }
                else if (!hasConditions)
                {
                    patch.Add(p => p.Status.Conditions, device.Status.Conditions);
                }
                else
                {
                    patch.Replace(p => p.Status.Conditions, device.Status.Conditions);
                }

                await client.PatchStatusAsync(device, patch, cancellationToken).ConfigureAwait(false);
            }
        }
Esempio n. 12
0
    /// <summary>
    /// 異常状態を与える
    /// </summary>
    /// <param name="target">Target</param>
    /// <param name="sc">Skill Script</param>
    /// <param name="a_time">エフェクトを出す時間</param>
    /// <param name="effect">エフェクトのpath</param>
    /// <param name="e_time">Damageを与える時間</param>
    /// <returns></returns>
    public IEnumerator StatusMagic(GameObject target, Skill skill, float a_time, string effect, float e_time, ConditionStatus status)
    {
        if (skill.s_range > 0)
        {
            CreateRange();
            GameObject.FindGameObjectWithTag("Range").GetComponent <SphereCollider>().radius = skill.s_range;
        }
        float timer    = 0;
        bool  useMagic = false;

        while (true)
        {
            timer += Time.deltaTime;
            if (timer >= a_time && !useMagic)
            {
                GameObject effectObj = Instantiate(Resources.Load(effect), target.transform.position, Quaternion.identity) as GameObject;
                effectObj.transform.parent = this.transform;
                useMagic = true;
            }
            if (timer >= e_time)
            {
                try
                {
                    if (skill.s_range > 0)
                    {
                        foreach (var r_target in GameObject.FindGameObjectWithTag("Range").GetComponent <RangeDetect>().targets)
                        {
                            // TODO: Player / Enemy を判断できるように
                            if (r_target.layer != LayerMask.NameToLayer("Enemy"))
                            {
                                continue;
                            }
                            EnemyBase eb = r_target.GetComponent <EnemyBase>();
                            eb.Set_c_Status(status);
                            eb.StartCoroutine(eb.StatusCounter(status, skill.s_effectTime));
                        }
                    }
                    else
                    {
                        if (target.layer == LayerMask.NameToLayer("Enemy"))
                        {
                            EnemyBase eb = target.GetComponent <EnemyBase>();
                            eb.Set_c_Status(status);
                            eb.StartCoroutine(eb.StatusCounter(status, skill.s_effectTime));
                        }
                    }
                    if (GameObject.FindGameObjectWithTag("Range"))
                    {
                        DeleteRange();
                    }
                    StartCoroutine(SkillRecast(skill, skill.s_recast));
                    yield break;
                }
                catch (MissingReferenceException)
                {
                    yield break;
                }
            }
            yield return(new WaitForEndOfFrame());
        }
    }
Esempio n. 13
0
 /// <summary>
 /// 状態を確認する
 /// </summary>
 /// <param name="newStatus">New status.</param>
 public bool CheckFlag(ConditionStatus newStatus)
 {
     return((conditionStatus & newStatus) == newStatus);
 }
Esempio n. 14
0
 /// <summary>
 /// 異常状態を設定し、カウントする
 /// </summary>
 /// <param name="c_status">C status.</param>
 /// <param name="time">Time.</param>
 public void SetCondition(ConditionStatus c_status, float time)
 {
     Set_c_Status(c_status);
     StartCoroutine(StatusCounter(c_status, time));
 }
Esempio n. 15
0
            public static bool TryParse(string value, out ConditionStatus result)
            {
                result = default(ConditionStatus);

                if( value=="provisional")
                    result = ConditionStatus.Provisional;
                else if( value=="working")
                    result = ConditionStatus.Working;
                else if( value=="confirmed")
                    result = ConditionStatus.Confirmed;
                else if( value=="refuted")
                    result = ConditionStatus.Refuted;
                else
                    return false;

                return true;
            }
Esempio n. 16
0
 public static string ToString(ConditionStatus value)
 {
     if( value==ConditionStatus.Provisional )
         return "provisional";
     else if( value==ConditionStatus.Working )
         return "working";
     else if( value==ConditionStatus.Confirmed )
         return "confirmed";
     else if( value==ConditionStatus.Refuted )
         return "refuted";
     else
         throw new ArgumentException("Unrecognized ConditionStatus value: " + value.ToString());
 }