From 6b2c1a3c333a496e110b3ec87dce4e3ba4f0b583 Mon Sep 17 00:00:00 2001 From: Dangrain Date: Wed, 25 Sep 2024 20:38:03 +0200 Subject: [PATCH] Add files via upload --- actual game/Agent1.png | Bin 0 -> 1424 bytes actual game/Agent2.png | Bin 0 -> 1589 bytes actual game/Agent3.png | Bin 0 -> 1421 bytes actual game/libs/anim8.lua | 302 +++++++++++++++++++++++++++ actual game/main.lua | 117 +++++++++++ actual game/sprites/spritesheet.png | Bin 0 -> 4294 bytes actual game/sprites/spritesheet2.png | Bin 0 -> 5361 bytes actual game/sprites/spritesheet3.png | Bin 0 -> 9343 bytes actual game/spritesheet.png | Bin 0 -> 4294 bytes 9 files changed, 419 insertions(+) create mode 100644 actual game/Agent1.png create mode 100644 actual game/Agent2.png create mode 100644 actual game/Agent3.png create mode 100644 actual game/libs/anim8.lua create mode 100644 actual game/main.lua create mode 100644 actual game/sprites/spritesheet.png create mode 100644 actual game/sprites/spritesheet2.png create mode 100644 actual game/sprites/spritesheet3.png create mode 100644 actual game/spritesheet.png diff --git a/actual game/Agent1.png b/actual game/Agent1.png new file mode 100644 index 0000000000000000000000000000000000000000..5272f807e54fcc392eef45455aa3132ee271091c GIT binary patch literal 1424 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 literal 0 HcmV?d00001 diff --git a/actual game/Agent3.png b/actual game/Agent3.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd4c8bbbea82f0af219e0e6743826f908e2c4a8 GIT binary patch literal 1421 zcmV;81#Px)M@d9MRCr#^o4sxnF%ZY?XNZK5-~nhNcmN_QE=Z(7BF%M>f;Kz>uRwXlrG$yP>J$8NGhgkh^!B=$xC_+Ux}wgiyN6h}uFM>H97LJ~ztG)Oi#{nnHKt0FEE)&M-9834jR z<`$(O)isUVGdA@`D;V=PAZAkEs#9bM2y((TS%HblA7#RBvHrd9Spa>J7H{L6d1KjbGz(w=F>@Yv1AxLDapo-m(S>v| zth)g=<1?e4#EpC402C$(1`rr?M+vSUizt;1LYD5`#1tR|LYW?%l`0^Ot^Qc$*~IuS zTLPHO%Mu&R!ZOAcX%>L=9KxB;=m8ZFD7kVTW&sF&G^Pjh)&s>q!7SRDzPxqXD{$`gmL-x_KG|Qbj;fdLgYgcR2<;U)b09l2foYl zjvwI?Hv<4W#7nlp$^Rk4exd^fL@@2!E_w;00BTed1rQR?0|2PS0H8{UTL3PB$zl@# zgvvSp*aEp&9}!h(o-cR>1dBv+zyP>mGxY#@Tck?B9pNd8ToZh?y&@6P008_^Xd(qr zIOrb03P^DP<}3lA_sBEvLTj&p(1&sW)(%*L-V(F|fUY0sbfX{9FHQTq_}llF_kWWz z`TXQAzKeEBoqhZ+QZaSn<#p!cH09>4T zZJ(_G20-rbFvp{fa(E)lH~l2O|SsCH6aBAP6)R_?8T_4 z2S`68hBU=7Mn^;Vsi=P5@$rfretEekA@6oy$@wQI&zU6U<~%)ifJx@f+7UMofYT^( zKm4R9A2MWWNdQ?My21Tde`b6V$N&gAup|J^)hs}RvFav>1F-JQ)&okS1qk*4YHZym z1#k)h4?-oA{5dTFK#AaYfw~CfC4k5z8$e{IejA(%KuukEKCM>tIbpw_&Iyf{%pxLJ z0A`l)8V6t}`T(*#Z!}m8pfo!<3Ls+w9Vqo`T1gC`pHi@1GXRY;9tRO^gMtVJLwsLZ z0N?h^f17F+IeO%uaRsebtEc3{4%`DWDOW^bOJK(JSOs{yKt&wIF$h0pSx%@m0GTJU bQ3m*b-=H`AdJ*xj00000NkvXXu0mjf`5j self.width or y < 1 or y > self.height then + error(("There is no frame for x=%d, y=%d"):format(x, y)) + end + local key = self._key + _frames[key] = _frames[key] or {} + _frames[key][x] = _frames[key][x] or {} + _frames[key][x][y] = _frames[key][x][y] or createFrame(self, x, y) + return _frames[key][x][y] +end + +local function parseInterval(str) + if type(str) == "number" then return str,str,1 end + str = str:gsub('%s', '') -- remove spaces + local min, max = str:match("^(%d+)-(%d+)$") + assert(min and max, ("Could not parse interval from %q"):format(str)) + min, max = tonumber(min), tonumber(max) + local step = min <= max and 1 or -1 + return min, max, step +end + +function Grid:getFrames(...) + local result, args = {}, {...} + local minx, maxx, stepx, miny, maxy, stepy + + for i=1, #args, 2 do + minx, maxx, stepx = parseInterval(args[i]) + miny, maxy, stepy = parseInterval(args[i+1]) + for y = miny, maxy, stepy do + for x = minx, maxx, stepx do + result[#result+1] = getOrCreateFrame(self,x,y) + end + end + end + + return result +end + +local Gridmt = { + __index = Grid, + __call = Grid.getFrames +} + +local function newGrid(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border) + assertPositiveInteger(frameWidth, "frameWidth") + assertPositiveInteger(frameHeight, "frameHeight") + assertPositiveInteger(imageWidth, "imageWidth") + assertPositiveInteger(imageHeight, "imageHeight") + + left = left or 0 + top = top or 0 + border = border or 0 + + local key = getGridKey(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border) + + local grid = setmetatable( + { frameWidth = frameWidth, + frameHeight = frameHeight, + imageWidth = imageWidth, + imageHeight = imageHeight, + left = left, + top = top, + border = border, + width = math.floor(imageWidth/frameWidth), + height = math.floor(imageHeight/frameHeight), + _key = key + }, + Gridmt + ) + return grid +end + +----------------------------------------------------------- + +local Animation = {} + +local function cloneArray(arr) + local result = {} + for i=1,#arr do result[i] = arr[i] end + return result +end + +local function parseDurations(durations, frameCount) + local result = {} + if type(durations) == 'number' then + for i=1,frameCount do result[i] = durations end + else + local min, max, step + for key,duration in pairs(durations) do + assert(type(duration) == 'number', "The value [" .. tostring(duration) .. "] should be a number") + min, max, step = parseInterval(key) + for i = min,max,step do result[i] = duration end + end + end + + if #result < frameCount then + error("The durations table has length of " .. tostring(#result) .. ", but it should be >= " .. tostring(frameCount)) + end + + return result +end + +local function parseIntervals(durations) + local result, time = {0},0 + for i=1,#durations do + time = time + durations[i] + result[i+1] = time + end + return result, time +end + +local Animationmt = { __index = Animation } +local nop = function() end + +local function newAnimation(frames, durations, onLoop) + local td = type(durations); + if (td ~= 'number' or durations <= 0) and td ~= 'table' then + error("durations must be a positive number. Was " .. tostring(durations) ) + end + onLoop = onLoop or nop + durations = parseDurations(durations, #frames) + local intervals, totalDuration = parseIntervals(durations) + return setmetatable({ + frames = cloneArray(frames), + durations = durations, + intervals = intervals, + totalDuration = totalDuration, + onLoop = onLoop, + timer = 0, + position = 1, + status = "playing", + flippedH = false, + flippedV = false + }, + Animationmt + ) +end + +function Animation:clone() + local newAnim = newAnimation(self.frames, self.durations, self.onLoop) + newAnim.flippedH, newAnim.flippedV = self.flippedH, self.flippedV + return newAnim +end + +function Animation:flipH() + self.flippedH = not self.flippedH + return self +end + +function Animation:flipV() + self.flippedV = not self.flippedV + return self +end + +local function seekFrameIndex(intervals, timer) + local high, low, i = #intervals-1, 1, 1 + + while(low <= high) do + i = math.floor((low + high) / 2) + if timer >= intervals[i+1] then low = i + 1 + elseif timer < intervals[i] then high = i - 1 + else + return i + end + end + + return i +end + +function Animation:update(dt) + if self.status ~= "playing" then return end + + self.timer = self.timer + dt + local loops = math.floor(self.timer / self.totalDuration) + if loops ~= 0 then + self.timer = self.timer - self.totalDuration * loops + local f = type(self.onLoop) == 'function' and self.onLoop or self[self.onLoop] + f(self, loops) + end + + self.position = seekFrameIndex(self.intervals, self.timer) +end + +function Animation:pause() + self.status = "paused" +end + +function Animation:gotoFrame(position) + self.position = position + self.timer = self.intervals[self.position] +end + +function Animation:pauseAtEnd() + self.position = #self.frames + self.timer = self.totalDuration + self:pause() +end + +function Animation:pauseAtStart() + self.position = 1 + self.timer = 0 + self:pause() +end + +function Animation:resume() + self.status = "playing" +end + +function Animation:draw(image, x, y, r, sx, sy, ox, oy, kx, ky) + love.graphics.draw(image, self:getFrameInfo(x, y, r, sx, sy, ox, oy, kx, ky)) +end + +function Animation:getFrameInfo(x, y, r, sx, sy, ox, oy, kx, ky) + local frame = self.frames[self.position] + if self.flippedH or self.flippedV then + r,sx,sy,ox,oy,kx,ky = r or 0, sx or 1, sy or 1, ox or 0, oy or 0, kx or 0, ky or 0 + local _,_,w,h = frame:getViewport() + + if self.flippedH then + sx = sx * -1 + ox = w - ox + kx = kx * -1 + ky = ky * -1 + end + + if self.flippedV then + sy = sy * -1 + oy = h - oy + kx = kx * -1 + ky = ky * -1 + end + end + return frame, x, y, r, sx, sy, ox, oy, kx, ky +end + +function Animation:getDimensions() + local _,_,w,h = self.frames[self.position]:getViewport() + return w,h +end + +----------------------------------------------------------- + +anim8.newGrid = newGrid +anim8.newAnimation = newAnimation + +return anim8 diff --git a/actual game/main.lua b/actual game/main.lua new file mode 100644 index 0000000..c2abc2b --- /dev/null +++ b/actual game/main.lua @@ -0,0 +1,117 @@ +-- Load some default values for our agent. +local r, g, b = love.math.colorFromBytes(132, 193, 238) +love.graphics.setBackgroundColor(r, g, b) +local timer = 0 +local int = math.ceil(timer) + +function love.load() + anim8 = require 'libs/anim8' + love.graphics.setDefaultFilter("nearest", "nearest") + checker = 0 + agent = {} + agent.vx = 0 + agent.vy = 0 + agent.x = 0 + agent.y = 0 + agent.speed = 300 + agent.spriteSheet = love.graphics.newImage('sprites/spritesheet3.png') + agent.grid = anim8.newGrid( 64, 64, agent.spriteSheet:getWidth(), agent.spriteSheet:getHeight() ) + agent.animations = {} + agent.animations.right = anim8.newAnimation( agent.grid('1-3', 1),0.15) + agent.animations.left = anim8.newAnimation( agent.grid('1-3', 2),0.15) + + agent.anim = agent.animations.right + + isMouseDown = false + mouseX, mouseY = 0, 0 +end + +function love.update(dt) + timer = timer + dt + local distance + local isMoving = false + if love.keyboard.isDown("right") then + agent.anim = agent.animations.right + agent.x = agent.x + 2 + isMoving = true + end + + if love.keyboard.isDown("left") then + isMoving = true + agent.x = agent.x - 2 + agent.anim = agent.animations.left + end + + agent.anim:update(dt) + + if isMoving == false then + agent.anim:gotoFrame(1) + + end + + agent.x = agent.x + agent.vx * dt + agent.y = agent.y + agent.vy * dt + + if love.mouse.isDown(1) then + isMouseDown = true + mouseX, mouseY = love.mouse.getPosition() + else + + if isMouseDown then + local dx = mouseX - agent.x + local dy = mouseY - agent.y + local distance = math.sqrt(dx * dx + dy * dy) + + agent.vx = (dx / distance) * agent.speed + agent.vy = (dy / distance) * agent.speed + end + isMouseDown = false + end + + + local damping = 0.98 + local stopThreshold = 10 + + agent.x = agent.x + agent.vx * dt + agent.y = agent.y + agent.vy * dt + + + agent.vx = agent.vx * damping + agent.vy = agent.vy * damping + + + if math.abs(agent.vx) < stopThreshold and math.abs(agent.vy) < stopThreshold then + agent.vx = 0 + agent.vy = 0 + end + + + +end + + + +-- Draw a coloured rectangle. +function love.draw() + -- In versions prior to 11.0, color component values are (0, 102, 102) + love.graphics.print(agent.x, 10, 210) + love.graphics.print(int, 350, 0) + agent.anim:draw(agent.spriteSheet, agent.x, agent.y, nil, 1) + + if isMouseDown then + drawDottedArc(agent.x, agent.y, mouseX, mouseY) + end + +end + +function drawDottedArc(x1, y1, x2, y2) + local numDots = 20 + local distance = math.sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2) + + for i = 1, numDots do + local t = i / numDots + local cx = x1 + (x2 - x1) * t + local cy = y1 + (y2 - y1) * t + love.graphics.circle("fill", cx, cy, 2) + end +end diff --git a/actual game/sprites/spritesheet.png b/actual game/sprites/spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd507500a051a2a95bd0d47b409cf101edaff0d GIT binary patch literal 4294 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 literal 0 HcmV?d00001 diff --git a/actual game/sprites/spritesheet2.png b/actual game/sprites/spritesheet2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebd1a3e1009904c610f57e93fb9dce35280ec99 GIT binary patch literal 5361 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 X?x%g*;f+@R|7hx8G`>)xO$h!U`cbi# literal 0 HcmV?d00001 diff --git a/actual game/sprites/spritesheet3.png b/actual game/sprites/spritesheet3.png new file mode 100644 index 0000000000000000000000000000000000000000..88544c46d66775a2763fdcb6213487552e73fa9c GIT binary patch literal 9343 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 literal 0 HcmV?d00001 diff --git a/actual game/spritesheet.png b/actual game/spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd507500a051a2a95bd0d47b409cf101edaff0d GIT binary patch literal 4294 zcmWMpc|6m99R7U2wwXyb=19p*NEG@>iCCDUgve3EN=k@w=co4l$ua4mh)@s?1v^-pg5vjE#sI)0*5(I~MR-h}JaAXBS?0mAgucF$Lx5_zjenc@$Lrk=-Z+h! z9a8qH=Xgp8UtCQ(mUx=nWjh7dudwq2|ZjojWq=a$xFlTD)>N zCgI4JPCH-or_a9YzEU0vdn?5L9B%z-NBO~8ET)3S)$41Pd^OXwjpkCI*Ix=v$vU;N zAU!*qv2>`#LUO?NLB?c_qC2^K3QP&^coi!P|>IrttaHmg) z&ip_l{{=gutj?YGK=J&cf>oVwzT*<6z~4?~s8SV-SrvBBV*+ca34u)_?2xF9C^qV{ zZNFjh?0hDCLy(0+q$2(XYFUSyMLOMY+>zUVGxznHX7c2z;AVQjlB5ITq6~L+bsC2T zF)^U&-z1Wc%?(k^Xgrz{9KqzaavDZ{L)+2YADkIm#ey<(*kwt901~Y*#{?Mpnd~Pm z`&@@H@@`%Uo=W$3z91vlsY&hUpVh13RkYEi@s@CseqXbjp#}v@{4)3nk7URfbqGgs zzHzUp-&4>?BmI@Nd52e##WjG{W!{C8Z1<_dY#Lh}!3?Dmk#!H@fvA%UJk|J3aKaR_lx%+L(Sv_p(nAxbogaTJYhx$CkcW7@;6DpZmCQPPG z8wv?^jZ~RgvUtBFlRn%LTNwLDtXLKF2*$4sIgOh_7v(h4&v}2RKt>lm-b3ZXe zS46Srv$_INW>SUn$EZu1&84D9z6HD7d?p4W(4(?t!8b1KojvycU@jSmDbPIq1S%1y zZq;akriShi(NQPV_NR3MM?>a^x)kNbX~35yiynoO-d?&qmP2me7Hd;SZqZ%rUwo)j z_aw~nvF4G#xBc{1-wXfqB%ivY0;=|oW^Y5gp8y#D(YwwvIhKWbM?wFKE1IZZvh00} zWCF0VAk!%Chs55qYk;TOTHsTdFqp^>ehhaiaSjCIJ~$1r40&s9i>$sB3{yOsUe~U zd^vWzEVjqWT;0kqxsX&v(d||ZCcP`U12#17p30o(RN@$Uekdf9>PzUFR$rFyn(r%z zk*>EidJK7M%Cdb&G{|2vm-lC zI!b2KcQnxF#&0)~_?*;FWdG7Q#?dRa28>x_;ZR`nGAoLI<4W<<=n0dC#Yg*=MOiD< zjK5>!9Pd~0+`GA({crzn&NiO?JFRaLC6K#h(c)4etY(S2oEWfc;-9rPpY>ek#$EIl zNEciZs0UqYRqwU{uN1qnplWLHsvtiu{yYtZs3Y1yOw%YQzoDShQdt#d`a3LUngo{z zjzn?YSM7}~UEP6^r4`J~XwZY%6b6cyS)g=&b(7~#6;LPi+DmDr$MMG2>>T-wZ)U|o zMh)R7w~fBLoqgTXz(>?y0z`{naaE^+;nILXX@7`098^dqy+a$z4B*&0Ub=5?$^wkf zHqhcC)bcR)umBPFCJcp%Xp%EzfPH~t-|6{D1Vs@h=0OfX*qCwB5{K+zWp6c>E)nm9 zDbu?%6M$Og*ZRVG@bU=c?w5Dv#2|3_&T2l|PB&=3DGeS;;y~tG6XU2IgTt*-Ko()7 zH&}t!X{kUSpI_wg9O7$$P0+qQNGWvyOOwBS18nHN3v{~dG$>)HE@z;l7&$9#KOhG_ zzupJ&Rz_>5+K!qMl1SF~K%p!Y(+ASws5u)VWj{JywRa~xEJk^xmvJcw1xCBR z3D>f7B7;pLZkYO*y6$9;tj^DM^N z+kYwmudXf+oY~GBvVn9KF)$C};1Gh8EqEiT`3O}O0{N_7R*1D*FK!LWiqf}|j0XpI zRnWQ1k|Rl0U>?!M}znV=b0ZD28!sPNX9N zC{bz&NYDFT>S;3Il-3i##>f5GbPn?%iueB5@;UjK`|O<-z(%_Qg$z-gAd+aZ^7~sL zt|G6Ygyf#WF(pKgcB7dniqyuo$UU7^twh??ha=Eyr_w|M61Nz?nRj)Tl>>C7(8RaB zV9pVo7m`9+y!<2}`I?252f}~sfEr}J2RteCNv&`PmV0AVThW8_G0_Uhh;1>3mT|!n zRJPHNp$fKxcKZ%AxS#iMezxcH=i>xS*&Yy(rj-cdl;n==f;alykbX{ptfVQt95U~3 z3%6|r(@?fso*QhQ|F>CV#ue4c1&8^b-_ND`gH~@@EaHNa0`@z(|2zZj3J;CbWv*T0 zKAo<4(GzP2)ft$JgS18nN_Wt~WOt)UpFpW&5_oBZwoln{6S&QJK624Ss~v!%Ek_gs zL{((EJPJ26z~e0y>A(!@zxlky3t^fk_AzkfH_Je=dRQLU0oaV4({f2_9<&GUfxpC& zsrdCJi(^it@qhg5Fw9yW+&3sZh?|h`FatJ3^P>>e$Nsg+_*E6h4NbIZ55a$1y?!oy z+Iw}(XenPH@Dv{P7twR@naTTC<-^sg7qw{~47uIH#o=+Xu~O7*kry3z`S67PwDIr% zgrXsQC1y?V=YG3JenlXQ3S_=Tm6i+BhFQ}u90YRO4?}>vv@0Z^xeVKHM)=crpQatI z25WY8)@MZV^_bnP=>khpIp{14;388mb6avzqIlC+fT2e#i!GlDud!CC^ zD3{KndUjDEjV*6g5O`s~DiYXQ^#L8zmupzz3+|si)1Y5XULmr>9_|^voCrRCXN@$Y zo;l;e_?9gB^bW~4m7`nuBV1v4hROw(=!#3^>|Wdy7(96;n>4*~2{8I}GrR|~^~xT< zS(Z1BUZR}2jwU4SP0hX{%szcf?O<}h>jluQIU3VF!kSL_DA2}KZ3IR!MUd4(cvqGj z@*$N+BoRS4qi7&o3p|8_G?LCQ`eND9YwFRlO?!BYNjpKK3=}F!F~$t6zz6}^3AQfx z(Fdy+Ol`hb2GGkvgumIIBzy4MN7dwN!ZYK&m^OMr84((pWffPXsvxDUzhJzvr2+4w z9OVwU5%uC|{~=V;;R1bFN989LWNeGvT0Q7kV?6*i3B*Mzhv`&^c{~3{5EE_2w2~_A zFglkE)2gbiAoHeB6x$Q^`7BPyFhUk22@i!Qt90d`VE1Guz?7 zMKqE$Ck`?2prK74O?y}(4aqO%5@}{@Eim|@ED!5aMO8M8Hj-9V0V+8d#eVHSzPPG^ z?EYjRr#g|{J`notq`gQEnxtx_of@(H_n4qyaN=`G2VDyQ6A7U7BdeCkZd7@Op@o;F zDjy?`B?ga4mwh$PTS#^)NBnzH?ux&_4Xt;zGV}Jjyyy8o5`tY<<5}|lt zk+sxdKXINZ%r4PEBQGyHqL}EOODK|A9*R<~O$1ecDpio;T0GbV-y6Y zI8E@>7i~OwZ=F}SLCDA6!1d>2xV`!i#PFufa(DRzJP=O2ZT|A8?d1~%%9Y4)#aqA! zD{-|Nrr{D_fTl?E+@z2Dm8ui5G&2GvZnKICXgGHQv}-$BI3HZng>`}hh)|wP;rkvZ zf=*)zp`opB8lxT|-7OJox{yKX_Mg!~gC z6kn=Qr!+{M=z&iK1Z8o8X+O4nB_Pg*G|Y*gnxSD10s88{AI1!+%8d?GeK?R%Id8Uo zuug-U%U}Kcd8H)_jh{3W&ZF3KHT7l=`%IyI24Qs9bHCk|WMkOq_oipQ{g}Tiy_`do zMM8^ypecq@CsR%orYDQ_{8;PEP-ppIAuG32+s)%((qPPZZG|JERj1hyl7lMmVO=?x zA9^1=Uf$oLMT96&>!uJ+cqK<@WAb!OpA>)I4V;kW$eyw0*zbUOCg(qddc*cQWjv>h z7&#d6CCxd_gi&d~D06AjJyvB^aFRxb@%|^@m`kBJwiVk}M(n5rsUy3>jTH&=B4293 z0cB9le8CBkizdWe6P5AMTpTrZU^20c;1K@#asK+tyO8O$_H4IWKSiW twD%c`|NX%sOMp$i^_``c9U^#kYK~qP)_UZR!+PMZk2TfSyx5c${XZt(& literal 0 HcmV?d00001