From 564c600150d1342f45c8bf47bb7c449e19695879 Mon Sep 17 00:00:00 2001 From: bionickatana Date: Tue, 16 Jun 2026 21:58:05 -0600 Subject: [PATCH] Added actual images and prepared to add extractors --- README.md | 33 +++++++++++++++++++++++ assets/images/adder.png | Bin 0 -> 2237 bytes assets/images/adder.xcf | Bin 0 -> 7908 bytes assets/images/background_square.png | Bin 653 -> 754 bytes assets/images/background_square.xcf | Bin 3079 -> 3757 bytes assets/images/belt.png | Bin 0 -> 335 bytes assets/images/belt.xcf | Bin 0 -> 4898 bytes assets/images/extrtactor.png | Bin 0 -> 434 bytes assets/images/extrtactor.xcf | Bin 0 -> 2550 bytes assets/images/producer.png | Bin 0 -> 1396 bytes assets/images/producer.xcf | Bin 0 -> 6495 bytes consumer.rb | 4 +-- extractor.rb | 26 +++++++++++++++++++ main.rb | 24 ++++++++--------- producer.rb | 15 +++++++---- ui.rb | 39 ++++++++++++++++++++++++++++ 16 files changed, 121 insertions(+), 20 deletions(-) create mode 100644 assets/images/adder.png create mode 100644 assets/images/adder.xcf create mode 100644 assets/images/belt.png create mode 100644 assets/images/belt.xcf create mode 100644 assets/images/extrtactor.png create mode 100644 assets/images/extrtactor.xcf create mode 100644 assets/images/producer.png create mode 100644 assets/images/producer.xcf create mode 100644 extractor.rb create mode 100644 ui.rb diff --git a/README.md b/README.md index 6f2d77d..c2f10c6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,36 @@ # number_factory A game where you create combinations of numbers! + +# UI elements + +If you hover over the producers you will see the speed at which it produces. + +If you hover over the consumer, you can see your next goal or quest + +## tools + +### Extractor + +Extracts numbers. It is a three by three square and populates numbers from any +side (max 12) every time the producer ticks. + +### Conveyer belt + +Can move numbers around. + +### Adder + +Can output to either side but will only output to one space. Prefers the slot +on the left. If it is full though it will use the slots to the right + + +### Multiplier + +### Subtractor + +### Divider + +### Exponent + +### Logarithm diff --git a/assets/images/adder.png b/assets/images/adder.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbf7fbc1fa4411d94cdd645e73ae68188d66d05 GIT binary patch literal 2237 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 literal 0 HcmV?d00001 diff --git a/assets/images/background_square.png b/assets/images/background_square.png index 7f7017325be2f40ca016065f144c3ef91761c6bb..56623a0079a97fe85020efb31a3a2024304f3a6c 100644 GIT binary patch delta 662 zcmV;H0%`q?1@Z+UiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPQHe-Q&6 zDms5mjQ{`wNJ&INR9M61SG$tLAPln&+wK2<=(fw_DtQ#eep^IXYt33~IgW^I?w-AwWshg?ZF_H9Yh{l%=gfZ2X`j#M3IGOs?-%3f z-QC>XT5D`Z08rx$e*m5{6TF$bUySp7_WBV37N~JF_8xQh-ZuuAeg(%Y zl?+rM_#J!3I^fMgKUkV`Ch$iQvN0H72CDD+thFw*Yna^K#uyiUlp%FX%!YL~N`g*-GEY(_dO23C{pgLrONg?nx20ayX)dSieMDrwSE-7% z=+PL^BLMa`B5t(viKeGv#ln*=jtpS)F~;R2gNLUJi3*ktb0`4hY{C+LwU&seD!#SWQc5YMzGY_kLeJ;ZMCA2)fy;F0IF7XzxKJrY zRp*@G9wam4&L$$AbdOe5RRtZ~e>ta_q1%-T)jRYUW1A45J>FVtnAQgxsbKU?u90Fu zbGqF3g=Y2Me)wJQ8ve8R1J82Iv0SVr&h6W8&GEEn7Dh4jp{a*mAj+QN=vg zEf+fXK>hk=ftw7?G5NGiL~5>uL})@YQt{gat>UKLL=Buw0FvAE@3~0 z_}=oXi*-efYa(1fVY7v(e=#1{;MTzhdV4POnZPF}hs+MXqQl*a6KWeZ=nl1{3mtYE z2G2Re)rZ;eOM%g?H4pzpx7Ik`Qpy+u75Obuc_m$~H2^=*syfC%T%dn@hj`6p^hZKk zYhf=S6-e~o0000<2SrXqu0mjfyb%2z diff --git a/assets/images/background_square.xcf b/assets/images/background_square.xcf index f5ee3ff845104d94bf3994b26a6910f40172d816..4302437b88f8daffec6523dda909060ffceee74a 100644 GIT binary patch delta 1799 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 KBmEYSH?aUNVfuIg diff --git a/assets/images/belt.png b/assets/images/belt.png new file mode 100644 index 0000000000000000000000000000000000000000..1edd96781556e647145bab6dbc92353de17db49a GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%C&rs6b?Si}mUKs7M+SzC z{oH>NSwSk3J%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10g0sLQ zvY3HEPZ@+6E0)@q0R`DhJbhi+U$F@?%NiV)-TECUwA9nZF(l&f+sPY6n+uKZ1%@Z@ZqmcfN(m4r>-tY^HotDY{I!oaY8 zQsJ!a!G&@uwKnIivsSdO&}941pW~}sze9Do_K&)0s}^n*JAEtZgT(#UTN`&jyVSDg zo;R~n(mz-Kwbxz>?ot=o^6n8I>ru8U{!@>xvUxCSDzGkT5ShRf-_3=E#GelF{r5}E*T5OD$k literal 0 HcmV?d00001 diff --git a/assets/images/belt.xcf b/assets/images/belt.xcf new file mode 100644 index 0000000000000000000000000000000000000000..320a9184365c3e7b0fe8e5446b968bfd03f325b6 GIT binary patch literal 4898 zcmeHJTW{P%6!v!8TuIxM7Ac|+gSjL{crOWxO0?OCrcgy{)u>5DdEjB}o%N3Do9x-J zK|LJ03gnrVYua5Acv#eV#LOExU90<{_*?*lX2m?EIv1+D{2zz2m)cJ~Zp`Y-egE<#&Q==&m27#pO#vmFbrM34O_ z)qp+OdA3WM+qtRqxhpI;mOYvy>pxc#b?6C}gr4j@m|N+)PUwX(Tgf{sc5TjD`LF!| zYWpqfHp_pc9wiZXWZ<%P3!}raQ8BQFfmBQe&OjvO5%&9uP%O8v$XXmXrkuZcf=}L! zLr3(6vDglSzI0y<1FJ7RVMT#!iBS~B%JO(pR;2dXiVT#9Jq{-pgm^1T7R4e-WEilo zFt%U2g@)d%ZKA9|S_hQ1we>5Wep>q1XfR|+%V zSRzP|s(ZJxN_?Ssk1I~|SSdH0&eq8H*nxbnAb{{hQI!&0K?eZ8)dLJ~H-PP9W z`bKMgqrJ}B>l?y&A>$VUn{TL4 z)R)*ANba2AuTC70N~_gupX2cT#T|ABp$Z$@bOh{SE2G?J2iLYGF^^GOg)PvVth(bt zF2|6L@jO3B^cu0SK3Zoli_;F3+$Z!rN%*uQEqXfg1j9+wm!nNHqS_{dFf!RN_BPFd zQqe}U86*wf3vJQBer+DxG_k#!X1CKkj&o{nyz-;Qv2}x3C^ogOKhm+<>-*&nIX^ob zIRBE@h({O72vHh356b95shpe;^hp%pS#k2bO9-4w{liNH*uhEM_&SO_>2TVTt7nz= zZF}xbXIhTOyu6i+PV?lvq@%XdX7=>p_79cGQe+TT0QwW3dMX2vKrpV+18oYRn?nYC zMDo@zc;a>e&^&pWg^bR)Uy23*CNv_5xGGpaFh zLcU9o@1vGCiLn%nrC=YfPMwFBnU~Sei3tgE1S7+0fcx%m!mNs%?WY8;s=uV>TGG!I%w3 zU|&bC{lJcms2FR1(vwUvz!-29XVUtBvAo8_3HgFC8;sdGV;LCBz*q)t2F5ZlmZ91i z7|Xy|4ltI1u?&o5UeK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@pr;JNj1^1m%YcIHC7!;n?624anT^%`Pg=?V?c?xtaSW-r_4c+S-ysDN*NaXu zYxqhG{bKU&IxYV4dqVN?V=wFzW;MLsb@#ik{c34O1_mYu2L=WXpjHM2pc5Gy7#IYw z30^3VP5ZTB{ol$LrQ5&FcxJs-^53G8k`KmCF3dGnKV~ZY+RtDArCOJ<;Mjp6!Czd5 z{oOuDa4jfnUG|pAn!(}kDW6-cASc6YTgw$tnK7xvA(@?FMeNMXFVdQ I&MBb@0NX=-b^rhX literal 0 HcmV?d00001 diff --git a/assets/images/extrtactor.xcf b/assets/images/extrtactor.xcf new file mode 100644 index 0000000000000000000000000000000000000000..2ebf3ced21b8b7cdf2facc0a511ec48510a0611f GIT binary patch literal 2550 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 T1f7|nI~(T6hq*rdUd;G!TjsH^ literal 0 HcmV?d00001 diff --git a/consumer.rb b/consumer.rb index 0f09068..836a7db 100644 --- a/consumer.rb +++ b/consumer.rb @@ -37,11 +37,11 @@ class Consumer # @param camera_x [Integer] The camera X position # @param camera_y [Integer] The camera Y position # @param camera_zoom [Float] The camera zoom - def update(delta_mult, camera_x, camera_y, camera_zoom, mouse_x, mouse_y) + def update(delta_mult, camera_x, camera_y, camera_zoom, mouse_x, mouse_y, mouse_used) @draw_x = (((((@screen_width / @box_size.to_f) / 2.0) + (@x - camera_x) * camera_zoom) * @box_size) + BORDER * camera_zoom) @draw_y = (((((@screen_height / @box_size.to_f) / 2.0) + (@y - camera_y) * camera_zoom) * @box_size) + BORDER * camera_zoom) @camera_zoom = camera_zoom - if 0 < mouse_x - @draw_x && mouse_x - @draw_x < (SIZE * @box_size * @camera_zoom) && 0 < mouse_y - @draw_y && mouse_y - @draw_y < (SIZE * @box_size * @camera_zoom) + if !mouse_used && 0 < mouse_x - @draw_x && mouse_x - @draw_x < (SIZE * @box_size * @camera_zoom) && 0 < mouse_y - @draw_y && mouse_y - @draw_y < (SIZE * @box_size * @camera_zoom) @tooltip_timer += 60.0 * delta_mult if @tooltip_timer > HOVER_TIME @tooltip.show = true diff --git a/extractor.rb b/extractor.rb new file mode 100644 index 0000000..38d7dba --- /dev/null +++ b/extractor.rb @@ -0,0 +1,26 @@ +# Nathan Hinton +# +# When placed it will extract numbers at a specified rate and place them on any +# conveyer belts that are adjacent to it. + +class Extractor + def initialize(x, y, box_size) + @x = x + @y = y + @box_size = box_size + @image = Gosu.render(@box_size - (2 * BORDER), @box_size - (2 * BORDER)) { + Gosu::Image.new('assets/images/producer.png').draw(0, 0, 0, @box_size / 32.0, @box_size / 32.0) + Gosu::Image.from_text("#{@number}", 20, font: FONT_PATH).draw(10 / 32.0 * @box_size, (8 / 32.0 * @box_size), 1, 2, 2, 0xFFFA32C0) + } + end + + def update(delta_mult, camera_x, camera_y) + @draw_x = (((((@screen_width / @box_size.to_f) / 2.0) + (@x - camera_x) * camera_zoom) * @box_size) + BORDER * camera_zoom) + @draw_y = (((((@screen_height / @box_size.to_f) / 2.0) + (@y - camera_y) * camera_zoom) * @box_size) + BORDER * camera_zoom) + @camera_zoom = camera_zoom + end + + def draw() + @image.draw(@draw_x, @draw_y, 0, @camera_zoom, @camera_zoom) + end +end diff --git a/main.rb b/main.rb index 2a32501..fa86428 100644 --- a/main.rb +++ b/main.rb @@ -7,7 +7,7 @@ require 'yaml' require './producer.rb' require './consumer.rb' -require './dialouge_box.rb' +require './ui.rb' FONT_PATH = 'assets/font/Cousine-Regular.ttf' @@ -45,9 +45,8 @@ class NumFactory < Gosu::Window @camera_x_zoom_offset = WIDTH.to_f / (@camera_boxes * BOX_SIZE * 2).to_f @camera_y_zoom_offset = HEIGHT.to_f / (@camera_boxes * BOX_SIZE * 2).to_f - @dd = DialougeBox.new(0, 0, WIDTH, HEIGHT, "This is a really really really really really really really really really really string\nof test text!") - @dialouges = [] - + @ui = UI.new(WIDTH, HEIGHT) + # Load from file or initialize a new game begin game_save_data = YAML.load_file("#{GAME_SAVE_DIRECTORY}/positions.yaml") @@ -188,8 +187,10 @@ class NumFactory < Gosu::Window @camera_y = [@camera_y, @game_width].min ### ITEMS ### + mouse_used = @ui.update(self.mouse_x, self.mouse_y) + @producers.each do |producer| - producer.update(delta_mult, @camera_x, @camera_y, @camera_zoom, self.mouse_x, self.mouse_y) + producer.update(delta_mult, @camera_x, @camera_y, @camera_zoom, self.mouse_x, self.mouse_y, mouse_used) end @belts.each do |belt| @@ -197,10 +198,7 @@ class NumFactory < Gosu::Window end @consumers.each do |consumer| - consumer.update(delta_mult, @camera_x, @camera_y, @camera_zoom, self.mouse_x, self.mouse_y) - end - @dialouges.each do |dialouge| - dialouge.update(0, 0, newtext: "My new text is: #{delta_mult}") + consumer.update(delta_mult, @camera_x, @camera_y, @camera_zoom, self.mouse_x, self.mouse_y, mouse_used) end end @@ -209,9 +207,11 @@ class NumFactory < Gosu::Window def draw # Draw mouse coords: onscreen_items = 0 + # TODO: The background does *not* actually need to move. It can just stay + # in one spot and scale... This would make the program load so much faster + # as well as allow for larger maps. @background.draw( (((((WIDTH / BOX_SIZE.to_f) / 2.0) - (@camera_x * @camera_zoom)) * (BOX_SIZE))), - ((((HEIGHT / BOX_SIZE.to_f) / 2.0) - (@camera_y * @camera_zoom)) * (BOX_SIZE)), 0, @camera_zoom, @@ -236,9 +236,7 @@ class NumFactory < Gosu::Window end end - @dialouges.each do |dialouge| - dialouge.draw() - end + @ui.draw() Gosu::Image.from_text("#{width}, #{height}", 20, font: FONT_PATH).draw(1600, 0, 1) Gosu::Image.from_text("#{mouse_x}, #{mouse_y}", 20, font: FONT_PATH).draw(1600, 100, 1) diff --git a/producer.rb b/producer.rb index 610e98f..97229f7 100644 --- a/producer.rb +++ b/producer.rb @@ -7,7 +7,6 @@ PRODUCER_DEBUG = false BORDER = 2 HOVER_TIME = 500 # ms - class Producer attr_reader :draw_x, :draw_y # Create producer at a position with the number and rate specified @@ -25,8 +24,8 @@ class Producer @screen_height = screen_height @image = Gosu.render(@box_size - (2 * BORDER), @box_size - (2 * BORDER)) { # Render the item - Gosu.draw_rect(0, 0, @box_size - (2 * BORDER), @box_size - (2 * BORDER), Gosu::Color::RED, 0) - Gosu::Image.from_text("#{@number}", 20, font: FONT_PATH).draw(5, 5, 1) + Gosu::Image.new('assets/images/producer.png').draw(0, 0, 0, @box_size / 32.0, @box_size / 32.0) + Gosu::Image.from_text("#{@number}", 20, font: FONT_PATH).draw(10 / 32.0 * @box_size, (8 / 32.0 * @box_size), 1, 2, 2, 0xFFFA32C0) } @tooltip = DialougeBox.new(@x, @y, WIDTH, HEIGHT, "Produces #{@rate} number per second") @@ -39,11 +38,11 @@ class Producer # @param camera_x [Integer] The camera X position # @param camera_y [Integer] The camera Y position # @param camera_zoom [Float] The camera zoom - def update(delta_mult, camera_x, camera_y, camera_zoom, mouse_x, mouse_y) + def update(delta_mult, camera_x, camera_y, camera_zoom, mouse_x, mouse_y, mouse_used) @draw_x = (((((@screen_width / @box_size.to_f) / 2.0) + (@x - camera_x) * camera_zoom) * @box_size) + BORDER * camera_zoom) @draw_y = (((((@screen_height / @box_size.to_f) / 2.0) + (@y - camera_y) * camera_zoom) * @box_size) + BORDER * camera_zoom) @camera_zoom = camera_zoom - if 0 < mouse_x - @draw_x && mouse_x - @draw_x < (@box_size * @camera_zoom) && 0 < mouse_y - @draw_y && mouse_y - @draw_y < (@box_size * @camera_zoom) + if !mouse_used && 0 < mouse_x - @draw_x && mouse_x - @draw_x < (@box_size * @camera_zoom) && 0 < mouse_y - @draw_y && mouse_y - @draw_y < (@box_size * @camera_zoom) @tooltip_timer += 60.0 * delta_mult if @tooltip_timer > HOVER_TIME @tooltip.show = true @@ -53,6 +52,9 @@ class Producer @tooltip_timer = 0 @tooltip.show = false end + if @extractor + @extractor.update() + end end # Draw the producer. Uses the camera x and y to shift where it should draw @@ -62,5 +64,8 @@ class Producer end @image.draw(@draw_x, @draw_y, 0, @camera_zoom, @camera_zoom) @tooltip.draw() + if @extractor + @extractor.update() + end end end diff --git a/ui.rb b/ui.rb new file mode 100644 index 0000000..8039b4e --- /dev/null +++ b/ui.rb @@ -0,0 +1,39 @@ +# Nathan Hinton +# This is the UI for the game and will contain all of the sub elements required. + +# There will be three main areas that we will be in charge of. First, the +# bottom bar has the selector of item types. There will be a menu in the top +# right as well as any store things that we need/ +class UI + # Setup for the UI + # @param width [Integer] Width of screen in pixels + # @param height [Integer] Height of the screen in pixels + def initialize(width, height) + @width = width + @height = height + @tool_selector = [] + @toolbar_width = width / 2 + @toolbar_height = height / 9 + @tool_selector_image = Gosu.render(@toolbar_width, @toolbar_height) { + Gosu.draw_rect( + 0, + 0, + @toolbar_width, + @toolbar_height, + Gosu::Color.new(0xC0, 0xFF, 0xFF, 0xFF), + 0) + Gosu::Image.from_text('tool selector', TEXT_SIZE, font: FONT_PATH).draw(TEXT_MARGIN, TEXT_MARGIN) + } + @x = (@width / 2) - (@toolbar_width / 2) + @y = @height - @toolbar_height + + end + + def update(mouse_x, mouse_y) + false + end + + def draw() + @tool_selector_image.draw(@x, @y) + end +end