This will provide basic navigation of a Myst-like environment. To generate the markers for each grid location check out the Build Environment script.
--Copyright 1999 Chuck Neal
--chuck@mediamacros.com
--If you find this code helpful, send me an e-mail and let me know. :-)
property whichHotSpot, spriteNum
global maxX, maxY
on getPropertyDescriptionList me
p_list = [:]
addProp p_list, #whichHotSpot, [#format : #symbol, #comment : "What navigation hotspot:", #default: #ahead, #range : [#ahead, #turnleft, #turnright, #back]]
return p_list
end
on mouseUp me
--get the current marker
currentLoc = findLastLabel()
--set the delimiter to brak the location by
the itemDelimiter = "-"
currentX = integer(currentLoc.item[1])
currentY = integer(currentLoc.item[2])
currentD = integer(currentLoc.item[3])
newLocList = [currentX, currentY, currentD]
case whichHotSpot of `
#ahead:
--go foward 1 based upon the current direction
case currentD of
1:
--Facing North
newLocList[2] = (currentY - 1)
if newLocList[2] < 1 then newLocList[2] = 1
2:
--Facing East
newLocList[1] = (currentX + 1)
if newLocList[1] > maxX then newLocList[1] = maxX
3:
--Facing South
newLocList[2] = (currentY + 1)
if newLocList[2] > maxY then newLocList[2] = maxY
4:
--Facing West
newLocList[1] = (currentX - 1)
if newLocList[1] < 1 then newLocList[1] = 1
end case
#turnLeft:
newLocList[3] = currentD - 1
if newLocList[3] < 1 then newLocList[3] = 4
#turnRight:
newLocList[3] = currentD + 1
if newLocList[3] > 4 then newLocList[3] = 1
#back:
case currentD of
1:
--Facing North
newLocList[2] = (currentY + 1)
if newLocList[2] > maxY then newLocList[2] = maxY
2:
--Facing East
newLocList[1] = (currentX + 1)
if newLocList[1] < 1 then newLocList[1] = 1
3:
--Facing South
newLocList[2] = (currentY + 1)
if newLocList[2] < 1 then newLocList[2] = 1
4:
--Facing West
newLocList[1] = (currentX - 1)
if newLocList[1] > maxX then newLocList[1] = maxX
end case
end case
goTo = string(newLocList[1]) & "-" & string(newLocList[2]) & "-" & string(newLocList[3])
if marker(goTo) <> 0 then
go goTo
end if
end
on getBehaviorDescription me
describe = "This behavior can be dropped on hot-spots to navigate a 3d/Myst like environment. Use the Build Environment Script to generate the markers for the environment, then set the maxX and maxY values as globals."
return describe
end
Contact
MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA