Page 13 of 15

Re: HUMP - yet another set of helpers

Posted: Wed Dec 16, 2015 8:08 pm
by HaftSwimmingly
bobbyjones wrote:For room one you did self:whatever it should be room1:whatever.
Thanks

Re: HUMP - yet another set of helpers

Posted: Wed Mar 02, 2016 4:48 am
by alundaio
Hello, I'm wondering if anyone can help me out. I'm using hump.camera and I want to know how I can lock the camera inside the level map boundary; I need a solution that also considers camera scale. Hump.camera has a lockWindow method but it does the opposite, it only moves the camera when the position (such as player) is outside of this bounding box. I want the camera bounding box to stay within the level x,y,w and h. I'm using STI for tiled maps, with a basic 64x64 grid.

I know I can just lock x and y when the player moves near the borders but this don't work when I scale the camera from 1x to 2x.

Re: HUMP - yet another set of helpers

Posted: Wed Mar 02, 2016 11:22 am
by ivan
Hey Akundaio, the math behind it would be fairly simple.
You want to contain one rectangle (the camera's viewport) inside another rectangle (bounds of the map).
The easiest approach is to transform the camera rect in world coords.
Assuming the center of the camera is in world coords:

Code: Select all

local s = 1/camera.zoom -- zoom or scale of the camera
local vw, wh = camera.w, camera.h -- dimensions of the viewport (in screen coords)
local wvw, wvh = vw*s, vh*s -- dimensions of the viewport (in world coords)
Next you clamp the transformed viewport rect to the map bounds:

Code: Select all

camera.x = math.max(camera.x, map.left + wvw)
camera.x = math.min(camera.x, map.right - wvw)
camera.y = math.max(camera.y, map.top + wvh)
camera.y = math.min(camera.y, map.bottom - wvh)

Re: HUMP - yet another set of helpers

Posted: Thu Mar 03, 2016 7:27 am
by alundaio
Ah, I see what I was doing wrong after looking at your example. This is the solution that worked in my case:

Code: Select all

			local wvw, wvh = windowWidth/(2*cam.scale), windowHeight/(2*cam.scale)
			
			cam.x = math.clamp(cam.x,0+wvw,1024-wvw)
			cam.y = math.clamp(cam.y,0+wvh,map.height*64-wvh)
Thanks for the help, cheers.

Re: HUMP - yet another set of helpers

Posted: Fri Apr 15, 2016 12:46 pm
by murks
Hi there.

I tried to create timed level progression using hump.timer but all I get is crashes. Any idea what's wrong?

Code: Select all

Timer = require("lib/hump.timer")

function love.load()
	love.graphics.setColor(0,0,0)
	love.graphics.setBackgroundColor(255,255,255)
	TIMERS = {}
	TI = 1
	Timer.every(TI, function() addTimer(TI); TI = TI + 1 end)  
end

function love.update(dt)
	Timer.update(dt)
	for k,v in pairs(TIMERS) do
		TIMERS[k].update(dt)
	end
end

function love.draw()
end

function addTimer(ti)
	local tmpt = Timer.new()
	tmpt.every(ti, print("Timer: "..ti))
	table.insert(TIMERS, ti, tmpt)
end

Code: Select all

Timer: 1
Error: lib/hump/timer.lua:62: attempt to call upvalue 'func' (a nil value)
stack traceback:
	lib/hump/timer.lua:62: in function 'after'
	lib/hump/timer.lua:44: in function 'update'
	main.lua:15: in function 'update'
	[string "boot.lua"]:463: in function <[string "boot.lua"]:435>
	[C]: in function 'xpcall'

Re: HUMP - yet another set of helpers

Posted: Sun Apr 17, 2016 5:00 pm
by vrld

Code: Select all

tmpt.every(ti, print("Timer: "..ti))
will not work, because print("Timer: "..ti) is not a function. The correct usage would be

Code: Select all

tmpt.every(ti, function() print("Timer: "..ti) end)
In any case, here is what you are doing right now:
  • Every second, add a Timer instance, for which:
    • Every two (three, four, ...) seconds, print the text "Timer: {number}" to the console
After one second, you will have one timer to add timers, and one timer that prints every two seconds. After two seconds, you will have one timer that adds timers and two timers that print to the console every two and three seconds. After three seconds, you will have one timer that adds timers and three timers that print to the console every two, three and four seconds, etc.

Is that what you intended to do?

Re: HUMP - yet another set of helpers

Posted: Sun Apr 17, 2016 5:27 pm
by murks
Yes, I intended to spawn increasingly more enemies in a sort-of random time interval. This was the way I came up with (if you replace print with spawn, adjust time intervals to taste).
Is there a better way to do something like that?

Re: HUMP - yet another set of helpers

Posted: Sun Apr 17, 2016 6:14 pm
by vrld
Timer.script is great for things like this. For example:

Code: Select all

Timer.script(function(wait)
  local time_passed = 0
  while true do -- replace with terminating condition
    for i = 1,getNumberOfEnemies(time_passed) do
        spawnEnemy()
    end
    
    local time_to_wait = getWaitTime(time_passed)
    wait(time_to_wait)
    time_passed = time_passed + time_to_wait
  end
end

Re: HUMP - yet another set of helpers

Posted: Fri Apr 22, 2016 9:07 am
by Rishavs
Hi

I need some help with camera coordinates.

I am using Hump for the camera and STI for the tilemap.

In Tiled I have added a object called startPoint (where i want my sprite to spawn). The x,y value that i get from Tiled is 320, 2880.

I am simply unable to use this value to spawn the spite. It always spawns somewhere else. I tried using self.cam:worldCoords but the value is again different from what I expected. Manually i can see I need to place the sprite at 708, 1602
Can someone please help me here? Is there a problem with using hump.Camera and STI together?

I am essentially doing this;

Code: Select all

for k, object in pairs(self.map.objects) do
        if object.name == "startPoint" then
            startPointX, startPointY = self.cam:worldCoords(object.x, object.y)
            print("startpoint", object.x, object.y)
        elseif object.name == "endPoint" then
            endPointX, endPointY = self.cam:cameraCoords(object.x, object.y)
--            print("endpoint", object.x, object.y)
        end
    end
and I am drawing the spite like this;

Code: Select all

    self.map:draw()

    love.graphics.draw(img,  startPointX, startPointY, 0, 1, 1, imgWidth / 2, imgHeight / 2)
My code is at;
https://github.com/rishavs/RoguishLove
The relevant code is in the _state_Game.lua file around lines 61 and 117.

Re: HUMP - yet another set of helpers

Posted: Sat Apr 23, 2016 11:22 pm
by Kibita
I dont know what's going on with my Timer, it should make my obstacles doing a smooth oscillation in the X axis, but they go crazy, oscillating very fast gradually. That's the code:

Code: Select all

    if self.type == "oscillator-x" then
        obstacleTimer.script(function(wait)
            while true do
                obstacleTimer.tween(7, self, {distFromMid = 100}, "in-linear", function()
                    obstacleTimer.tween(7, self, {distFromMid = 400}, "in-linear") -- const.gameWidth / 2
                end) -- self.radius
                wait(1)
            end
        end)
    end
Should I post more code, or the entire .lua file?