Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

/tg/ Status Effects Prelude B - Fixed VV Transform Stacking #4870

Merged
merged 2 commits into from
Nov 8, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 30 additions & 13 deletions code/game/atoms.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@

var/list/filter_data //For handling persistent filters

// Base transform matrix
var/matrix/base_transform = null
/// Base transform matrix, edited by admin tooling and such
var/matrix/base_transform
/// Last transform used before being compound with base_transform
/// This allows us to re-create transform if only base_transform changes
var/matrix/raw_transform

///Chemistry.
var/datum/reagents/reagents = null
Expand Down Expand Up @@ -141,15 +144,27 @@ directive is properly returned.
if(loc)
return loc.return_gas()

// Updates the atom's transform
/atom/proc/apply_transform(matrix/M)
if(!base_transform)
transform = M
return
/// Updates the atom's transform compounding it with [/atom/var/base_transform]
/atom/proc/apply_transform(matrix/new_transform, time = 0, easing = (EASE_IN|EASE_OUT))
var/matrix/base_copy
if(base_transform)
base_copy = matrix(base_transform)
else
base_copy = matrix()
raw_transform = matrix(new_transform) // Keep a copy to replay if needed

var/matrix/base_copy = matrix(base_transform)
// Compose the base and applied transform in that order
transform = base_copy.Multiply(M)
var/matrix/complete = base_copy.Multiply(raw_transform)

if(!time)
transform = complete
return
animate(src, transform = complete, time = time, easing = easing)

/// Upates the base_transform which will be compounded with other transforms
/atom/proc/update_base_transform(matrix/new_transform, time = 0)
base_transform = matrix(new_transform)
apply_transform(raw_transform, time)

/atom/proc/on_reagent_change()
return
Expand Down Expand Up @@ -702,7 +717,6 @@ Parameters are passed from New.
var/result = tgui_input_list(usr, "Choose the transformation to apply","Transform Mod", list("Scale","Translate","Rotate"))
if(!result)
return
var/matrix/M = transform
if(!result)
return
switch(result)
Expand All @@ -711,18 +725,21 @@ Parameters are passed from New.
var/y = tgui_input_real_number(usr, "Choose y mod","Transform Mod")
if(isnull(x) || isnull(y))
return
transform = M.Scale(x,y)
var/matrix/base_matrix = matrix(base_transform)
update_base_transform(base_matrix.Scale(x,y))
if("Translate")
var/x = tgui_input_real_number(usr, "Choose x mod (negative = left, positive = right)","Transform Mod")
var/y = tgui_input_real_number(usr, "Choose y mod (negative = down, positive = up)","Transform Mod")
if(isnull(x) || isnull(y))
return
transform = M.Translate(x,y)
var/matrix/base_matrix = matrix(base_transform)
update_base_transform(base_matrix.Translate(x,y))
if("Rotate")
var/angle = tgui_input_real_number(usr, "Choose angle to rotate","Transform Mod")
if(isnull(angle))
return
transform = M.Turn(angle)
var/matrix/base_matrix = matrix(base_transform)
update_base_transform(base_matrix.Turn(angle))

SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM)

Expand Down