You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.1 KiB
71 lines
2.1 KiB
6 months ago
|
@tool
|
||
|
extends DialogicPortrait
|
||
|
|
||
|
enum Faces {BASED_ON_PORTRAIT_NAME, NEUTRAL, HAPPY, SAD, JOY, SHOCK, ANGRY}
|
||
|
|
||
|
@export var emotion : Faces = Faces.BASED_ON_PORTRAIT_NAME
|
||
|
@export var portrait_width: int
|
||
|
@export var portrait_height: int
|
||
|
@export var alien := true
|
||
|
|
||
|
var does_custom_portrait_change := true
|
||
|
|
||
|
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:
|
||
|
return true
|
||
|
|
||
|
|
||
|
# If the custom portrait accepts a change, then accept it here
|
||
|
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()
|
||
|
elif emotion == Faces.JOY: $Faces/Joy.show()
|
||
|
elif emotion == Faces.SHOCK: $Faces/Shock.show()
|
||
|
elif emotion == Faces.ANGRY: $Faces/Anger.show()
|
||
|
else: $Faces/Neutral.show()
|
||
|
|
||
|
$Alien.visible = alien
|
||
|
|
||
|
|
||
|
func _set_mirror(is_mirrored: bool) -> void:
|
||
|
if is_mirrored:
|
||
|
self.scale.x = -1
|
||
|
|
||
|
else:
|
||
|
self.scale.x = 1
|
||
|
|
||
|
|
||
|
## If implemented, this is used by the editor for the "full view" mode
|
||
|
func _get_covered_rect() -> Rect2:
|
||
|
# 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)
|