local RunService = game:GetService("RunService")
-- Oyun döngüsünü yönetmek için kullanılır (örneğin, her karede bir fonksiyon çalıştırmak için).
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Tüm oyuncular arasında paylaşılan verilere erişmek için kullanılır.
local UserInputService = game:GetService("UserInputService")
-- Kullanıcı girişlerini (klavye, fare, dokunmatik) işlemek için kullanılır.
local CollectionService = game:GetService("CollectionService")
-- Nesneleri etiketleyip gruplandırmak için kullanılır.
local SoundService = game:GetService("SoundService")
-- Oyundaki sesleri yönetmek için kullanılır.
local Players = game:GetService("Players")
-- Oyuncu verilerine erişmek için kullanılır.
local modules = ReplicatedStorage:WaitForChild("Modules")
-- ReplicatedStorage içindeki "Modules" klasörüne erişim sağlar.
local Config = require(modules:WaitForChild("Config"))
-- Config modülünü yükler, bu modül kamera ayarlarını içerir.
local Utility = require(modules:WaitForChild("Utility"))
-- Utility modülünü yükler, bu modül yardımcı işlevleri içerir.
local localPlayer = Players.LocalPlayer
-- Yerel oyuncuya (kullanıcı) referans alır.
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
-- Yerel oyuncunun karakterine referans alır, karakter yüklenmemişse bekler.
local hrp = character:WaitForChild("HumanoidRootPart")
-- Karakterin merkezindeki HumanoidRootPart nesnesine referans alır.
SoundService:SetListener(Enum.ListenerType.ObjectCFrame, hrp)
-- Ses dinleyicisini HumanoidRootPart'a ayarlar, sesleri karakterin konumuna göre duymayı sağlar.
local mode = Config.Camera.Modes[Config.Camera.Mode]
-- Geçerli kamera modunu alır.
local courtFloor.
-- Mahkeme zeminine referans için değişken oluşturur.
local camera = workspace.CurrentCamera
-- Oyundaki ana kameraya referans alır.
camera.CameraType = Enum.CameraType.Scriptable
-- Kamerayı script tarafından kontrol edilebilir moda ayarlar.
local zoom = Config.Camera.Modes.Isometric.Zoom
-- İlk zoom seviyesini ayarlar.
RunService:BindToRenderStep("CameraCFrameUpdate", Enum.RenderPriority.Camera.Value + 1, function(dt: number)
-- Her karede çalışacak bir fonksiyon tanımlar.
local rootPart = character and character.PrimaryPart
-- Karakterin ana parçasına referans alır.
if not rootPart then return end.
-- Ana parça yoksa fonksiyonu durdurur.
if not courtFloor then.
-- Mahkeme zemini tanımlanmamışsa.
courtFloor = CollectionService:GetTagged("CourtFloor")[1]
-- "CourtFloor" etiketiyle işaretlenmiş nesneyi alır.
if not courtFloor then.
-- Eğer mahkeme zemini bulunamazsa uyarı verir.
warn("Court Floor doesn't exist! Please add one with tag 'CourtFloor', it is required for the camera to work properly!")
return.
end.
end.
local courtCF = courtFloor.CFrame
-- Mahkeme zemininin koordinat çerçevesini alır.
local start = courtCF + courtCF.LookVector * courtFloor.Size.Z/2
-- Mahkeme zemininin ön tarafını hesaplar.
local meta = courtCF - courtCF.LookVector * courtFloor.Size.Z/2
-- Mahkeme zemininin arka tarafını hesaplar.
local rootCF = rootPart.CFrame
-- Karakterin ana parçasının koordinat çerçevesini alır.
local zAngle = Utility.Map(rootCF.Position.Z, meta.Position.Z, start.Position.Z, -1, 1)
-- Karakterin Z pozisyonunu -1 ile 1 arasında haritalar.
if shared.cameraTarget then.
-- Eğer ortak kamera hedefi tanımlanmışsa.
camera.CFrame = camera.CFrame:Lerp(shared.cameraTarget[1].CFrame, Config.Camera.Responsiveness * dt)
-- Kameranın konumunu hedefe doğru yumuşakça hareket ettirir.
camera.FieldOfView = Utility.Lerp(camera.FieldOfView, shared.cameraTarget[2], mode.FieldOfViewResponsiveness * dt)
-- Kameranın görüş alanını hedefe doğru yumuşakça değiştirir.
return.
end.
camera.FieldOfView = Utility.Lerp(camera.FieldOfView, mode.FieldOfView, mode.FieldOfViewResponsiveness * dt)
-- Kameranın görüş alanını yapılandırma ayarlarına göre değiştirir.
if Config.Camera.Mode == "Isometric" then.
-- Eğer kamera modu "Isometric" ise.
camera.CFrame = camera.CFrame:Lerp(CFrame.new(Vector3.new(rootCF.Position.X - zoom, rootCF.Position.Y + zoom, rootCF.Position.Z + zoom * zAngle), rootCF.Position), Config.Camera.Responsiveness * dt)
-- Kameranın konumunu izometrik açıya göre ayarlar.
else.
-- Diğer kamera modları için.
camera.CFrame = camera.CFrame:Lerp(CFrame.new(rootCF.Position + Vector3.new(-zoom, zoom, zoom * zAngle), rootCF.Position), Config.Camera.Responsiveness * dt)
-- Kameranın konumunu farklı bir açıya göre ayarlar.
end.
end)
UserInputService.InputChanged:Connect(function(inputObject: InputObject)
-- Kullanıcı girişindeki değişiklikleri dinler.
if inputObject.UserInputType == Enum.UserInputType.MouseWheel then.
-- Eğer giriş tipi fare tekerleği ise.
zoom = math.clamp(zoom - mode.ZoomIncrement * inputObject.Position.Z, mode.ZoomRange.Min, mode.ZoomRange.Max)
-- Zoom seviyesini fare tekerleği hareketine göre ayarlar.
end.
end)
local lastTouchScale = nil.
-- Son dokunma ölçeğini saklamak için değişken.
UserInputService.TouchPinch:Connect(function(touchPositions, scale, velocity, state, gameProcessedEvent)
-- Dokunmatik sıkıştırma hareketlerini dinler.
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then.
-- Eğer sıkıştırma değişir veya sona ererse.
local difference = scale - lastTouchScale.
-- Ölçek farkını hesaplar.
zoom = math.clamp(zoom * (1 + difference), mode.ZoomRange.Min, mode.ZoomRange.Max)
-- Zoom seviyesini sıkıştırma ölçeğine göre ayarlar.
print(zoom)
end.
lastTouchScale = scale.
-- Son dokunma ölçeğini günceller.
end)