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
|
|
}
|
|
}
|