44 lines
1.4 KiB
Swift
44 lines
1.4 KiB
Swift
|
|
// State.swift
|
||
|
|
// The base class for implementing states in a StateMachine
|
||
|
|
// Ported from Android implementation
|
||
|
|
|
||
|
|
import Foundation
|
||
|
|
|
||
|
|
/// Base class for implementing states in a StateMachine
|
||
|
|
open class State: IState {
|
||
|
|
|
||
|
|
/// Initialize a new state
|
||
|
|
public init() {}
|
||
|
|
|
||
|
|
/// Called when a state is entered
|
||
|
|
/// - Parameters:
|
||
|
|
/// - from: State we are coming from
|
||
|
|
/// - params: Optional parameters for state transition
|
||
|
|
open func enter(from: IState?, params: Any?) {
|
||
|
|
// Default implementation does nothing
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Called when a state is exited
|
||
|
|
/// - Parameter to: State we are transitioning to
|
||
|
|
open func exit(to: IState?) {
|
||
|
|
// Default implementation does nothing
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Process a message sent to the state machine
|
||
|
|
/// - Parameter msg: The message to process
|
||
|
|
/// - Returns: HANDLED if processing has completed or NOT_HANDLED if the message wasn't processed
|
||
|
|
open func processMessage(_ msg: Message) -> Bool {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Name of State for debugging purposes
|
||
|
|
/// This default implementation returns the class name
|
||
|
|
open var name: String {
|
||
|
|
let className = String(describing: type(of: self))
|
||
|
|
if let lastDotIndex = className.lastIndex(of: ".") {
|
||
|
|
return String(className[className.index(after: lastDotIndex)...])
|
||
|
|
}
|
||
|
|
return className
|
||
|
|
}
|
||
|
|
}
|