杨锴
2024-09-13 b1e53d01722f1705d99f5cf6ec63c8c493811405
XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -9,36 +9,11 @@
import AVKit
import JQTools
import APNGKit
enum TreeLevel:Int{
            case level_1 = 1
            case level_2 = 2
            case level_3 = 3
            case level_4 = 4
            case level_5 = 5
            case level_6 = 6
            case level_7 = 7
            case level_8 = 8
            case level_9 = 9
            case level_10 = 10
            var aniResource:String{
                        switch self {
                                    case .level_1:return "apngb-animated-level-1"
                                    case .level_2:return "apngb-animated-level-2"
                                    case .level_3:return "apngb-animated-level-3"
                                    case .level_4:return "apngb-animated-level-4"
                                    case .level_5:return "apngb-animated-level-5"
                                    case .level_6:return "apngb-animated-level-6"
                                    case .level_7:return "apngb-animated-level-7"
                                    case .level_8:return "apngb-animated-level-8"
                                    case .level_9:return "apngb-animated-level-9"
                                    case .level_10:return "apngb-animated-level-10"
                        }
            }
}
import UserDefaultsStore
class TreeTeskVC: BaseVC {
            private let cacheTreeInfoModel = UserDefaultsStore<TreeInfoModel>(uniqueIdentifier: "cacheTreeInfoModel")!
            @IBOutlet weak var view_energy: UIView!
            @IBOutlet weak var icon_energy: UILabel!
@@ -51,8 +26,6 @@
            @IBOutlet weak var view_progress: UIView!
            @IBOutlet weak var cons_progressHei: NSLayoutConstraint!
            @IBOutlet weak var label_progress: UILabel!
            private var tempEnergy:Int = 0
            private lazy var player:AVPlayer = {
                        let bgPath = Bundle.main.url(forResource: "bg", withExtension: "mov")
@@ -80,12 +53,7 @@
            private var aPNGSunImageView:APNGImageView?
            private var aPNGActionImageView:APNGImageView?
            private var treeLevel:TreeLevel = .level_1{
                        didSet{
                                    updateAni()
                        }
            }
            private var treeInfoModel:TreeInfoModel?
            override func viewDidDisappear(_ animated: Bool) {
                        super.viewDidDisappear(animated)
@@ -121,7 +89,7 @@
            override func viewDidLoad() {
                        super.viewDidLoad()
                        title = "树苗打卡站"
                        treeLevel = .level_1
                        btn_seedingAgain.isHidden = true
                        if settingModel!.userFirstOpenTreeTask{
                                    DispatchQueue.main.asyncAfter(delay: 2.0) {
@@ -130,13 +98,7 @@
                                    }
                        }
                        let h = (JQ_ScreenW - 90) * 0.7729
                        TreeTeskFirstRuleView.show(title: "升级", content:"恭喜!你的树苗已升级为XX阶段!",textAlignment: .center,height: h,textTopOffset: 57)
                        DispatchQueue.main.asyncAfter(deadline: .now()+2.0) {
                                    self.setProgress(current: 900, total: 1800)
                        }
                        getTreeData()
            }
            override func setUI() {
@@ -176,6 +138,38 @@
                                    make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50))
                                    make.height.equalTo(JQ_ScreenW * 0.655)
                        }
            }
            private func getTreeData(){
                        //缓存的树苗信息
                        if let cacheModel = cacheTreeInfoModel.allObjects().first{
                                    treeInfoModel = cacheModel
                                    updateTreeInfo()
                        }
                        Services.treeInfo().subscribe(onNext: {data in
                                    if let m = data.data{
                                                try? self.cacheTreeInfoModel.save(m)
                                                //检查hash,进行同步
                                                if m.toJSON()?.jq_hash() != self.treeInfoModel?.toJSON()?.jq_hash(){
                                                            self.treeInfoModel = m
                                                            self.updateTreeInfo()
                                                }
                                    }
                        }).disposed(by: disposeBag)
            }
            private func updateTreeInfo(){
                        btn_seedingAgain.isHidden = treeInfoModel!.sowAgain == .no
//                        if treeLevel.rawValue != treeInfoModel?.treeLevelType.rawValue{
//                                    treeLevel = treeInfoModel!.treeLevelType
//                        }
                        icon_energy.text = String(format: "当前能量值:%ld", treeInfoModel!.currentEnergyValue)
                        setProgress(current: treeInfoModel!.growthValue, total: treeInfoModel!.nextLevel)
            }
            override func setRx() {
@@ -243,7 +237,6 @@
            //能量明细
            @IBAction func energyDetailAction(_ sender: TapBtn) {
                        let vc = TreeTeskDetailVC()
                        push(vc: vc)
            }
@@ -255,6 +248,32 @@
            }
            @IBAction func wateringAction(_ sender: UIButton) {
                        sender.isUserInteractionEnabled = false
                        if treeInfoModel == nil {return}
//                        guard m.currentEnergyValue != 0 else{
//                                    alert(msg: "已经没有能量值了,快去做任务吧");return
//                        }
                        Services.watering().subscribe(onNext: {data in
                                    if let m = data.data{
                                                if m.isNext{
                                                            var type = self.treeInfoModel?.treeLevelType ?? .level_1
                                                            self.treeInfoModel!.treeLevelType = TreeLevel(rawValue: type.rawValue + 1) ?? .level_1
                                                            let h = (JQ_ScreenW - 90) * 0.7729
                                                            TreeTeskFirstRuleView.show(title: "升级", content:"恭喜!你的树苗已升级为\(self.treeInfoModel!.treeLevelType.title)阶段!",textAlignment: .center,height: h,textTopOffset: 57)
                                                            self.updateAni()
                                                }
                                                self.treeInfoModel?.currentEnergyValue = 0
                                                self.treeInfoModel?.growthValue = m.growthValue
                                                self.treeInfoModel?.nextLevel = m.nextLevel
                                                self.updateTreeInfo()
                                    }
                        }).disposed(by: disposeBag)
                        if let waterApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated-flow", withExtension:"png")!){
                                    waterApngImage.numberOfPlays = 2
                                    aPNGActionImageView = APNGImageView(image: waterApngImage)
@@ -273,6 +292,7 @@
                                    aPNGActionImageView!.onOnePlayDone.delegate(on: self) {[unowned self] a,b in
                                                if b == 2{
                                                            sender.isUserInteractionEnabled = true
                                                            UIView.animate(withDuration: 0.5) {
                                                                        self.aPNGActionImageView!.alpha = 0
                                                            }completion: { _ in
@@ -284,7 +304,7 @@
            }
            @objc func jumpAction(){
                        treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1
                        //                        treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1
            }
            @objc func ruleAction(){
@@ -294,9 +314,12 @@
            }
            private func updateAni(){
                        let treeLevel = treeInfoModel?.treeLevelType ?? .level_1
                        guard let url = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return}
                        if let treeApngImage = try? APNGImage(fileURL: url){
                        guard let animateUrl = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return}
                        guard let staticDroopUrl = Bundle.main.url(forResource: treeLevel.staticDroopResource, withExtension: "png") else {return}
                        if let treeApngImage = try? APNGImage(fileURL: animateUrl){
                                    if treeLevel == .level_1{
                                                treeApngImage.numberOfPlays = 1
@@ -316,8 +339,7 @@
                                                view.addSubview(aPNGTreeImageView!)
                                    }
                                    //                                    aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1)
                                    let scale:Double = 0.55
                                    let scale:Double = 0.55 //放大倍数
                                    aPNGTreeImageView!.snp.remakeConstraints { make in
                                                make.centerX.equalToSuperview().offset(-10)
@@ -336,6 +358,12 @@
                                                                        self.aPNGTreeImageView?.alpha = 1
                                                            }completion: { _ in
                                                                        self.aPNGTreeImageView!.startAnimating()
                                                                        if self.treeInfoModel?.status == .yes{
                                                                                    self.aPNGTreeImageView?.stopAnimating()
                                                                                    self.aPNGTreeImageView?.image = nil
                                                                                    self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString)
                                                                        }
                                                            }
                                                }
                                    }