Current API:
function getIconUrl(name: string, family: string, variant: string) {}
// base "resolver"
{| # > 256 locals. | |
| def tick(args) | |
| # This is the most common. Easiest way around it is to split up locals into separate methods as the 256 limit is per "block" | |
| l_0 = nil; l_1 = nil; l_2 = nil; | |
| end | |
| # > 256 globals. | |
| $var1 = nil | |
| $var2 = nil |
| class FileWatcher | |
| # This can get potentially deep if you have a lot of files or directories. Consider a fiber if its taking up too much time. | |
| def self.list_files_recursive(directory, max_iterations_for_fiber: 100, fiber: false) | |
| idx = 0 | |
| files = [] | |
| all_files = [] | |
| # Seed with full paths so we never lose directory context. `.reverse_each` makes `.pop()` yield entries in listing order. This is like the old "list_files_recursive" which actually used recursion, but by using a loop we can yield to a fiber on potentially large directories. | |
| DR.list_files(directory).reverse_each do |f| | |
| files << File.join(directory, f) |
| module Main | |
| def tick args | |
| # ./samples/07_advanced_rendering/12_blend_modes_additive_modulo/app/main.rb | |
| # Sample app shows how to use blend modes to create a masking layer | |
| # Special thanks to akzidenz@discord (https://akzidenz.itch.io/) for providing this sample app | |
| # | |
| # blendmode reference: | |
| # 1: alpha blending (default) | |
| # 2: additive blending | |
| # 4: modulo blending |
| <div flow-controller="counter"> | |
| <button flow-action="click->counter#decrement">-</button> | |
| <span flow-text="context.count">0</span> | |
| <button flow-action="click->counter#increment">+</button> | |
| </div> | |
| <button flow-action="#decrement">-</button> | |
| <span flow-text="context.count">0</span> | |
| <button flow-action="#increment">+</button> |
| # one-time setup | |
| @glow_dirs ||= 16.times.map do |i| | |
| a = i * Math::PI * 2 / 16 | |
| [Math.cos(a), Math.sin(a)] | |
| end | |
| @glow_mask_blend ||= Numeric.compose_blendmode( | |
| BLENDFACTOR_ZERO, BLENDFACTOR_SRC_ALPHA, BLENDOPERATION_ADD, | |
| BLENDFACTOR_ZERO, BLENDFACTOR_SRC_ALPHA, BLENDOPERATION_ADD | |
| ) | |
| @glow_hole_punch ||= Numeric.compose_blendmode( |
| def calc_car dt = 1 | |
| target_speed = if state.engine == :high | |
| state.high_speed | |
| else | |
| state.low_speed | |
| end | |
| state.speed *= (0.98 * dt) if steering_at_limit? | |
| if auto_break? |
| class Game | |
| attr_gtk # attr_gtk class macro | |
| SPRITES = { | |
| conveyor_belt: { | |
| source_x: 0, | |
| source_w: 16, | |
| source_h: 16, | |
| source_y: 0, | |
| animations: { |
| function boolify (str) { | |
| const truthy = [ | |
| "y", | |
| "yes", | |
| "1", | |
| "true", | |
| "on" | |
| ] | |
| if (str && truthy.includes(str.toLowerCase())) { |