Continued camera effects adding (zoom, shift)

Added trigger behaviour to ESCItem and removed ESCTriggerZone.
This commit is contained in:
Julian Murgia
2021-01-18 23:32:38 +01:00
parent ff56816205
commit 6890d927f5
24 changed files with 581 additions and 246 deletions

View File

@@ -25,8 +25,6 @@ func _enter_tree():
load("res://addons/escoria-core/game/core-scripts/escroom.gd"), null)
add_custom_type("ESCTerrain", "Navigation2D",
load("res://addons/escoria-core/game/core-scripts/escterrain.gd"), null)
add_custom_type("ESCTriggerZone", "Area2D",
load("res://addons/escoria-core/game/core-scripts/esctriggerzone.gd"), null)
set_escoria_main_settings()
set_escoria_debug_settings()
@@ -152,7 +150,6 @@ func _exit_tree():
remove_custom_type("ESCPlayer")
remove_custom_type("ESCRoom")
remove_custom_type("ESCTerrain")
remove_custom_type("ESCTriggerZone")
remove_autoloads()

View File

@@ -440,28 +440,19 @@ func register_object(name : String, val : Object, force : bool = false):
# Most objects have states/animations, but don't count on it
# if val.has_method("set_state"):
if val is ESCItem or val is ESCPlayer or val is ESCCharacter or val is ESCHotspot:
if val is ESCItem or val is ESCPlayer or val is ESCCharacter:
if name in states:
set_state(name, [states[name], true])
else:
set_state(name, [esctypes.OBJ_DEFAULT_STATE])
if val is ESCItem or val is ESCHotspot:
if val is ESCItem:
if val.is_interactive:
set_interactive(name, true)
# if val.has_method("set_active"):
# if name in actives:
# val.set_active(actives[name])
# if val.has_method("set_interactive"):
# if name in interactives:
# val.set_interactive(interactives[name])
if val.get("esc_script") != null and !val.get("esc_script").empty():
objects_events_table[name] = escoria.esc_compiler.load_esc_file(val.esc_script)
func get_object(name):
if !(name in objects):
@@ -588,11 +579,6 @@ func set_state(global_id : String, p_params : Array):
# animation_node = obj.get("animation")
if obj.get_animation_player() != null:
animation_node = obj.get_animation_player()
elif obj is ESCHotspot and obj.get_item_child_if_any() != null:
#if obj.get_item_child_if_any().get("animation") != null:
# animation_node = obj.get_item_child_if_any().animation
if obj.get_item_child_if_any().get_animation_player() != null:
animation_node = obj.get_item_child_if_any().get_animation_player()
if animation_node:
animation_node.stop()
@@ -614,7 +600,7 @@ func set_state(global_id : String, p_params : Array):
var animation = actual_animator.get_animation(p_params[0])
var animation_length = animation.length
animation_node.seek(animation_length)
print_debug("Item " + obj.global_id + " changed state to: " + p_params[0])
"""
When object is active, it is VISIBLE.

View File

@@ -156,10 +156,13 @@ camera_set_pos speed x y
Moves the camera to a position defined by "x" and "y", at the speed defined by
"speed" in pixels per second. If speed is 0, camera is teleported to the position.
"""
func camera_set_pos():
func camera_set_pos(command_params : Array):
# var speed = command_params[0]
# var x = command_params[1]
# var y = command_params[2]
# escoria.esc_runner.get_object("camera").set_pos(speed, x, y)
pass
"""
camera_set_target speed object [object2 object3 ...]
Configures the camera to follow 1 or more objects, using "speed" as speed limit.
@@ -180,8 +183,10 @@ the camera out, and smaller values zooms in, relative to the default value of 1.
An optional time in seconds controls how long it takes for the camera to zoom
into position.
"""
func camera_set_zoom():
pass
func camera_set_zoom(command_params : Array):
var zoom_level = command_params[0]
var speed = command_params[0] if command_params.size() > 1 else 0
escoria.esc_runner.get_object("camera").set_camera_zoom(zoom_level, speed)
"""
@@ -198,8 +203,12 @@ Shift camera by x and y pixels over time seconds.
- type is any of the Tween.TransitionType values without the prefix, eg. LINEAR,
QUART or CIRC; defaults to QUART.
"""
func camera_shift():
pass
func camera_shift(command_params : Array):
var x = command_params[0]
var y = command_params[1]
var time = command_params[2]
var type = command_params[3] if command_params.size() > 3 else "QUAD"
escoria.esc_runner.get_object("camera").shift(x, y, time, type)
"""

View File

@@ -20,10 +20,23 @@ var MovableScript = load("res://addons/escoria-core/game/core-scripts/behaviors/
export(String) var global_id
export(String, FILE, "*.esc") var esc_script
# If true, the ESC script may have an ":exit_scene" event to manage scene changes
export(bool) var is_exit
# is_trigger If true, object is considered as trigger. Allows using :trigger_in and
# :trigger_out verbs in ESC scripts.
export(bool) var is_trigger
export(String) var trigger_in_verb = "trigger_in"
export(String) var trigger_out_verb = "trigger_out"
# is_interactive : If true, object is not "focusable".
export(bool) var is_interactive = true
# player_orients_on_arrival : If true, player orients towards 'interaction_direction' as
# player character arrives.
export(bool) var player_orients_on_arrival = true
export(ESCPlayer.Directions) var interaction_direction
export(String) var tooltip_name
export(String) var default_action
@@ -97,6 +110,7 @@ var last_deg : int
var last_dir : int
func _ready():
assert(!global_id.empty())
# Adds movable behavior
Movable = Node.new()
@@ -120,11 +134,17 @@ func _ready():
if !Engine.is_editor_hint():
escoria.register_object(self)
connect("mouse_entered_item", escoria.inputs_manager, "_on_mouse_entered_item")
connect("mouse_exited_item", escoria.inputs_manager, "_on_mouse_exited_item")
connect("mouse_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_clicked_item")
connect("mouse_double_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_double_clicked_item")
connect("mouse_right_clicked_item", escoria.inputs_manager, "_on_mouse_right_clicked_item")
if !is_trigger:
connect("mouse_entered_item", escoria.inputs_manager, "_on_mouse_entered_item")
connect("mouse_exited_item", escoria.inputs_manager, "_on_mouse_exited_item")
connect("mouse_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_clicked_item")
connect("mouse_double_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_double_clicked_item")
connect("mouse_right_clicked_item", escoria.inputs_manager, "_on_mouse_right_clicked_item")
else:
connect("area_entered", self, "element_entered")
connect("area_exited", self, "element_exited")
connect("body_entered", self, "element_entered")
connect("body_exited", self, "element_exited")
if !is_exit:
last_scale = scale
@@ -184,12 +204,32 @@ func _on_mouse_exited():
################################################################################
# TRIGGER functions
func element_entered(body):
if body is ESCBackground or body.get_parent() is ESCBackground:
return
escoria.do("trigger_in", [global_id, body.global_id, trigger_in_verb])
func element_exited(body):
if body is ESCBackground or body.get_parent() is ESCBackground:
return
escoria.do("trigger_out", [global_id, body.global_id, trigger_out_verb])
################################################################################
# MOVING OBJECT functions
func teleport(target, angle : Object = null) -> void:
Movable.teleport(target, angle)
func walk_to(pos : Vector2, p_walk_context = null):
Movable.walk_to(pos, p_walk_context)
################################################################################
# TALKATIVE object functions
func start_talking():
# if animation_sprite.is_playing():

View File

@@ -2,30 +2,30 @@ tool
extends Area2D
class_name ESCTriggerZone
signal left_click_on_trigger
signal left_dblclick_on_trigger
signal right_click_on_trigger
signal mouse_enter_trigger
signal mouse_exit_trigger
func get_class():
return "ESCTriggerZone"
func mouse_enter():
emit_signal("mouse_enter_trigger", self)
func mouse_exit():
emit_signal("mouse_exit_trigger", self)
export(String) var global_id
export(String, FILE, "*.esc") var esc_script
func body_entered(body):
# if body is esc_type.PLAYER:
# if self.visible:
# run_event("enter")
pass
func body_exited(body):
# if body is esc_type.PLAYER:
# if self.visible:
# run_event("exit")
pass
func _ready():
assert(!global_id.empty())
escoria.register_object(self)
connect("area_entered", self, "element_entered")
connect("area_exited", self, "element_exited")
connect("body_entered", self, "element_entered")
connect("body_exited", self, "element_exited")
func element_entered(body):
if body is ESCBackground or body.get_parent() is ESCBackground:
return
escoria.do("trigger_in", [global_id, body.global_id])
func element_exited(body):
escoria.do("trigger_out", [global_id, body.global_id])

View File

@@ -87,7 +87,7 @@ func register_object(object : Object):
if object is ESCPlayer:
$esc_runner.register_object(object_id, object, true)
if object is ESCHotspot or object is Position2D:
if object is Position2D:
$esc_runner.register_object(object_id, object, true)
if object is ESCItem:
@@ -104,6 +104,9 @@ func register_object(object : Object):
if object is ESCInventory:
inventory = object
if object is ESCTriggerZone:
$esc_runner.register_object(object_id, object, true)
"""
@@ -154,17 +157,28 @@ func do(action : String, params : Array = []) -> void:
"item_left_click":
if params[0] is String:
printt("escoria.do : item_left_click on item ", params[0])
# call : ev_left_click_on_item()
ev_left_click_on_item($esc_runner.get_object(params[0]), params[1])
var item = $esc_runner.get_object(params[0])
ev_left_click_on_item(item, params[1])
"item_right_click":
if params[0] is String:
printt("escoria.do : item_right_click on item ", params[0])
# call : ev_left_click_on_item()
ev_left_click_on_item($esc_runner.get_object(params[0]), params[1], true)
"trigger_in":
var trigger_id = params[0]
var object_id = params[1]
var trigger_in_verb = params[2]
printt("escoria.do() : trigger_in ", trigger_id, " by ", object_id)
esc_runner.run_event(esc_runner.objects_events_table[trigger_id][trigger_in_verb])
"trigger_out":
var trigger_id = params[0]
var object_id = params[1]
var trigger_out_verb = params[2]
printt("escoria.do() : trigger_out ", trigger_id, " by ", object_id)
esc_runner.run_event(esc_runner.objects_events_table[trigger_id][trigger_out_verb])
_:
# $esc_runner.activate(action, params[0])
report_warnings("escoria.gd:do()", ["Action received:", action, "with params ", params])

View File

@@ -82,9 +82,7 @@ func set_current_scene(p_scene, run_events=true):
if "setup" in escoria.esc_runner.game:
escoria.esc_runner.run_event(escoria.esc_runner.game["setup"])
yield(escoria.esc_runner, "event_done")
# Because 1) changing a scene and 2) having a scene become ready
# both call `set_current_scene`, we don't want to duplicate thing
if not escoria.esc_runner.running_event:
escoria.esc_runner.run_game()
@@ -179,3 +177,5 @@ func check_game_scene_methods():
assert(current_scene.game.has_method("inventory_item_focused"))
assert(current_scene.game.has_method("inventory_item_unfocused"))
assert(current_scene.game.has_method("mousewheel_action"))

View File

@@ -15,6 +15,7 @@ var zoom_target
# This is needed to adjust dialog positions and such, see dialog_instance.gd
var zoom_transform
"""
Sets camera limits so it doesn't go out of the scene. If kwargs is null, default
limits are used. See Camera2D limits for more details.
@@ -65,6 +66,7 @@ func set_drag_margin_enabled(p_dm_h_enabled, p_dm_v_enabled):
self.drag_margin_h_enabled = p_dm_h_enabled
self.drag_margin_v_enabled = p_dm_v_enabled
func set_target(p_target, p_speed : float = 0.0):
speed = p_speed
target = p_target
@@ -157,16 +159,15 @@ func shift(p_x, p_y, p_time, p_type):
escoria.report_warnings("camera",
["Tween still active running camera_shift: " + tweenstat])
tween.emit_signal("tween_completed")
tween.interpolate_property(self, "global_position", self.global_position,
new_pos, time, tween.get(type), Tween.EASE_IN_OUT)
new_pos, float(time), tween.get(type), Tween.EASE_IN_OUT)
tween.start()
func target_reached(_obj=null, _key=null):
func target_reached():
tween.stop_all()
func _process(_delta):
zoom_transform = self.get_canvas_transform()

View File

@@ -13,14 +13,13 @@ var waiting_for_target2 = false
func _ready():
escoria.esc_runner.connect("action_changed", self, "on_action_selected")
escoria.inputs_manager.connect("element_focused", self, "on_element_focused")
func on_action_selected() -> void:
current_action = escoria.esc_runner.current_action
update_tooltip_text()
func on_element_focused(element_id : String) -> void:
func element_focused(element_id : String) -> void:
printt("action_target_tooltip.gd:on_element_focused()", "Element focused: ", element_id)
if element_id == "":

View File

@@ -0,0 +1,103 @@
[gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room3/smoke.png" type="Texture" id=2]
[sub_resource type="Gradient" id=1]
offsets = PoolRealArray( 0, 0.830189 )
colors = PoolColorArray( 1, 1, 1, 1, 0.353516, 0.353516, 0.353516, 1 )
[sub_resource type="GradientTexture" id=2]
gradient = SubResource( 1 )
[sub_resource type="Curve" id=3]
_data = [ Vector2( 0, 0.0886364 ), 0.0, 0.0, 0, 0, Vector2( 0.612766, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.770213, 0.95 ), -1.55372, -1.55372, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
[sub_resource type="CurveTexture" id=4]
curve = SubResource( 3 )
[sub_resource type="ParticlesMaterial" id=5]
lifetime_randomness = 0.2
emission_shape = 1
emission_sphere_radius = 1.0
flag_disable_z = true
gravity = Vector3( 0, -9.81, 0 )
angular_velocity = 14.47
orbit_velocity = 0.0
orbit_velocity_random = 1.0
radial_accel = 3.97
radial_accel_random = 0.63
angle = 160.0
angle_random = 1.0
scale = 0.5
scale_random = 0.45
scale_curve = SubResource( 4 )
color_ramp = SubResource( 2 )
[sub_resource type="Animation" id=6]
resource_name = "button_broken"
tracks/0/type = "value"
tracks/0/path = NodePath("Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
[sub_resource type="Animation" id=7]
resource_name = "button_repaired"
tracks/0/type = "value"
tracks/0/path = NodePath("Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ false ]
}
[node name="button" type="Area2D"]
script = ExtResource( 1 )
global_id = "r3_button"
esc_script = "res://game/rooms/room3/esc/button.esc"
tooltip_name = "Button"
default_action = "use"
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 0, 0 )
}
[node name="lines" type="Line2D" parent="."]
position = Vector2( 0, -266.591 )
points = PoolVector2Array( 322.305, 390.985, 322.305, 439.068, 368.698, 440.037, 368.974, 392.399, 319.028, 391.549 )
[node name="Polygon2D" type="Polygon2D" parent="lines"]
visible = false
polygon = PoolVector2Array( 343.993, 396.767, 323.298, 415.689, 344.585, 438.158, 365.872, 417.463 )
[node name="Particles2D" type="Particles2D" parent="."]
position = Vector2( 344.768, 142.144 )
amount = 16
lifetime = 4.0
preprocess = 1.99
speed_scale = 1.39
process_material = SubResource( 5 )
texture = ExtResource( 2 )
__meta__ = {
"_editor_description_": ""
}
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/button_broken = SubResource( 6 )
anims/button_repaired = SubResource( 7 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PoolVector2Array( 319.633, 122.126, 320.427, 177.685, 371.224, 176.098, 372.811, 121.332 )

View File

@@ -1,70 +1,7 @@
[gd_scene load_steps=12 format=2]
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escbackground.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room2/bridge.tscn" type="PackedScene" id=2]
[ext_resource path="res://game/rooms/room3/smoke.png" type="Texture" id=3]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=4]
[sub_resource type="Gradient" id=1]
offsets = PoolRealArray( 0, 0.830189 )
colors = PoolColorArray( 1, 1, 1, 1, 0.353516, 0.353516, 0.353516, 1 )
[sub_resource type="GradientTexture" id=2]
gradient = SubResource( 1 )
[sub_resource type="Curve" id=3]
_data = [ Vector2( 0, 0.0886364 ), 0.0, 0.0, 0, 0, Vector2( 0.612766, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.770213, 0.95 ), -1.55372, -1.55372, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
[sub_resource type="CurveTexture" id=4]
curve = SubResource( 3 )
[sub_resource type="ParticlesMaterial" id=5]
lifetime_randomness = 0.2
emission_shape = 1
emission_sphere_radius = 1.0
flag_disable_z = true
gravity = Vector3( 0, -9.81, 0 )
angular_velocity = 14.47
orbit_velocity = 0.0
orbit_velocity_random = 1.0
radial_accel = 3.97
radial_accel_random = 0.63
angle = 160.0
angle_random = 1.0
scale = 0.5
scale_random = 0.45
scale_curve = SubResource( 4 )
color_ramp = SubResource( 2 )
[sub_resource type="Animation" id=6]
resource_name = "button_broken"
tracks/0/type = "value"
tracks/0/path = NodePath("Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
[sub_resource type="Animation" id=7]
resource_name = "button_repaired"
tracks/0/type = "value"
tracks/0/path = NodePath("Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ false ]
}
[node name="background" type="TextureRect"]
margin_right = 1300.0
@@ -96,44 +33,3 @@ global_id = "r3_bridge"
interact_positions = {
"default": Vector2( 0, 0 )
}
[node name="button" type="Area2D" parent="."]
script = ExtResource( 4 )
global_id = "r3_button"
esc_script = "res://game/rooms/room3/esc/button.esc"
tooltip_name = "Button"
default_action = "use"
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 347.767, 378.011 )
}
[node name="lines" type="Line2D" parent="button"]
position = Vector2( 0, -266.591 )
points = PoolVector2Array( 322.305, 390.985, 322.305, 439.068, 368.698, 440.037, 368.974, 392.399, 319.028, 391.549 )
[node name="Polygon2D" type="Polygon2D" parent="button/lines"]
visible = false
polygon = PoolVector2Array( 343.993, 396.767, 323.298, 415.689, 344.585, 438.158, 365.872, 417.463 )
[node name="Particles2D" type="Particles2D" parent="button"]
position = Vector2( 344.768, 142.144 )
amount = 16
lifetime = 4.0
preprocess = 1.99
speed_scale = 1.39
process_material = SubResource( 5 )
texture = ExtResource( 3 )
__meta__ = {
"_editor_description_": ""
}
[node name="AnimationPlayer" type="AnimationPlayer" parent="button"]
anims/button_broken = SubResource( 6 )
anims/button_repaired = SubResource( 7 )
[node name="interact_pos" type="Position2D" parent="button"]
position = Vector2( 347.767, 378.011 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="button"]
polygon = PoolVector2Array( 319.633, 122.126, 320.427, 177.685, 371.224, 176.098, 372.811, 121.332 )

View File

@@ -1,59 +0,0 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 28.6442, 23.5021 )
[sub_resource type="Animation" id=2]
resource_name = "button_broken"
tracks/0/type = "value"
tracks/0/path = NodePath("../../background/button/Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
[sub_resource type="Animation" id=3]
resource_name = "button_repaired"
tracks/0/type = "value"
tracks/0/path = NodePath("../../background/button/Particles2D:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ false ]
}
[node name="button" type="Area2D"]
position = Vector2( 346.18, 151.013 )
script = ExtResource( 1 )
__meta__ = {
"_editor_description_": ""
}
global_id = "button"
esc_script = "res://game/rooms/room3/esc/button.esc"
tooltip_name = "Button"
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 346.18, 151.013 )
}
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource( 1 )
[node name="Position2D" type="Position2D" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/button_broken = SubResource( 2 )
anims/button_repaired = SubResource( 3 )

View File

@@ -1,3 +1,7 @@
:ready
set_state r3_button button_broken
:look
say player "That button must activate the bridge, but it is broken." [button_broken]
say player "It should work now." [!button_broken]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=7 format=2]
[gd_scene load_steps=8 format=2]
[ext_resource path="res://game/rooms/room3/walkable_area.tscn" type="PackedScene" id=1]
[ext_resource path="res://game/rooms/room3/background.tscn" type="PackedScene" id=2]
@@ -6,6 +6,7 @@
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=5]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escroom.gd" type="Script" id=6]
[ext_resource path="res://game/items/escitems/button.tscn" type="PackedScene" id=7]
[node name="room3" type="Node2D"]
script = ExtResource( 6 )
@@ -90,5 +91,16 @@ polygon = PoolVector2Array( -2.71457, 437.818, 6.6293, 121.462, 89.3893, 74.7422
[node name="Position2D" type="Position2D" parent="Hotspots/l_door"]
position = Vector2( 44.1375, 384.691 )
[node name="button" parent="Hotspots" instance=ExtResource( 7 )]
interact_positions = {
"default": Vector2( 347.767, 378.011 )
}
[node name="Position2D" type="Position2D" parent="Hotspots/button"]
position = Vector2( 347.767, 378.011 )
__meta__ = {
"_editor_description_": ""
}
[node name="player_start" type="Position2D" parent="."]
position = Vector2( 63.3074, 444.653 )

View File

@@ -0,0 +1,7 @@
:look
say player "That button makes the camera target me."
:use
camera_set_limits 0
camera_set_target 0 player

View File

@@ -0,0 +1,7 @@
:look
say player "That button triggers a camera push effect."
:use
camera_push r7_object2 1 LINEAR
wait 3
camera_push player 1 LINEAR

View File

@@ -0,0 +1,7 @@
:look
say player "That button triggers a camera shift effect."
:use
camera_shift 700 0 5 LINEAR
wait 1

View File

@@ -0,0 +1,10 @@
:look
say player "That button triggers a camera zoom effect."
:use
camera_set_zoom 1.3 2
wait 3
camera_set_zoom 0.5 2
wait 3
camera_set_zoom 1 0

View File

@@ -1,4 +1,8 @@
# :SETUP is called EVERY TIME the room is loaded
# :READY is called only the FIRST TIME the room is loaded
:setup
set_state r7_button_push button_repaired
> [eq ESC_LAST_SCENE room6]
teleport player r7_l_exit
# Set player look right
@@ -8,13 +12,13 @@
teleport player player_start
stop
:ready
camera_push player 0 LINEAR
camera_push r7_object2 1 LINEAR
wait 3
camera_push player 1 LINEAR
#camera_push player 0 LINEAR
#camera_push r7_object2 1 LINEAR
#wait 3
#camera_push player 1 LINEAR
#camera_set_drag_margin_enabled bool bool
#camera_set_pos real int int

View File

@@ -0,0 +1,4 @@
:trigger_in
set_state r7_light_left red
:trigger_out

View File

@@ -0,0 +1,5 @@
:trigger_in
set_state r7_light_right green
:trigger_out
set_state r7_light_right red

View File

@@ -1,7 +1,8 @@
[gd_scene load_steps=9 format=2]
[gd_scene load_steps=16 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escterrain.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room7/background.tscn" type="PackedScene" id=2]
[ext_resource path="res://game/items/escitems/button.tscn" type="PackedScene" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://game/ui/commons/fonts/caslonantique.tres" type="DynamicFont" id=5]
[ext_resource path="res://addons/escoria-core/game/core-scripts/escroom.gd" type="Script" id=6]
@@ -17,6 +18,72 @@ vertices = PoolVector2Array( 2031.55, -451.45, 135.719, -939.662, 287.172, -941.
polygons = [ PoolIntArray( 0, 1, 2, 3, 4 ), PoolIntArray( 5, 4, 3 ), PoolIntArray( 5, 3, 6, 7, 8 ) ]
outlines = [ PoolVector2Array( 2027.99, -629.63, 1390.1, -752.574, 1448.12, -803.5, 1425.74, -843.446, 1343.78, -834.537, 1235.09, -777.519, 287.172, -941.444, 135.719, -939.662, 2031.55, -451.45 ) ]
[sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 79.0288, 129.758 )
[sub_resource type="CircleShape2D" id=4]
radius = 35.4361
[sub_resource type="Animation" id=5]
resource_name = "green"
tracks/0/type = "value"
tracks/0/path = NodePath("Polygon2D:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 0.0313726, 0.996078, 0, 1 ) ]
}
[sub_resource type="Animation" id=9]
resource_name = "red"
tracks/0/type = "value"
tracks/0/path = NodePath("Polygon2D:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 0, 0, 1 ) ]
}
[sub_resource type="Animation" id=7]
resource_name = "green"
tracks/0/type = "value"
tracks/0/path = NodePath("Polygon2D:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 0.0313726, 0.996078, 0, 1 ) ]
}
[sub_resource type="Animation" id=10]
resource_name = "red"
tracks/0/type = "value"
tracks/0/path = NodePath("Polygon2D:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 0, 0, 1 ) ]
}
[node name="room7" type="Node2D"]
script = ExtResource( 6 )
__meta__ = {
@@ -37,6 +104,9 @@ margin_right = 40.0
margin_bottom = 14.0
custom_fonts/font = ExtResource( 5 )
text = "ROOM 7 - upstairs"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label_2" type="Label" parent="background"]
margin_top = 1354.53
@@ -111,8 +181,25 @@ __meta__ = {
"_editor_description_": ""
}
[node name="object_1" type="Area2D" parent="Hotspots"]
position = Vector2( 358.099, -1195.07 )
script = ExtResource( 7 )
global_id = "r7_object_1"
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 818.94, 320.88 )
}
[node name="Line2D" type="Line2D" parent="Hotspots/object_1"]
position = Vector2( 0, 1345.52 )
points = PoolVector2Array( 398.738, 142.591, 518.947, 64.809, 516.118, 275.527 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/object_1"]
position = Vector2( 460.841, 1515.95 )
shape = SubResource( 3 )
[node name="object2" type="Area2D" parent="Hotspots"]
position = Vector2( 1600.63, 1358.99 )
position = Vector2( 1770.63, 1358.99 )
script = ExtResource( 7 )
__meta__ = {
"_editor_description_": ""
@@ -156,6 +243,10 @@ global_id = "r7_upper_stairs"
esc_script = "res://game/rooms/room7/esc/upper_stairs.esc"
is_exit = true
tooltip_name = "Stairs"
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 1375.17, 604.793 )
}
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/upper_stairs"]
position = Vector2( -1334.92, 936.565 )
@@ -164,9 +255,197 @@ polygon = PoolVector2Array( 1221.86, -804.627, 1220.52, -1158.36, 1450.46, -1134
[node name="Position2D" type="Position2D" parent="Hotspots/upper_stairs"]
position = Vector2( 27.5337, 131.767 )
[node name="object_1" type="Line2D" parent="Hotspots"]
position = Vector2( 0, 1345.52 )
points = PoolVector2Array( 398.738, 142.591, 518.947, 64.809, 516.118, 275.527 )
[node name="button_camera_push" parent="Hotspots" instance=ExtResource( 3 )]
position = Vector2( -167.43, 1463.23 )
global_id = "r7_button_push"
esc_script = "res://game/rooms/room7/esc/button_push.esc"
interact_positions = {
"default": Vector2( 279.618, 1763.84 )
}
[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_push"]
position = Vector2( 343.048, 300.613 )
__meta__ = {
"_editor_description_": ""
}
[node name="Label" type="Label" parent="Hotspots/button_camera_push"]
margin_left = 304.871
margin_top = 97.219
margin_right = 384.871
margin_bottom = 113.219
custom_fonts/font = ExtResource( 5 )
text = "Camera_push"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="button_camera_shift" parent="Hotspots" instance=ExtResource( 3 )]
position = Vector2( 9.393, 1464.03 )
global_id = "r7_button_push"
esc_script = "res://game/rooms/room7/esc/button_shift.esc"
interact_positions = {
"default": Vector2( 463.651, 1765.65 )
}
[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_shift"]
position = Vector2( 350.258, 301.616 )
[node name="Label" type="Label" parent="Hotspots/button_camera_shift"]
margin_left = 305.626
margin_top = 97.515
margin_right = 387.626
margin_bottom = 113.515
custom_fonts/font = ExtResource( 5 )
text = "Camera_shift"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="button_camera_follow" parent="Hotspots" instance=ExtResource( 3 )]
position = Vector2( 172.527, 1464.03 )
global_id = "r7_button_follow"
esc_script = "res://game/rooms/room7/esc/button_follow.esc"
interact_positions = {
"default": Vector2( 463.651, 1765.65 )
}
[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_follow"]
position = Vector2( 350.258, 301.616 )
[node name="Label" type="Label" parent="Hotspots/button_camera_follow"]
margin_left = 305.626
margin_top = 97.515
margin_right = 387.626
margin_bottom = 113.515
custom_fonts/font = ExtResource( 5 )
text = "Camera_follow"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="button_camera_zoom" parent="Hotspots" instance=ExtResource( 3 )]
position = Vector2( 332.527, 1464.03 )
global_id = "r7_button_zoom"
esc_script = "res://game/rooms/room7/esc/button_zoom.esc"
interact_positions = {
"default": Vector2( 522.785, 1765.65 )
}
[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_zoom"]
position = Vector2( 350.258, 301.616 )
[node name="Label" type="Label" parent="Hotspots/button_camera_zoom"]
margin_left = 305.626
margin_top = 97.515
margin_right = 387.626
margin_bottom = 113.515
custom_fonts/font = ExtResource( 5 )
text = "Camera_zoom"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="trigger_left" type="Area2D" parent="Hotspots"]
position = Vector2( 406, 0 )
script = ExtResource( 7 )
global_id = "trigger_left"
esc_script = "res://game/rooms/room7/esc/trigger_left.esc"
is_trigger = true
is_interactive = false
player_orients_on_arrival = false
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": null
}
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/trigger_left"]
polygon = PoolVector2Array( 724.356, 1944.36, 716.865, 1752.57, 800.77, 1752.57, 814.254, 1942.86 )
[node name="Label" type="Label" parent="Hotspots/trigger_left"]
margin_left = 672.764
margin_top = 1705.64
margin_right = 812.764
margin_bottom = 1740.64
custom_fonts/font = ExtResource( 5 )
text = "This trigger is activated
once if player walks on it"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="trigger_right" type="Area2D" parent="Hotspots"]
position = Vector2( 220, 0 )
script = ExtResource( 7 )
global_id = "trigger_right"
esc_script = "res://game/rooms/room7/esc/trigger_right.esc"
is_trigger = true
is_interactive = false
player_orients_on_arrival = false
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": null
}
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/trigger_right"]
position = Vector2( 372.68, 4.12805 )
polygon = PoolVector2Array( 724.356, 1944.36, 716.865, 1752.57, 800.77, 1752.57, 814.254, 1942.86 )
[node name="Label" type="Label" parent="Hotspots/trigger_right"]
margin_left = 1068.46
margin_top = 1707.64
margin_right = 1218.46
margin_bottom = 1742.64
custom_fonts/font = ExtResource( 5 )
text = "This trigger activates when
player walks in AND out"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="light_left" type="Area2D" parent="Hotspots"]
position = Vector2( 412, 0 )
script = ExtResource( 7 )
global_id = "r7_light_left"
is_interactive = false
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": null
}
[node name="Polygon2D" type="Polygon2D" parent="Hotspots/light_left"]
color = Color( 0.0313726, 0.996078, 0, 1 )
polygon = PoolVector2Array( 718.946, 1494.91, 709.047, 1518.24, 717.885, 1540.16, 740.837, 1551.8, 764.908, 1541.57, 774.1, 1519.65, 763.847, 1494.2, 742.336, 1484.38 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/light_left"]
position = Vector2( 742.194, 1518.8 )
shape = SubResource( 4 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/light_left"]
anims/green = SubResource( 5 )
anims/red = SubResource( 9 )
[node name="light_right" type="Area2D" parent="Hotspots"]
position = Vector2( 613.333, -1.13 )
script = ExtResource( 7 )
global_id = "r7_light_right"
is_interactive = false
dialog_color = Color( 1, 1, 1, 1 )
interact_positions = {
"default": Vector2( 742.194, 1518.8 )
}
[node name="Polygon2D" type="Polygon2D" parent="Hotspots/light_right"]
color = Color( 1, 0, 0, 1 )
polygon = PoolVector2Array( 718.946, 1494.91, 709.047, 1518.24, 717.885, 1540.16, 740.837, 1551.8, 764.908, 1541.57, 774.1, 1519.65, 763.847, 1494.2, 742.336, 1484.38 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/light_right"]
position = Vector2( 742.194, 1518.8 )
shape = SubResource( 4 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/light_right"]
anims/green = SubResource( 7 )
anims/red = SubResource( 10 )
[node name="player_start" type="Position2D" parent="."]
position = Vector2( 76.7617, 1847.24 )

View File

@@ -16,9 +16,9 @@
#change_scene res://game/rooms/room5/room5.tscn
# 6/ character room
change_scene res://game/rooms/room6/room6.tscn
#change_scene res://game/rooms/room6/room6.tscn
# 7/ long room with camera shift to object 2 if look on object 1
# and stairs with camera shift too
#change_scene res://game/rooms/room7/room7.tscn
change_scene res://game/rooms/room7/room7.tscn

View File

@@ -14,7 +14,17 @@ Implement methods to react to inputs.
- right_click_on_item(item_global_id : String, event : InputEvent)
- left_double_click_on_item(item_global_id : String, event : InputEvent)
- left_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent)
- right_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent)
- left_double_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent)
- inventory_item_focused(inventory_item_global_id : String)
- inventory_item_unfocused()
- open_inventory()
- close_inventory()
- mousewheel_action(direction : int)
"""
signal element_focused(element_global_id)
@@ -40,7 +50,7 @@ func left_double_click_on_bg(position : Vector2) -> void:
escoria.do("walk", ["player", position, true])
## ITEM/HOTSPOT FOCUS ##
## ITEM FOCUS ##
func element_focused(element_id : String) -> void:
#emit_signal("element_focused", element_id)