Swift:
//
// LivinGrimoire.swift
// LivinGrimoireSwiftV1
//
// Created by fuki barski on 21/06/2022.
//
import Foundation
class AbsDictionaryDB{
func save(key:String, value: String){
// save to DB (override me)
}
func load(key:String)->String{
// override me
return "null"
}
}
enum enumFail{
case fail, requip, dequip, cloudian, ok
}
class Mutatable{
func action(ear: String, skin: String, eye: String) -> String{
return ""
}
func failure(input: String) -> enumFail{
// Failure type only mutatable may use enumFail.fail
return enumFail.ok
}
func completed() -> Bool{
//Has finished ?
return false
}
func clone() -> Mutatable{
return Mutatable()
}
func getMutationLimit() -> Int{
return 0
}
func myName() -> String{
// Returns the class name
return String(describing: type(of: self))
}
func mutation() -> Mutatable{
return Mutatable()
}
}
class T1:Mutatable{
var isCompleted:Bool = false
override func mutation() -> Mutatable {
print("T1 mutating into T2")
return T2() // modify to t2
}
override func clone() -> Mutatable {
print("T1 cloning another T1 object")
return T1()
}
override func action(ear: String, skin: String, eye: String) -> String {
self.isCompleted = true
return "I am a T1 object"
}
override func completed() -> Bool {
return self.isCompleted
}
}
class T2:Mutatable{
var isCompleted:Bool = false
override func mutation() -> Mutatable {
print("T2 mutating into T1")
return T1() // modify to t2
}
override func clone() -> Mutatable {
print("T2 cloning another T2 object")
return T2()
}
override func action(ear: String, skin: String, eye: String) -> String {
self.isCompleted = true
return "I am a T2 object"
}
override func completed() -> Bool {
return self.isCompleted
}
}
/*
it speaks something x times
a most basic skill.
also fun to make the chobit say what you want */
class APsay:Mutatable{
var at:Int=10
var param:String="hmm"
convenience init(repetitions:Int, param:String) {
self.init()
if repetitions<at {self.at=repetitions}
self.param=param
}
override func action(ear: String, skin: String, eye: String) -> String {
var axnStr=""
if self.at>0{
if ear.lowercased() != self.param{
axnStr=self.param
self.at -= 1
}
}
return axnStr
}
override func completed() -> Bool {
return self.at < 1
}
override func clone() -> Mutatable {
return APsay(repetitions: self.at, param: self.param)
}
}