Faster RotationMatrix, IsEven bit shift and, work on MakeProperty module

This commit is contained in:
2024-04-22 16:57:42 -04:00
parent e3104595d8
commit 431ec165b8
6 changed files with 54 additions and 52 deletions

View File

@@ -144,13 +144,17 @@ local function GUI_LoadFinish(Gui: GuiDependencies) --We can now access the fram
end end
local function RotationMatrix(X: number, Y: number, Z: number): RotationMatrix local function RotationMatrix(X: number, Y: number, Z: number): RotationMatrix
local cosX, sinX = math.cos(X), math.sin(X)
local cosY, sinY = math.cos(Y), math.sin(Y)
local cosZ, sinZ = math.cos(Z), math.sin(Z)
return { return {
Ixx = math.cos(Z)*math.cos(X)-math.sin(Z)*math.sin(X)*math.sin(Y); Ixx = cosZ*cosX-sinZ*sinX*sinY,
Ixy = math.cos(Z)*math.sin(X)*math.sin(Y)+math.sin(Z)*math.cos(X); Ixy = cosZ*sinX*sinY+sinZ*cosX,
Iyx = -math.cos(Z)*math.sin(X)-math.sin(Z)*math.cos(X)*math.sin(Y); Iyx = -cosZ*sinX-sinZ*cosX*sinY,
Iyy = math.cos(Z)*math.cos(X)*math.sin(Y)-math.sin(Z)*math.sin(X); Iyy = cosZ*cosX*sinY-sinZ*sinX,
Izx = -math.sin(Z)*math.cos(Y); Izx = -sinZ*cosY,
Izy = math.cos(Z)*math.sin(Y) Izy = cosZ*sinY
} }
end end
@@ -216,7 +220,7 @@ return function(IntroGui: ScreenGui, load_elapse_start: number)
local load_elapse = os.clock()-load_elapse_start local load_elapse = os.clock()-load_elapse_start
if LoadingFun then if LoadingFun then
task.wait(math.max(0, 4-load_elapse)) --Only if you take longer than or exactly 4 seconds to load task.wait(math.max(0, 3-load_elapse)) --Only if you take longer than or exactly 4 seconds to load
end end
TS:Message("Load elapse: "..tostring(load_elapse), game) TS:Message("Load elapse: "..tostring(load_elapse), game)

View File

@@ -2,13 +2,14 @@
--!native --!native
--!strict --!strict
type Head = BasePart type Head = BasePart
type UpperTorso = BasePart type UpperTorso = BasePart
type Neck = Motor6D type Neck = Motor6D
type Waist = Motor6D type Waist = Motor6D
type NeckC0 = CFrame type NeckC0 = CFrame
type WaistC0 = CFrame type WaistC0 = CFrame
type UDP = UnreliableRemoteEvent type UDP = UnreliableRemoteEvent
type CharacterShared = Folder
type struct_SpineMovement = { type struct_SpineMovement = {
Neck: CFrame, Neck: CFrame,
@@ -23,7 +24,7 @@ type Impl_Constructor = {
Move: (self: ClassConstructor, CameraCFrame: CFrame, IsFirstPerson: boolean) -> () Move: (self: ClassConstructor, CameraCFrame: CFrame, IsFirstPerson: boolean) -> ()
} & Impl_Static_Props } & Impl_Static_Props
type Constructor_Fun = (Head: Head, UpperTorso: UpperTorso) -> ClassConstructor type Constructor_Fun = (CharacterShared: CharacterShared, Head: Head, UpperTorso: UpperTorso) -> ClassConstructor
type Impl_Static_Props = { type Impl_Static_Props = {
Enabled: boolean, Enabled: boolean,
Multiplier: number Multiplier: number
@@ -46,17 +47,16 @@ Spine.__index = Spine
Spine.Enabled = true Spine.Enabled = true
Spine.Multiplier = .5 Spine.Multiplier = .5
local Remote = Instance.new("UnreliableRemoteEvent") :: UDP function Spine.constructor(CharacterShared, Head, UpperTorso)
Remote.Name = "SpineStream"
Remote.Parent = _G.include(script, "CharacterShared")
function Spine.constructor(Head, UpperTorso)
local self = {} local self = {}
self.Remote = Instance.new("UnreliableRemoteEvent") :: UDP
self.Remote.Name = "SpineStream"
self.Remote.Parent = CharacterShared
self.Head = Head self.Head = Head
self.UpperTorso = UpperTorso self.UpperTorso = UpperTorso
self.Neck = Head:WaitForChild("Neck") :: Motor6D self.Neck = Head:WaitForChild("Neck") :: Motor6D
self.Waist = UpperTorso:WaitForChild("Waist") :: Motor6D self.Waist = UpperTorso:WaitForChild("Waist") :: Motor6D
self.Remote = Remote
self.NeckC0 = (self.Neck :: Motor6D).C0 self.NeckC0 = (self.Neck :: Motor6D).C0
self.WaistC0 = (self.Neck :: Motor6D).C0 self.WaistC0 = (self.Neck :: Motor6D).C0

View File

@@ -63,7 +63,7 @@ function Character.constructor(CharacterModel)
local HumanoidRootPart = CharacterModel:WaitForChild("HumanoidRootPart") :: HumanoidRootPart local HumanoidRootPart = CharacterModel:WaitForChild("HumanoidRootPart") :: HumanoidRootPart
self.CharacterShadows = Shadows.constructor(CharacterModel) self.CharacterShadows = Shadows.constructor(CharacterModel)
self.Spine = SpineModule.constructor(Head, UpperTorso) self.Spine = SpineModule.constructor(self.CharacterShared, Head, UpperTorso)
self.Flashlight = FlashlightModule.constructor(self.CharacterShared, Player, HumanoidRootPart) self.Flashlight = FlashlightModule.constructor(self.CharacterShared, Player, HumanoidRootPart)
self.Actions = ActionsModule.constructor(self.CharacterShared, Player) self.Actions = ActionsModule.constructor(self.CharacterShared, Player)

View File

@@ -27,6 +27,7 @@ export type Math = {
InOutBack: EaseFunction, InOutBack: EaseFunction,
OutBounce: EaseFunction, OutBounce: EaseFunction,
InQuad: EaseFunction, InQuad: EaseFunction,
IsEven: (n: number) -> boolean,
RotationMatrix: (X: number, Y: number, Z: number) -> RotationMatrix, RotationMatrix: (X: number, Y: number, Z: number) -> RotationMatrix,
Scalar: (X1: number, Y1: number, X2: number, Y2: number) -> Scalar, Scalar: (X1: number, Y1: number, X2: number, Y2: number) -> Scalar,
maxmin: (min: number, n: number, max: number) -> number maxmin: (min: number, n: number, max: number) -> number
@@ -34,18 +35,26 @@ export type Math = {
local Math = {} :: Math local Math = {} :: Math
function Math.IsEven(n)
return bit32.band(n, 1) == 0
end
function Math.maxmin(min, n, max) function Math.maxmin(min, n, max)
return math.max(min, math.min(n, max)) return math.max(min, math.min(n, max))
end end
function Math.RotationMatrix(X: number, Y: number, Z: number): RotationMatrix function Math.RotationMatrix(X: number, Y: number, Z: number): RotationMatrix
local cosX, sinX = math.cos(X), math.sin(X)
local cosY, sinY = math.cos(Y), math.sin(Y)
local cosZ, sinZ = math.cos(Z), math.sin(Z)
return { return {
Ixx = math.cos(Z)*math.cos(X)-math.sin(Z)*math.sin(X)*math.sin(Y); Ixx = cosZ*cosX-sinZ*sinX*sinY,
Ixy = math.cos(Z)*math.sin(X)*math.sin(Y)+math.sin(Z)*math.cos(X); Ixy = cosZ*sinX*sinY+sinZ*cosX,
Iyx = -math.cos(Z)*math.sin(X)-math.sin(Z)*math.cos(X)*math.sin(Y); Iyx = -cosZ*sinX-sinZ*cosX*sinY,
Iyy = math.cos(Z)*math.cos(X)*math.sin(Y)-math.sin(Z)*math.sin(X); Iyy = cosZ*cosX*sinY-sinZ*sinX,
Izx = -math.sin(Z)*math.cos(Y); Izx = -sinZ*cosY,
Izy = math.cos(Z)*math.sin(Y) Izy = cosZ*sinY
} }
end end

View File

@@ -0,0 +1,13 @@
--!optimize 2
--!native
--!strict
--[[
Module.Property = MakeProperty.constructor()
]]
local function MakeProperty<T>()
end
return MakeProperty

View File

@@ -1,24 +0,0 @@
--!optimize 2
--!native
--!strict
local StringModule = {}
StringModule.__index = StringModule
function StringModule.new(String: string)
return setmetatable({
String = String
}, StringModule)
end
type ByteArray = {string}
function StringModule:bytes(): ByteArray
local cbytes = {self.String:byte(1,-1)}
for i = 1, #cbytes do
cbytes[i] = tostring(cbytes[i]):char()
end
return cbytes
end
return StringModule