Group Details Private

administrators

  • hyperPad 1.40 is here! 🎉

    It’s here 🎉 hyperPad Version 1.40
    In the latest update, hyperPad introduces a range of exciting new features, including the ability to convert objects into different types, rescale bullets in shoot behaviors, and collapse entire behavior trees into single bundles. Additionally, numerous bug fixes ensure smoother performance and enhanced user experience across iOS devices.
    Here’s the list! Share your favorite new update on the hyperPad forum today.
    fbb90138-70ac-4278-b24f-d20e05a504fa-image.png

    New Features

    • list itemYou can now convert objects into objects of another type.
    • Empty objects are now converted into graphics when choosing a graphic for them.
    • The Hit by Bullet behavior now outputs hit position and the shooter object.
    • Bullets can now be rescaled in shoot behaviors.
    • Added a Random Seed behavior that can define a set seed and algorithm for Random Number behaviors.
    • Added the ability to move objects between scenes and layers.
    • You can now mirror multiple objects at once.
    • Added the ability to collapse behavior bundle behaviors, allowing an entire behavior tree to be compressed into a single behavior.
    • Added a “Disable Antialiasing” toggle in the Draw behavior.
    • Added “Add Entries” mode in the Modify Dictionary behavior.
    • Added “Remove Duplicates” and “Intersect” modes in the Modify Array behavior.
    • Updated branding logo inside the app.

    Bug Fixes

    • Fixed crashing when changing the scene background on iOS 17.
    • Fixed many unexpected UI-related crashes on iOS 17.
    • Fixed objects displaying in the wrong position in overlays.
    • Fixed performance issues with the Get Pixel behavior.
    • Fixed the Preserve Transform property in the Set Graphic behavior miscalculating position for objects in relative position mode.
    • Fixed crashes when effect parameters were set outside their intended range.
    • Fixed 16:9 aspect ratio not completely fitting the screen.
    • Fixed numeric input fields displaying Int32 despite the behavior being stored as doubles.
    • Fixed the Edit Text Field behavior causing a crash after triggering the Alert behavior.
    • Fixed assets displaying as being selected despite the multi-select mode being disabled.
    • Fixed the Keyboard Event behavior not displaying character sequence.
    • Fixed the Swipe Gesture behaviors activating when swiping in the wrong direction.
    • Fixed the screen resetting to the wrong position in the editor when pressing “defaults” in screen settings.
    • Fixed occasional flickering in graphics when playing various animations.
    • Fixed clipping of some UI in the main menu.
    posted in Announcements
  • In App Purchase Tutorial on Exported Projects

    In App purchase swift code for exported projects:

    first add pod 'SwiftyStoreKit' to the list of pods in Podfile in a text editor.

    Then in terminal, run pod install. If you don't have cocoapods installed on your mac, follow the instructions here: https://guides.cocoapods.org/using/getting-started.html

    Replace the contents of HPSwift.swift with the following file

    //
    //  HPSwift.swift
    //  hyperPad-Project
    //
    //  Created by Hamed Saadat on 2019-08-07.
    //
    
    import Foundation
    import SwiftyStoreKit
    
    @objc class HPSwift: NSObject {
        fileprivate var _behaviours: HPBehaviours? = nil
        @objc var behaviours: HPBehaviours? {
            get {
                return _behaviours
            }
            
            set(behaviours) {
                _behaviours = behaviours
                
                SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
                    for purchase in purchases {
                        switch purchase.transaction.transactionState {
                        case .purchased, .restored:
                            if purchase.needsFinishTransaction {
                                // Deliver content from server, then:
                                SwiftyStoreKit.finishTransaction(purchase.transaction)
                            }
                            // Unlock content
                            behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                            
                        case .failed, .purchasing, .deferred:
                            behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
                            break // do nothing
                        @unknown default:
                            break
                        }
                    }
                }
                
                behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                    SwiftyStoreKit.restorePurchases(atomically: true) { results in
                        if results.restoreFailedPurchases.count > 0 {
                            behaviours?.broadcastValue("Restore Failed: \(results.restoreFailedPurchases)" as NSString, withKey: "purchaseError")
                        }
                        else if results.restoredPurchases.count > 0 {
                            results.restoredPurchases.forEach { (purchase) in
                                behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                            }
                        }
                        else {
                            print("Nothing to Restore")
                        }
                    }
                })
                
                /*
                 Add Behaviour functionality here
                */
                
                behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
                     // handle in app purchase logic! //
                        SwiftyStoreKit.purchaseProduct("INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue", quantity: 1, atomically: true) { result in
                            switch result {
                            case .success(let purchase):
                                behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                            case .error(let error):
                                var message = ""
                                switch error.code {
                                case .unknown: message = "Unknown error. Please contact support"
                                case .clientInvalid: message = "Not allowed to make the payment"
                                case .paymentCancelled: break
                                case .paymentInvalid: message = "The purchase identifier was invalid"
                                case .paymentNotAllowed: message = "The device is not allowed to make the payment"
                                case .storeProductNotAvailable: message = "The product is not available in the current storefront"
                                case .cloudServicePermissionDenied: message = "Access to cloud service information is not allowed"
                                case .cloudServiceNetworkConnectionFailed: message = "Could not connect to the network"
                                case .cloudServiceRevoked: message = "User has revoked permission to use this cloud service"
                                default: message = ((error as NSError).localizedDescription)
                                }
                                behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
                            }
                        }
                })
            }
        }
        
    }
    

    Some key points:

    behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                    // add your code here
                })
    

    Will get triggered when you trigger a broadcast behaviour with the restorePurchases key

    behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")

    Will trigger a receive message behaviour with the purchaseComplete key

    INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue can be replaced with either the identifier of your purchase from AppStoreConnect. OR the receiveValue parameter. If you use receiveValue make sure in your broadcast behaviour, you're sending the identifier from App Store Connect.

    posted in Help and Support
  • RE: a puzzle game with sliding tiles

    @LittleGiant
    This is definitely possible. We don't have any tutorials on it, but its doable.
    There have been some similar projects on the hub before.
    We don't have a hub search (it's coming), but if you search google and add hyperpad hub to your search term you can find things.

    posted in General Discussion
  • RE: Problem testing game in viewer app

    @TheMagicDesign

    Thats odd, the Viewer app has been updated a few times since this post.

    We're currently getting another update ready and conducting testing now. You can sign up here for the testflight beta: https://testflight.apple.com/join/qxo5xKzP

    See if that helps!

    posted in Help and Support
  • RE: BrickBuster soon on the Hub!

    @Aceboss

    Project is great! I left a comment on the hub as well.

    I referenced this video in my comment:

    posted in WIP and Showcase
  • RE: Carrying values between scenes?

    @Aceboss

    Another way you can do it is to place an object on your UI layer, and store the value on that object. It should then exist in all scenes.

    posted in Help and Support
  • RE: Basic logic help

    @Aceboss If you add a second if and put it beside the first if. It will snap together and turn into an ELSE

    posted in Help and Support
  • RE: Community / Userbase - Active?

    @Aceboss
    I agree. I much prefer forums than the discord my self.

    posted in General Discussion
  • RE: Cant seem to make animations work

    @DingusDev
    Can you be more specific on your issue?
    How are you trying to play animations? What is your current behaviour logic set up.

    posted in Help and Support
  • RE: Community / Userbase - Active?

    @Aceboss
    Hey, yeah the forum seems to have died down a bit. We're hoping to aim more focus to the forum. But as of the community is mostly active on our "unoffical" discord channel created by our ambassador @RobinsonX.

    https://discord.gg/6XEQfjCB

    posted in General Discussion