Skip to content

Commit

Permalink
/tg/ Status Effects Prelude B - Fixed VV Transform Stacking (#4870)
Browse files Browse the repository at this point in the history
# About the pull request

<!-- Remove this text and explain what the purpose of your PR is.

Mention if you have tested your changes. If you changed a map, make sure
you used the mapmerge tool.
If this is an Issue Correction, you can type "Fixes Issue #169420" to
link the PR to the corresponding Issue number #169420.

Remember: something that is self-evident to you might not be to others.
Explain your rationale fully, even if you feel it goes without saying.
-->

As part of #4828 

Fixes usage of Admin VV Transform edition resetting ongoing codewise
transforms such as lying down

Also adds support for animated transform changes


# Changelog
:cl:
admin: VV "Update Transform" will now properly compound with other
sources of transform (eg. lying down)
/:cl:
  • Loading branch information
fira committed Nov 8, 2023
1 parent fd2a58e commit 3178fa2
Showing 1 changed file with 30 additions and 13 deletions.
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

0 comments on commit 3178fa2

Please sign in to comment.