{"id":411,"date":"2017-12-23T01:19:53","date_gmt":"2017-12-23T01:19:53","guid":{"rendered":"https:\/\/castle-engine.sourceforge.io\/wp\/?p=411"},"modified":"2017-12-23T01:20:15","modified_gmt":"2017-12-23T01:20:15","slug":"in-app-purchases-on-ios-world-transformations-fps-and-soon-plans-including-editor","status":"publish","type":"post","link":"https:\/\/castle-engine.io\/wp\/2017\/12\/23\/in-app-purchases-on-ios-world-transformations-fps-and-soon-plans-including-editor\/","title":{"rendered":"In-app purchases on iOS, world transformations, FPS, and soon: plans (including editor!)"},"content":{"rendered":"<table class=\"thumbnails thumbnails-align-right\"><tr><td>\n          <a href=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/iap_1.png\"\n             class=\"screenshot\"\n             title=\"In-app purchase question (in Polish)\"><img loading=\"lazy\" decoding=\"async\"\n            style=\"float: right\"\n            src=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/iap_1-200x356.png\"\n             width=\"200\" height=\"356\" \n            alt=\"In-app purchase question (in Polish)\"\n          ><\/a><\/td><\/tr><tr><td>\n          <a href=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/iap_2.png\"\n             class=\"screenshot\"\n             title=\"iap_2\"><img loading=\"lazy\" decoding=\"async\"\n            style=\"float: right\"\n            src=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/iap_2-200x356.png\"\n             width=\"200\" height=\"356\" \n            alt=\"iap_2\"\n          ><\/a><\/td><\/tr><tr><td>\n          <a href=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/wyrd_forest_screen_0-2.png\"\n             class=\"screenshot\"\n             title=\"wyrd_forest_screen_0\"><img loading=\"lazy\" decoding=\"async\"\n            style=\"float: right\"\n            src=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/wyrd_forest_screen_0-2-200x113.png\"\n             width=\"200\" height=\"113\" \n            alt=\"wyrd_forest_screen_0\"\n          ><\/a><\/td><\/tr><\/table>\n<ol>\n<li>\n<p><b>In-app purchases on iOS!<\/b> You can now sell products inside your iOS applications, through the <i>Apple AppStore<\/i>. <\/p>\n<p>We give you a very comfortable Pascal API to do this: <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleInAppPurchases.TInAppPurchases.html\">TInAppPurchases class in the CastleInAppPurchases unit<\/a>. And it works 100% for both <i>Apple AppStore<\/i> (on iOS) and <i>Google Play<\/i> (on Android), so you can really comfortably develop mobile games with in-app payments. Both &#8220;consumables&#8221; and &#8220;non-consumables&#8221; are handled. <\/p>\n<p><a href=\"https:\/\/github.com\/castle-engine\/castle-engine\/wiki\/iOS-Services\">See the iOS services documentation.<\/a><\/p>\n<li>\n<p><a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/manual_optimization.php#section_fps\">We have improved the utilities and terminology around FPS (frames-per-second)<\/a>. <\/p>\n<ul>\n<li>\n<p>Read the <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/manual_optimization.php#section_fps\">new documentation about how to show and interpret FPS<\/a>, it was improved in many ways.<\/p>\n<li>\n<p>You can now display FPS using <code>Window.Fps.ToString<\/code>. It accounts for the fact that we may be sleeping (<code>Window.Fps.WasSleeping<\/code>, possible when <code>Window.AutoRedisplay = false<\/code>), and always looks sensibly. It may show <i>&#8220;no frames rendered&#8221;<\/i> or <i>&#8220;no need to render all frames&#8221;<\/i>.<!-- instead of displaying some confusing FPS value in some cases.--><\/p>\n<li>\n<p>New <code>--no-limit-fps<\/code> command-line option is automatically handled by your games (if you let the build tool to autogenerate the program file, or you explicitly use <code>Window.ParseParameters<\/code> or <code>Application.ParseStandardParameters<\/code>).\n    <\/ul>\n<li>\n<p>You can now get <b>world transformation<\/b> of the <code>TCastleTransform<\/code> using the <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleTransform.TCastleTransform.html#WorldTransform\">TCastleTransform.WorldTransform<\/a> and <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleTransform.TCastleTransform.html#WorldInverseTransform\">TCastleTransform.WorldInverseTransform<\/a> methods.<\/p>\n<p>While you may not often need to call these methods explicitly, they provide a very important internal feature. Every <code>TCastleTransform<\/code> and <code>TCastleScene<\/code> is now fully aware where is it placed with respect to the world, even when it is under a series of transformations. So this makes various things working correctly in all cases of transformations: <a href=\"https:\/\/castle-engine.sourceforge.io\/manual_physics.php\">the physics<\/a>, X3D Billboard nodes (see e.g <a href=\"https:\/\/github.com\/castle-engine\/wyrd-forest\/blob\/master\/code\/gametext3d.pas\">Text3D<\/a> within the <a href=\"https:\/\/www.patreon.com\/posts\/wyrd-forest-demo-15811244\">wyrd-forest demo<\/a>).<\/p>\n<li>\n<p>New unit <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleDialogStates.html\">CastleDialogStates<\/a> and new feature <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleMessages.html#MessageOKPushesState\">MessageOKPushesState<\/a> allows you to use modal dialogs a <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleUIState.TUIState.html\">TUIState<\/a> descendants, and thus have easy modal boxes working on all platforms, including iOS. <a href=\"https:\/\/castle-engine.sourceforge.io\/manual_2d_user_interface.php#section_ui_state\">Read the manual for more information about TUIState usage.<\/a><\/p>\n<li>\n<p>Some tiny new features: build tool defines <code>CASTLE_IOS<\/code> when compiling for iOS (to easily detect <a href=\"https:\/\/github.com\/castle-engine\/castle-engine\/wiki\/iOS\">any of the 4 platforms (os\/cpu combinations) representing the iOS target<\/a>), <a href=\"https:\/\/michalis.ii.uni.wroc.pl\/cge-www-preview\/apidoc\/html\/CastleControls.TCastleEdit.html\">TCastleEdit<\/a> cooperates with the clipboard (Ctrl+C \/ Ctrl+X \/ Ctrl+V work), fix logging long strings (> 4k) on Android, use Lazarus <code>ocoRenderAtDesignTime<\/code> automatically, and probably more:)<\/p>\n<\/ol>\n<p>I will post some more news soon (hopefully this weekend \ud83d\ude42 ), about some exciting new plans for the engine. I want to start 2018 with a bang (actually, I want to end 2017 with a bang!), and I want you to know what I&#8217;m doing. So, stay tuned for the next post where I will lay out what I&#8217;m thinking about \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In-app purchases on iOS! You can now sell products inside your iOS applications, through the Apple AppStore. We give you a very comfortable Pascal API to do this: TInAppPurchases class in the CastleInAppPurchases unit. And it works 100% for both Apple AppStore (on iOS) and Google Play (on Android), so you can really comfortably develop &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/castle-engine.io\/wp\/2017\/12\/23\/in-app-purchases-on-ios-world-transformations-fps-and-soon-plans-including-editor\/\" class=\"more-link\">Continue reading  \u27a4<span class=\"screen-reader-text\"> &#8220;In-app purchases on iOS, world transformations, FPS, and soon: plans (including editor!)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":412,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-411","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2017\/12\/iap_1.png","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9IgYW-6D","jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/comments?post=411"}],"version-history":[{"count":6,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/411\/revisions"}],"predecessor-version":[{"id":419,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/411\/revisions\/419"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/media\/412"}],"wp:attachment":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/media?parent=411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/categories?post=411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/tags?post=411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}