Ver código fonte

Rewrote the shift_mood() function. It should be easier to switch between moods based on player action/inaction.

master
Bryan Miller 4 anos atrás
pai
commit
edecf1e54e
1 arquivos alterados com 46 adições e 69 exclusões
  1. +46
    -69
      Data/Scripts/Mood.gd

+ 46
- 69
Data/Scripts/Mood.gd Ver arquivo

@@ -58,78 +58,55 @@ func get_contentment():
return _mood.b

func get_comfort_distance():
return get_parent().get_node("CollisionShape2D").shape.radius * 1.1
return get_parent().get_node("CollisionShape2D").shape.radius * 2.1

func get_mood_color():
return _mood

func shift_mood(delta, in_air, speed, distance):
var nr = 0.0
var ng = 0.0
var nb = 0.0
if in_air:
if speed >= EXCITEMENT_MIN_SPEED:
if speed >= EXCITEMENT_MAX_SPEED:
nr += 0.1
else:
nr += 0.05
else:
nr -= 0.1
nb += 0.05
# first handle red (aggression)
if _mood.r > 0:
if _mood.b > 0.0:
if _mood.b >= _mood.r * 0.5:
nr += -0.1
if _mood.b < _mood.r * 0.5:
nr += -0.05
if _mood.r > _mood.b:
nr += 0.05
nr *= delta
# Then handle green <neediness>
# green <neediness> is based on how far the mouse is from the player. The greater the distance
# the more <neediness> grows. This can be affected by <contentment> and <aggression> as well.
var cdist = get_comfort_distance()
if not in_air:
if is_content():
if distance <= cdist:
ng += -0.1
elif distance < (cdist * 0.5):
ng += -0.05
elif is_needie():
if distance <= cdist:
ng += -0.05
elif distance >= (cdist * 0.5):
ng += 0.1
else:
ng += 0.05
elif is_aggressive():
# If player is <aggressive>, then neediness is kinda forgotten about.
if _mood.r > 0.25 and _mood.r < 0.5:
ng += -0.05
elif _mood.r >= 0.5:
ng += -0.15
else:
if distance > cdist:
ng += 0.05
ng *= delta
func _agg_shift(in_air, speed):
var v = -0.1 # By default, aggression is always lowering
# Finally handle blue <contentment>
# If red <aggression> is half as high or more than blue <contentment>, then contentment goes down.
if _mood.r >= _mood.b * 0.5:
nb += -0.1
elif _mood.g > 0.0:
nb += -0.025
if distance < cdist:
nb += 0.015
if in_air and speed >= EXCITEMENT_MIN_SPEED and speed <= EXCITEMENT_MAX_SPEED:
v = 0.1 # If in the air, going at an "exciting" speed, aggression rises!
elif is_aggressive():
v = -0.05 # Otherwise, if we're dominantly aggressive, slow aggression cooldown.
if _mood.r * 0.5 > _mood.b and _mood.r * 0.5 > _mood.g:
v = 0.0 # But, if our aggression is more than twice the other emotions, don't cooldown at all.
return v

func _need_shift(in_air, distance):
var v = -0.1
if in_air or is_aggressive():
# Decrease neediness faster while in air, as "player" is giving attension (in the air) or
# otherwise excited!!
v = -0.25
else:
nb += -0.1
nb *= delta
# Finalize changes!
adjust_mood(nr, ng, nb)
var cdist = get_comfort_distance()
if distance > cdist:
v = 0.1
if distance > cdist * 8.0:
v = 0.25
return v

func _con_shift(in_air, speed, distance):
var v = -0.1
if in_air and speed < EXCITEMENT_MIN_SPEED:
v = 0.1
if is_aggressive(): # Assuming aggression hasn't taken over...
v = 0.05 # Levitating in the air is nice!
else:
var cdist = get_comfort_distance()
if distance <= cdist:
v = 0.1 # It's nice when the player is nearby
if is_needie():
v = 0.05 # My neediness is slowing my contentment.
elif is_aggressive():
v = -0.25 # If aggressive, reduce contentment a lot.
return v

func shift_mood(delta, in_air, speed, distance):
adjust_mood(
_agg_shift(in_air, speed) * delta,
_need_shift(in_air, distance) * delta,
_con_shift(in_air, speed, distance) * delta
)

Carregando…
Cancelar
Salvar