Skip to content

Commit 6dc0530

Browse files
authored
Update race.lua
1 parent df32e17 commit 6dc0530

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

the-racer/race.lua

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,98 @@
1+
function startRace()
2+
currentLap = 0
3+
positions = {}
4+
raceEvents = {}
5+
-- Dodaj kierowców gracza
6+
for _, driver in ipairs(playerTeam.drivers) do
7+
table.insert(positions, { team = playerTeam.name, driver = driver.name, position = 0, tire = playerTireChoice, lapsOnTire = 0, out = false })
8+
end
9+
-- Dodaj przeciwników
10+
for _, opp in ipairs(opponents) do
11+
for _, driver in ipairs(opp.drivers) do
12+
table.insert(positions, { team = opp.name, driver = driver.name, position = 0, tire = "Medium", lapsOnTire = 0, out = false })
13+
end
14+
end
15+
-- Losowa siatka startowa
16+
for i = #positions, 2, -1 do
17+
local j = math.random(i)
18+
positions[i], positions[j] = positions[j], positions[i]
19+
end
20+
end
121

22+
function simulateLap()
23+
currentLap = currentLap + 1
24+
for _, car in ipairs(positions) do
25+
if not car.out then
26+
local baseSpeed = getCarSpeed(car)
27+
local tireMod = getTireModifier(car.tire)
28+
local wearMod = 1 - (car.lapsOnTire / 30) * 0.15 -- Ulepszony zużycie
29+
local speed = baseSpeed * tireMod * wearMod * (0.9 + math.random() * 0.2)
30+
31+
car.position = car.position + speed
32+
car.lapsOnTire = car.lapsOnTire + 1
33+
34+
-- Losowe wydarzenia
35+
if math.random(100) > 98 then
36+
table.insert(raceEvents, car.driver .. " crashed!")
37+
car.out = true
38+
elseif math.random(100) > 95 then
39+
table.insert(raceEvents, car.driver .. " has engine failure!")
40+
car.out = true
41+
end
42+
end
43+
end
44+
45+
-- Sortuj pozycje
46+
table.sort(positions, function(a, b) return a.position > b.position end)
47+
48+
-- AI pit stops
49+
for _, car in ipairs(positions) do
50+
if not car.out and car.lapsOnTire > 20 and math.random() > 0.4 then
51+
car.tire = tireTypes[math.random(#tireTypes)]
52+
car.lapsOnTire = 0
53+
car.position = car.position - 300 -- Kara za pit
54+
table.insert(raceEvents, car.driver .. " pitted for " .. car.tire)
55+
end
56+
end
57+
58+
-- Symuluj pit stops gracza (prosta logika)
59+
if currentLap == math.floor(raceLaps / (playerPitStops + 1)) then
60+
for _, car in ipairs(positions) do
61+
if car.team == playerTeam.name and not car.out then
62+
car.tire = tireTypes[math.random(#tireTypes)]
63+
car.lapsOnTire = 0
64+
car.position = car.position - 300
65+
table.insert(raceEvents, car.driver .. " player pit stop")
66+
end
67+
end
68+
end
69+
end
70+
71+
function getCarSpeed(car)
72+
if car.team == playerTeam.name then
73+
for _, driver in ipairs(playerTeam.drivers) do
74+
if driver.name == car.driver then
75+
return driver.speed + playerTeam.carPerformance
76+
end
77+
end
78+
else
79+
for _, opp in ipairs(opponents) do
80+
if opp.name == car.team then
81+
for _, driver in ipairs(opp.drivers) do
82+
if driver.name == car.driver then
83+
return driver.speed + opp.carPerformance
84+
end
85+
end
86+
end
87+
end
88+
end
89+
return 100
90+
end
91+
92+
function getTireModifier(tire)
93+
if tire == "Soft" then return 1.3
94+
elseif tire == "Medium" then return 1.0
95+
elseif tire == "Hard" then return 0.8
96+
end
97+
return 1.0
98+
end

0 commit comments

Comments
 (0)