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

Extend DialogicPortrait by custom portraits. #2020

Merged
merged 4 commits into from
Jan 18, 2024
Merged
Changes from 1 commit
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,43 @@ extends DialogicPortrait

enum Faces {BASED_ON_PORTRAIT_NAME, NEUTRAL, HAPPY, SAD, JOY, SHOCK, ANGRY}

var portrait

@export var emotion : Faces = Faces.BASED_ON_PORTRAIT_NAME
@export var portrait_width: int
@export var portrait_height: int
@export var alien = true
@export var alien := true

var does_custom_portrait_change = true
var does_custom_portrait_change := true

func _ready():
func _ready() -> void:
$Alien.hide()


# Function to accept and use the extra data, if the custom portrait wants to accept it
func _set_extra_data(data: String) -> void:
if data == "alien":
$Alien.show()
elif data == "no_alien":
$Alien.hide()


# This function can be overridden. Defaults to true, if not overridden!
func _should_do_portrait_update(character:DialogicCharacter, portrait:String) -> bool:
func _should_do_portrait_update(_character: DialogicCharacter, _portrait:String) -> bool:
return true


# If the custom portrait accepts a change, then accept it here
func _update_portrait(passed_character:DialogicCharacter, passed_portrait:String) -> void:
func _update_portrait(_passed_character: DialogicCharacter, passed_portrait: String) -> void:
for face in $Faces.get_children():
face.hide()

if emotion == Faces.BASED_ON_PORTRAIT_NAME:
if 'happy' in passed_portrait.to_lower(): $Faces/Smile.show()
elif 'sad' in passed_portrait.to_lower(): $Faces/Frown.show()
elif 'joy' in passed_portrait.to_lower(): $Faces/Joy.show()
elif 'shock' in passed_portrait.to_lower(): $Faces/Shock.show()
elif 'angry' in passed_portrait.to_lower(): $Faces/Anger.show()
else: $Faces/Neutral.show()

else:
if emotion == Faces.HAPPY: $Faces/Smile.show()
elif emotion == Faces.SAD: $Faces/Frown.show()
Expand All @@ -47,10 +50,23 @@ func _update_portrait(passed_character:DialogicCharacter, passed_portrait:String

$Alien.visible = alien

func _set_mirror(mirror:bool) -> void:
if mirror: scale.x *= -1

# if implemented, this is used by the editor for the "full view" mode
func _set_mirror(is_mirrored: bool) -> void:
var nd: Node2D = get_parent().get_child(0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should work by just accessing the scale as self.scale instead of this workaround.


if is_mirrored:
nd.scale.x = -1

else:
nd.scale.x = 1


## If implemented, this is used by the editor for the "full view" mode
func _get_covered_rect() -> Rect2:
#return Rect2($Faces/Anger.position+$Faces.position, $Faces/Anger.get_rect().size*$Faces/Anger.scale*$Faces.scale) # will fcus on the face
return Rect2($Body.position, $Body.get_rect().size*$Body.scale)
# This will focus on the face.
# return Rect2($Faces/Anger.position+$Faces.position, $Faces/Anger.get_rect().size*$Faces/Anger.scale*$Faces.scale)
var size: Vector2 = $Body.get_rect().size
var scaled_size: Vector2 = size * $Body.scale
var position: Vector2 = $Body.position

return Rect2(position, scaled_size)
Loading