Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net.Configuration;
  4. using OctoGhast.Framework.Mobile;
  5.  
  6. namespace OctoGhast.Framework.Activities {
  7.  
  8. /// <summary>
  9. /// Base class for handling an activity.
  10. /// </summary>
  11. public abstract class ActivityHandler {
  12.  
  13. /// <summary>
  14. /// Can this activity be started in the current situation?
  15. /// </summary>
  16. /// <param name="info">ActivityInfo to investigate</param>
  17. public virtual bool CanStart(ActivityInfo info) => true;
  18.  
  19. /// <summary>
  20. /// Can this activity be continued in the current situation?
  21. /// This is called every turn before ProcessStep().
  22. /// If you require in-depth checking, it's recommended to cache your situation
  23. /// in <see cref="ActivityInfo.ActivityData"/> and re-check periodically.
  24. /// </summary>
  25. /// <param name="info">ActivityInfo to investigate</param>
  26. public virtual bool CanContinue(ActivityInfo info) => true;
  27.  
  28. /// <summary>
  29. /// Called when this Activity is interrupted.
  30. /// What this should do depends on the activity,
  31. /// </summary>
  32. /// <param name="info"></param>
  33. /// <returns>
  34. /// True if the task is 'safely' interrupted and can later be resumed.
  35. /// False is the task is ruined by interruption and cannot be resumed.
  36. /// </returns>
  37. public virtual bool OnInterrupt(ActivityInfo info) => true;
  38.  
  39. /// <summary>
  40. /// Estimate how long this task will take.
  41. /// </summary>
  42. /// <param name="info">ActivityInfo to investigate</param>
  43. /// <returns>TimeDuration of how long the task is likely to take</returns>
  44. public virtual TimeDuration EstimateDuration(ActivityInfo info) => TimeDuration.FromTurns(0);
  45.  
  46. /// <summary>
  47. /// Process a unit of activity.
  48. /// </summary>
  49. /// <param name="info">ActivityInfo to investigate</param>
  50. /// <returns></returns>
  51. public virtual IEnumerable<ActivityStep> ProcessStep(ActivityInfo info) {
  52. yield return new ActivityStep();
  53. }
  54.  
  55. /// <summary>
  56. /// Finalize this activity.
  57. /// </summary>
  58. /// <param name="info">ActivityInfo to investigate</param>
  59. /// <returns>
  60. /// A filled ActivityResult structure indicating the status of this activity.
  61. /// </returns>
  62. public virtual ActivityResult FinishActivity(ActivityInfo info) => new ActivityResult(success: false);
  63. }
  64.  
  65. /// <summary>
  66. /// Information about a single step of an activity.
  67. /// </summary>
  68. public class ActivityStep {
  69.  
  70. }
  71.  
  72. /// <summary>
  73. /// Final information about an activity result.
  74. /// </summary>
  75. public class ActivityResult {
  76. public bool Success { get; }
  77.  
  78. public ActivityResult(bool success) {
  79. Success = success;
  80. }
  81. }
  82.  
  83. public enum ActivityPriority : short {
  84. /// <summary>
  85. /// High Priority, such as maintaining needs or checking for hostile environments.
  86. /// </summary>
  87. High,
  88.  
  89. /// <summary>
  90. /// Normal priority tasks, this is generally the current activity.
  91. /// </summary>
  92. Normal,
  93. }
  94.  
  95. public class ActivityInfo {
  96. /// <summary>
  97. /// The owner of this activity.
  98. /// </summary>
  99. public BaseCreature Owner { get; set; }
  100.  
  101. /// <summary>
  102. /// Is this activity a passive task?
  103. /// </summary>
  104. public bool IsPassive { get; set; }
  105.  
  106. /// <summary>
  107. /// The turn that this Activity was started at.
  108. /// </summary>
  109. public long StartingTurn { get; set; }
  110.  
  111. /// <summary>
  112. /// The current turn, updated once per turn.
  113. /// </summary>
  114. public long CurrentTurn { get; set; }
  115.  
  116. /// <summary>
  117. /// Priority of this activity.
  118. /// </summary>
  119. public ActivityPriority Priority { get; set; }
  120.  
  121. /// <summary>
  122. /// The handler instance for this activity
  123. /// </summary>
  124. public ActivityHandler Handler { get; set; }
  125.  
  126. /// <summary>
  127. /// Any activity data needed by the handler
  128. /// </summary>
  129. public Dictionary<string,object> ActivityData { get; set; }
  130.  
  131. /// <summary>
  132. /// Is this activity resumable?
  133. /// </summary>
  134. public bool CanResume { get; set; }
  135. }
  136.  
  137. /// <summary>
  138. /// Part of the BaseCreature API, this allows queueing of activities that may take multiple turns.
  139. /// </summary>
  140. public interface IActivityQueue : IEnumerable<ActivityInfo> {
  141. /// <summary>
  142. /// Enqueue an activity.
  143. /// </summary>
  144. /// <param name="activity"></param>
  145. /// <returns>A tuple of success and a unique identifier for the activity</returns>
  146. (bool,string) EnqueueActivity(ActivityInfo activity);
  147.  
  148. /// <summary>
  149. /// Dequeue an activity from the queue.
  150. /// </summary>
  151. /// <param name="activity"></param>
  152. /// <returns>True if the activity was dequeued, false if it could not be.</returns>
  153. bool DequeueActivity(ActivityInfo activity);
  154.  
  155. /// <summary>
  156. /// Dequeue an activity using it's unique key
  157. /// </summary>
  158. /// <param name="key"></param>
  159. /// <returns></returns>
  160. bool DequeueActivity(string key);
  161. }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement