mirror of
https://gitlab.com/MaddoScientisto/cirnofarm.git
synced 2026-06-01 08:55:35 +00:00
Raycasting
This commit is contained in:
parent
b486182d6d
commit
a352a671b9
3 changed files with 184 additions and 49 deletions
|
|
@ -6,7 +6,7 @@ version 2
|
|||
:: sfx/
|
||||
:: gfx/0.gfx
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIscmV2aXNpb249MTQxNF1dbHo0ABENAADjRAAA8xR7WzBdPXtibXA9cHh1
|
||||
NC0yOSAyMDoyNToyMiIscmV2aXNpb249MTQ5M11dbHo0AGkNAAA9RQAA8xR7WzBdPXtibXA9cHh1
|
||||
AEMgEBAE8PAsZmxhZ3M9MCxwYW5feAgA2nk9MCx6b29tPTExfSwyAPEIrxsj3gN_A94j3gP_CRNu
|
||||
A04TbiNOA34TAP8DjgM_A04DLiN_Iy4DngP_FAMuXgAd8AnwRU2ALSYtUB1mHQUgHYYNFQAdlh0V
|
||||
DaYEAMMNFQANlh0FEL0F8BNYAB8zWAAV8CpQRIAUTx8UUA8Ujx8EQC8UTx8kQA8UHx9EDg8ZBEAP
|
||||
|
|
@ -54,64 +54,65 @@ hQHTEBMPGwMOAgA2EAMOAgBfExATDgMcABSv0yAPFgVwDQUwDQYADy7wAt8SD2AEPlE8DxwsYPYV
|
|||
HAdAHgAHXAcAHgAeEHwQHiAHDAcMB0xwFwAIAJ8McBcQF5AYEBgnEh7wBSABLD8cAVABHG4BQAEM
|
||||
DhEOEQcOCgAiBw4DAAEMADIcBxwKAPAPDxdHDQ4BMAEcJw0nHgEwMQwHDjFQAQcMBwgHDgcBCgD-
|
||||
JQ4IDggeBwEwAQccbgcBEAEXLF4XAQABF3wBFwEQEQcBFwEHEQcRQAEAAQcBBwGQARwBHAHcEiAP
|
||||
MgD-GP8ogA8b0B6ATxgOPUA9Am0wvTAdAm0CHSBdAl0gzTAdAk0CLTBNCF0wPQJtQF0CLWB9cG2Q
|
||||
TbAtUJkAHw8yAP9H-wAEBAQAHxwADhceFw4AHgA8ABr-BggIBIAHMAcgBxAH8AQHEAcgBzAHgEIA
|
||||
HZAIADgACAAIMAgGAIEQCAAYUBhQGAoABBYAPzgACAUBHTNQBQACADgQBQACALEVAAUPGQUOBQ4F
|
||||
AAYAERAGAPAAXgkFABUOBR4JDgkKKQ4JDQlASQoZDhUA8QgZSgkaHgUADgUOGUoZLhUuCRoXCgke
|
||||
CRIA4AkKCToJCh4AFVkaCQ4ZTQDwAR4JCjkuBQ4VAAUJDgkeCQprAAKCAGAJPgUOBTALAFYOGR4A
|
||||
BaEAPwAFEBUCHw8yALPwFBC-GCAOtA4ADtQeRDxEHiQcPxwcJB4kDF0MJB4UDA1cDQwUCAAyDD0M
|
||||
CgARHQIACAoA0SQMHRwdDCQeJBw9HCRFAI-UDgAOtA4gvlUBIA8yAP9LtxOfEFAOHA4sDgwOCAAj
|
||||
LgwQAAAIAAgaACo8LhgAIgweCgAxYA4MIgCPcB5MDoBe8BSIAB75DxVVgAVWBXAFXxAFcAVeBXAF
|
||||
Bj4GBXAFFh4WBXAFVgQAT4BV8CVMAR8PMgD-GfAIIcEQAYwPERsMDxwhDH8QHA8cARARLxAzCvIF
|
||||
MT8QEYABLgGgAR4PHAGQAR4NAZAPABANBQBfAbAx8ApwAB7wHzYpwBoZECpQKhkAChlQSjlABhkK
|
||||
FgkGGhYwCQopChkKBhkGEGoJKgkWIBYKFgoJAK8wNhlGUIaQJvAGQQEfDzIA----------------
|
||||
----------------------9BUD0xMX19
|
||||
MgCB8B1gDdABDQGwASYBoAE2AYABFh8WFgFgASYeFgFQLWYdYAEGEQYRgAEWAQYBkAwAAQYAlRYB
|
||||
gAEGAQABBggA-wZwAQYBIAEGAVABJgEAASYBUCEgISDwAIH-KIAPG9AegE8YDj1APQJtML0wHQJt
|
||||
Ah0gXQJdIM0wHQJNAi0wTQhdMD0CbUBdAi1gfXBtkE2wLVCZAB8PMgD-R-8ABAQEAB8cAA4XHhcO
|
||||
AB4APAAa-wYICASABzAHIAcQB-AEBxAHIAcwB4BCAB2QCAA4AAgACDAIBgCBEAgAGFAYUBgKAAQW
|
||||
AD84AAgFAR0zUAUAAgA4EAUAAgCxFQAFDxkFDgUOBQAGABEQBgDwAF4JBQAVDgUeCQ4JCikOCWcJ
|
||||
QEkKGQ4VAPEIGUoJGh4FAA4FDhlKGS4VLgkaFwoJHgkSAOAJCgk6CQoeABVZGgkOGU0A8AEeCQo5
|
||||
LgUOFQAFCQ4JHgkKawACggBgCT4FDgUwCwBWDhkeAAWhAD8ABRAVAh8PMgCz8BQQvxggDrQOAA7U
|
||||
HkQ8RB4kHD8cHCQeJAxdDCQeFAwNXA0MFAgAMgw9DAoAER0CAAgKANEkDB0cHQwkHiQcPRwkRQCP
|
||||
1A4ADrQOIL5VASAPMgD-S7cTnxBQDhwOLA4MDggAIy4MEAAACAAIGgAqPC4YACIMHgoAMWAODCIA
|
||||
j3AeTA6AXvAUiAAe_Q8VVYAFVgVwBV8QBXAFXgVwBQY_BgVwBRYeFgVwBVYEAE_AVfAlTAEfDzIA
|
||||
-xnwCCHBEAGMDxEbDA8cIQx-EBwPHAEQES8QjQryBTE-EBGAAS4BoAEeDxwBkAEeDQGQDwAQDQUA
|
||||
XwGwMfAKcAAe8B82KcAaGRAqUCoZAAoZUEo5QAYZChYJBhoWMAkKKQoZCgYZBhBqCSoJFiAWChYK
|
||||
CQCvMDYZRlCGkCbwBkEBHw8yAP--------------------------------------QVA9MTF9fQ==
|
||||
:: gfx/.info.pod
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
NC0yOSAyMDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
MG5pbA==
|
||||
:: map/0.map
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIscmV2aXNpb249MTQzNV1dbHo0ANAFAAAKQgAA8Ah7e2JtcD11c2VyZGF0
|
||||
NC0yOSAyMDoyNToyMiIscmV2aXNpb249MTUyNF1dbHo0AMwFAAALQgAA8Ah7e2JtcD11c2VyZGF0
|
||||
YSgiaTE2IiwzMgMALyIwAQD-gy4xMAwADwEAoiozMAEAHjQUAAwBADU1ODABAD80ODABACsvNDAz
|
||||
ACYfNnwABD8xMzCAAEoAAQA-MzYwXAATBAQADwEANQ9QACEvMzCAAG0PAQC6KjQ4CAEPBAMHDiAA
|
||||
DwEANgSAAB8zYAEALzMwAQBHHjbUAA7sAA4kAA8BAD8OaAAPAQByHjOAAQ_AAGAPAQD-BC82MAEA
|
||||
awS0Aw4QAA8BAFMMcAAHEAAvNjF-Ac8PxQBJFzEEAA8BAAYHcAEOEAAPAQBQDHAADBAAD2gEHQgB
|
||||
AAhIAA_ABBoPgABCDwEA-xcOLAsPAQAULzQw0AE-HzMlBBgvNDABANT1GiIpLGhpZGRlbj1mYWxz
|
||||
ZSxuYW1lPSJvYmplY3RzIixwYW5feD05Ny42AQARNxUAhXk9LTkzLjgzAQCiLHRpbGVfaD0xNgoA
|
||||
EHcKAI96b29tPTF9LIEQ-2xTOTAwMGIIAA8BAP------------------jA_BEAOkZm9yZWdyb3Vu
|
||||
ZIQQVi03NC4zAQADhRBWOTkuMTaaEA_EEIIvMzkEAAMPAQAFLzM5BAADDwEAISMzMvwPDwQAAC8z
|
||||
MDAABBM5BAAaYgwALzMwgAAkBEQAFzAMAB85gAAQGjAMAA_AABkENAEjM2FAACJkMAEAE2MQAAAc
|
||||
ABY4KAAPAAESBzAADwQAAQ9EAAIvZDABAAcHjAAJPAAPMAAJC5QACAgAHzOAAFkXMAwAD4AAPRc1
|
||||
BAAIAQAvNTABAAoJgAAfZgQAAyYxNgQAJzBmBAAIPAADAQA-M2UwAQAaCYAADxEXBQiAAA4BAA48
|
||||
AA8BABgPgAA2HzUEAAwEAQAaNQQADwABtg_AAOxqMmIwMDJjBAAEAQAvMmMEAAQWZIAAAAEALzI5
|
||||
BAAAFmF8AAAEACYyOBwACIAAPzM1MAEAHhMzoAYvMzkEAAgLGAEIsAAPgAAtAAEAAV8AE2EQBRdh
|
||||
BAADEAAvMjCAAKMiMmLgAQ_AABIPAQAIAEAHEzJ1AB4yLQAPgAAGKjMzLAIETAINpAAPgAAMJzBj
|
||||
kAYfYwABCB5kgAAfMygAAA2kAA_AADQP3AIFD4AALgsBAA_AABUvMDD8CAAeYaQAD4AASQksCBc5
|
||||
SAEIBAIPgAA1FzUEAA_AABEDLAAPgAAVIzNlBAAfMAEAAw7gAg8BAAsEHAMMPAANNAMLBAAOAQAP
|
||||
iAENDxwCGw0YAAcEAC8wMIAADwRYBg8BAA4TY_gEBAQAH2QYAAAWYggFLjBifAEPgAAFDAwED4AA
|
||||
WQ8BAEcPgACPJjAwqAIPBABBD4QQEU9zb2xpfxBVLzEwAQD-gB45DAAPAQChLzE4BAADDwEABS8x
|
||||
YQQAAw8BACEvMTgEAAcPAQAFLzFhBAADLzAwkAEfLzE4BAAHDwEABScxYgQAFjkEAC8wOAQADAcB
|
||||
AC8xYwQAAyYwZgQAJjFjBAAJAQAfOAQAJAcBAC8xYwQAGwkBAB84BAAkBwEALzFjBAAbCAEALzE4
|
||||
BAAjCAEALzFjBAAbCAEALzE4BAAjCAEALzFjBAAbCAEALzE4BAAjCAEALzFjBAAbCAEALzE4BAAj
|
||||
CAEALzFjBAAbCAEALzE4BAAjDwEAESYxYwQADwEABS8xYgQAAAQIBB9iBAAHDwEAESYxYQQADwEA
|
||||
Bh84BAAkDwEAECYxYQQADwEABh84BAAkDwEAECYxYQQADwEABh84BAAkAAEAH2UEAAgDAQAOfAAL
|
||||
AQAeOAQADUsNFmEcAAUEABcwbAAPBAABD4AAKB8znwsBGzgEABcwbAAPBAABD4AAbQwEAA8BAAUf
|
||||
OIAA6y4xYngED4AAAQQcAAmABB9lBAAYDwEADC8xYQQAEw8BAAIvZTABAC4vMWEEABMPgAD-bx9l
|
||||
BAAgDwEAEC8xYQQAEy8wZQQAHg8DIZJMYmFjawMhHziEEAA-MTU2hRARUG09MX19
|
||||
DwEANgSAAB8zYAEABxAAPzQ1MAEAOx421AAO7AAOJAAPAQA-DmgADwEA-34OfAIPAQBsLzYwAQBr
|
||||
BLQDDhAADwEAUwxwAAcQAC82MdwBTy82MAEAsB82EAoHBAQADzUBBwMEAA4QAA8BAFMMcAAMEAAP
|
||||
AQAZDHQGHjQcAA8BABMPgABCDwEA-xcOLAsPAQAULzQw0AE-HzMlBBgvNDABANT2HCIpLGhpZGRl
|
||||
bj1mYWxzZSxuYW1lPSJvYmplY3RzIixwYW5feD0tMTA3LjMBAAEXAHR5PTMwLjE2AQCyNyx0aWxl
|
||||
X2g9MTYKABB3CgCPem9vbT0xfSyCEP9sUzkwMDBiCAAPAQD------------------4wPghADpWZv
|
||||
cmVncm91bmSFEC83NIQQAC85OYQQjy8zOQQAAw8BAAUvMzkEAAMPAQAhIzMy-A8PBAAALzMwMAAE
|
||||
EzkEABpiDAAvMzCAACQERAAXMAwAHzmAABAaMAwAD4AAGQQ0ASMzYUAAImQwAQATYxAAABwAFjgo
|
||||
AA8AARIHMAAPBAABD0QAAi9kMAEABweMAAk8AA8wAAkLlAAICAAfM4AAWRcwDAAPgAA9FzUEAAgB
|
||||
AC81MAEACgmAAB9mBAADJjE2BAAnMGYEAAg8AAMBAD8zZTABABoJgAAPEhcFCIAADgEADjwADwEA
|
||||
GA_AADYfNQQADAQBABo1BAAPAAG2D4AA7GoyYjAwMmMEAAQBAC8yYwQABBZkgAAAAQAvMjkEAAAW
|
||||
YXwAAAQAJjI4HAAIgAA-MzUwAQAeEzOgBi8zOQQACAsYAQiwAA_AAC0AAQABXwATYRAFF2EEAAMQ
|
||||
AC8yMIAAoyIyYuABD4AAEg8BAAgAQAcTMnUAHjItAA_AAAYqMzMsAgRMAg2kAA_AAAwnMGOQBh9j
|
||||
AAEIHmSAAB8zKAAADaQAD4AANA-cAgUPgAAuCwEAD4AAFS8wMPwIAB5hpAAPgABJCSwIFzlIAQgE
|
||||
Ag_AADUXNQQAD4AAEQMsAA_AABUjM2UEAB8wAQADDuACDwEACwQcAww8AA00AwsEAA4BAA_IAQ0P
|
||||
HAIbDRgABwQALzAwgAAPBFgGDwEADhNj6AQEBAAfZBgAABZiCAUuMGJ8AQ_AAAUMDAQPgABZDwEA
|
||||
Rw_AAI8mMDCoAg8EAEEPhBART3NvbGl-EFUvMTABAP_AHjkMAA8BAKEvMTgEAAMPAQAFLzFhBAAD
|
||||
DwEAIS8xOAQABw8BAAUvMWEEAAMvMDCQAR8vMTgEAAcPAQAFJzFiBAAWOQQALzA4BAAMBwEALzFj
|
||||
BAADJjBmBAAmMWMEAAkBAB84BAAkBwEALzFjBAAbCQEAHzgEACQHAQAvMWMEABsIAQAvMTgEACMI
|
||||
AQAvMWMEABsIAQAvMTgEACMIAQAvMWMEABsIAQAvMTgEACMIAQAvMWMEABsIAQAvMTgEACMIAQAv
|
||||
MWMEABsIAQAvMTgEACMPAQARJjFjBAAPAQAFLzFiBAAABAgEH2IEAAcPAQARJjFhBAAPAQAGHzgE
|
||||
ACQPAQAQJjFhBAAPAQAGHzgEACQPAQAQJjFhBAAPAQAGHzgEACQAAQAfZQQACAMBAA58AAsBAB44
|
||||
BAANSw0WYRwABQQAFzBsAA8EAAEPgAAoHzOfCwEbOAQAFzBsAA8EAAEPgABtDAQADwEABR84gADr
|
||||
LjFieAQPgAABBBwACYAEH2UEABgPAQAMLzFhBAATDwEAAi9lMAEALi8xYQQAEw_AAP9vH2UEACAP
|
||||
AQAQLzFhBAATLzBlBAAeDwMhkkxiYWNrAyEfOIQQAD8xNTaFEBFQbT0xfX0=
|
||||
:: map/1.map
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTI4IDIxOjA4OjM1Iixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIscmV2aXNpb249NV1dbHo0AJoAAAA9QQAA8Ah7e2JtcD11c2VyZGF0YSgi
|
||||
aTE2IiwzMgMALyIwAQD--------------------7wSIpLHBhbl94PS0yNAoA8gF5PS0xNDIsdGls
|
||||
ZV9oPTE2CgAQdwoAj3pvb209MX0sTxD---------------------------------------------
|
||||
--------------------BlBtPTF9fQ==
|
||||
NC0yOSAyMDoyNToyMiIscmV2aXNpb249NjZdXWx6NACoAAAAcUEAAPAIe3tibXA9dXNlcmRhdGEo
|
||||
ImkxNiIsMzIDAC8iMAEA--------------------_-EKIiksaGlkZGVuPWZhbHNlLHBhbl94PS0y
|
||||
NAoA8gF5PS0xNDIsdGlsZV9oPTE2CgAQdwoAj3pvb209MX0sXBD-------------------------
|
||||
----------------------------------------LVBtPTF9fQ==
|
||||
:: map/.info.pod
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
NC0yOSAyMDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
MG5pbA==
|
||||
:: sfx/0.sfx
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIscmV2aXNpb249MTEyM11dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A
|
||||
NC0yOSAyMDoyNToyMiIscmV2aXNpb249MTE4NF1dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A
|
||||
EAIOAAGgASACoA4ADxAADfDKAQIDBAUGBwAP-5AICQoLDwwPDQ8ODw8QAPAADQ8RDxIPEw8UDxUP
|
||||
Fg8XEwDxAQ8YDxkPGg8bDxwPHQ8eDx8UAPEAIA8hDyIPIw8kDyUPJg8nFADxACgPKQ8qDysPLA8t
|
||||
Dy4PLxQA8QAwDzEPMg8zDzQPNQ82DzcUAP8FOA85DzoPOw88Dz0PPg8-AA--8P8BAOvyJ1oBEAYP
|
||||
|
|
@ -120,14 +121,14 @@ Gy-wADAA--_CH-8BAMzxHegPQAANQA8XAAsaCAYIEAIDEAUABgAIAEkXACYICVD--wnxF-4J-Bf_
|
|||
CfBwKwBf-rDwcAQIAP-cH-8BAJdQ-----x8=
|
||||
:: sfx/.info.pod
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
NC0yOSAyMDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||
MG5pbA==
|
||||
:: main.lua
|
||||
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-29 06:23:07",revision=1430]]
|
||||
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-29 20:25:22",revision=1507]]
|
||||
include("/cirnofarm/src/game.lua")
|
||||
:: .info.pod
|
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w
|
||||
NC0yOSAwNjoyMzowNyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y
|
||||
NC0yOSAyMDoyNToyMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y
|
||||
a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0
|
||||
aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs
|
||||
d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ibWFwLzEubWFwIix3b3Jrc3BhY2VfaW5kZXg9
|
||||
|
|
|
|||
67
src/game.lua
67
src/game.lua
|
|
@ -58,6 +58,7 @@ local weapons_manager = require(make_path("weapons"))
|
|||
local Barrel = require(make_path("barrel"))
|
||||
local Strawberry = require(make_path("strawberry"))
|
||||
local Box = require(make_path("box"))
|
||||
local NPC = require(make_path("npc"))
|
||||
|
||||
include(make_path("pgui" .. ".lua"))
|
||||
|
||||
|
|
@ -115,7 +116,8 @@ actors_db = {
|
|||
{name="player",sprite=65,actor=nil},
|
||||
{name="box",sprite=4,actor=Box},
|
||||
{name="alarm",sprite=19,actor=nil},
|
||||
{name="fan",sprite=16,actor=nil}
|
||||
{name="fan",sprite=16,actor=nil},
|
||||
{name="NPC",sprite=69,actor=NPC}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -307,3 +309,66 @@ function check_collisions()
|
|||
|
||||
end
|
||||
|
||||
function raycast(x1, y1, x2, y2, max_distance)
|
||||
local dx = x2 - x1
|
||||
local dy = y2 - y1
|
||||
local step_x = dx > 0 and 1 or -1
|
||||
local step_y = dy > 0 and 1 or -1
|
||||
dx = dx < 0 and -dx or dx
|
||||
dy = dy < 0 and -dy or dy
|
||||
local fraction = dx - dy
|
||||
local x = x1
|
||||
local y = y1
|
||||
|
||||
|
||||
|
||||
-- calculate the distance between start and end point
|
||||
local distance = (math.sqrt((x2-x1)^2 + (y2-y1)^2))\1
|
||||
|
||||
local scale = max_distance / distance
|
||||
local px = x1 + (x2 - x1) * scale
|
||||
local py = y1 + (y2 - y1) * scale
|
||||
|
||||
-- limit the maximum distance
|
||||
if distance > max_distance then
|
||||
--return x2, y2, false
|
||||
return px, py, false
|
||||
end
|
||||
|
||||
-- checking the start point
|
||||
--if map_manager.is_tile_shoot_solid(flr(x / tile_width), flr(y / tile_height)) then
|
||||
if map_manager.is_tile_shoot_solid(x, y) then
|
||||
return x1, y1, false
|
||||
end
|
||||
|
||||
local distance_traveled = 0
|
||||
|
||||
while distance_traveled <= max_distance and (x ~= x2 or y ~= y2) do
|
||||
local prevX = x -- store previous positions for distance calculation
|
||||
local prevY = y
|
||||
|
||||
if fraction >= 0 then
|
||||
x += step_x
|
||||
fraction -= dy
|
||||
else
|
||||
y += step_y
|
||||
fraction += dx
|
||||
end
|
||||
|
||||
-- calculate distance traveled
|
||||
distance_traveled += math.sqrt((x - prevX) ^ 2 + (y - prevY) ^ 2)\1
|
||||
|
||||
-- return false as soon as a solid tile is hit
|
||||
if map_manager.is_tile_shoot_solid(x, y) then
|
||||
if x==x2 and y==y2 then -- return true only if hit tile is destination tile
|
||||
return x, y, true
|
||||
else
|
||||
return x, y, false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- if the loop is done without hitting a solid tile, return false
|
||||
return x2, y2, true
|
||||
end
|
||||
|
||||
|
|
|
|||
69
src/npc.lua
Normal file
69
src/npc.lua
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
local Actor = require(make_path("actor2"))
|
||||
|
||||
local NPC = Actor:new()
|
||||
|
||||
function NPC:new(x,y)
|
||||
local n = Actor:new(x,y)
|
||||
|
||||
n.spriteIndex = 69
|
||||
n.range = 64 + 16
|
||||
|
||||
n.found = false
|
||||
|
||||
n.enemy_x_debug = 0
|
||||
n.enemy_x_debug = 0
|
||||
|
||||
--n.dir_vec_debug_x = 0
|
||||
--n.dir_vec_debug_y = 0
|
||||
|
||||
n.hit_x = 0
|
||||
n.hit_y = 0
|
||||
|
||||
n.raycast_frames = 0
|
||||
n.raycast_frames_to_wait = 120
|
||||
|
||||
return setmetatable(n, {__index=self})
|
||||
end
|
||||
|
||||
function NPC:update()
|
||||
local enemy_x = cirnoInstance.x + 8
|
||||
local enemy_y = cirnoInstance.y + 8
|
||||
|
||||
self.enemy_x_debug = enemy_x
|
||||
self.enemy_y_debug = enemy_y
|
||||
|
||||
--local dir_vec = get_direction_vector(self.x, self.y, enemy_x, enemy_y)
|
||||
|
||||
--self.dir_vec_debug_x = dir_vec.dir_x
|
||||
--self.dir_vec_debug_y = dir_vec.dir_y
|
||||
|
||||
self.raycast_frames += 1
|
||||
|
||||
if (self.raycast_frames % self.raycast_frames_to_wait == 0) then
|
||||
local hit_x, hit_y, hit_status = raycast(self.x, self.y, enemy_x, enemy_y, self.range, 2)
|
||||
|
||||
--if (raycast_hit) then
|
||||
self.hit_x = hit_x
|
||||
self.hit_y = hit_y
|
||||
--end
|
||||
|
||||
self.found = hit_status == true
|
||||
end
|
||||
end
|
||||
|
||||
function NPC:draw()
|
||||
|
||||
--circfill(self.x,self.y,self.range,18)
|
||||
local col = 30
|
||||
spr(self.spriteIndex,self.x,self.y)
|
||||
print(string.format("Found: %s", tostring(self.found)),self.x,self.y-16,col)
|
||||
--print(string.format("dir_x: %.2f dir_y: %.2f",self.dir_vec_debug_x, self.dir_vec_debug_y),self.x,self.y-8,28)
|
||||
--print(string.format("hit_x: %.2f dir_y: %.2f", self.hit_x, self.hit_y),self.x, self.y,28)
|
||||
|
||||
--line(self.x,self.y, self.enemy_x_debug, self.enemy_y_debug, 14)
|
||||
line(self.x,self.y, self.hit_x, self.hit_y, col)
|
||||
|
||||
end
|
||||
|
||||
|
||||
return NPC
|
||||
Loading…
Add table
Add a link
Reference in a new issue