player can now collect crystals and win the game

This commit is contained in:
SyntaX 2019-11-23 15:37:52 +01:00
parent 108c5bd67c
commit 31c7af0d71
6 changed files with 49 additions and 30 deletions

View File

@ -2,7 +2,4 @@ extends Spatial
func _ready():
Collector.addCollectible(self)
#TODO: handle collisions
Collector.addCollectible(self)

View File

@ -2,19 +2,19 @@
[ext_resource path="res://Level/Objects/Crystal.gd" type="Script" id=1]
[sub_resource type="CapsuleMesh" id=1]
[sub_resource type="CapsuleShape" id=2]
[sub_resource type="CapsuleMesh" id=1]
[node name="Crystal" type="Spatial"]
transform = Transform( 1, 0, 0, 0, -4.37114e-008, -1, 0, 1, -4.37114e-008, 0, 2, 0 )
script = ExtResource( 1 )
[node name="MeshInstance" type="MeshInstance" parent="."]
[node name="CrystalBody" type="StaticBody" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="CrystalBody"]
shape = SubResource( 2 )
[node name="MeshInstance" type="MeshInstance" parent="CrystalBody"]
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
shape = SubResource( 2 )

View File

@ -2,10 +2,9 @@ extends KinematicBody
# export variables
export(NodePath) var body_nodepath
#export(NodePath) var lookingAt_nodepath
export(NodePath) var camera_nodepath
export(NodePath) var animation_nodepath
export(NodePath) var ui_nodepath
export(NodePath) var camera_nodepath
# const
const GRAVITY = -24.8
@ -20,7 +19,6 @@ const INTERACT_DISTANCE = 4
# private members
var _body: Spatial
var _camera: Camera
#var _lookCast: RayCast
var _animation: AnimationPlayer
var _interface: Control
var _dir = Vector3();
@ -39,22 +37,23 @@ func _ready():
_animation = get_node(animation_nodepath) as AnimationPlayer
assert(null != _animation)
# Setup mouse look
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
#_lookCast = get_node(lookingAt_nodepath) as RayCast
#_lookCast.cast_to = Vector3(0, 0, INTERACT_DISTANCE)
_interface = get_node(ui_nodepath) as Control
assert(null != _interface)
# Setup mouse look
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _physics_process(delta):
_process_input()
_process_movement(delta)
_process_collision()
func _process(_delta):
_process_animations()
func _process_input():
# Walking
var input_movement_vector = Vector2()
@ -75,7 +74,6 @@ func _process_input():
# jumping
if Input.is_action_just_pressed("move_jump") and is_on_floor():
Logger.info("current collection count: " + String(Collector.getCount()))
_vel.y = JUMP_SPEED
# sprinting
@ -99,6 +97,20 @@ func _process_animations():
_animation.playback_speed = _vel.length() / MOVE_SPEED
func _process_collision():
var collCount = get_slide_count()
if collCount > 0:
#Logger.debug("Collide count: ", collCount)
for i in collCount:
var collision = get_slide_collision(i)
#Logger.debug("Collided with: ", collision.collider.name)
#TODO: replace with groups
if collision.collider.name == "CrystalBody":
#Logger.debug("removing crystal...")
collision.collider.queue_free()
_interface.increaseScore()
func _input(event):
# capture mouse movement
if event is InputEventMouseMotion:

View File

@ -45,9 +45,9 @@ tracks/1/keys = {
[node name="Player" type="KinematicBody"]
script = ExtResource( 1 )
body_nodepath = NodePath("Body")
camera_nodepath = NodePath("Camera")
animation_nodepath = NodePath("WalkAnimationPlayer")
ui_nodepath = NodePath("HUD")
camera_nodepath = NodePath("Camera")
[node name="Body" type="Spatial" parent="."]
@ -73,6 +73,7 @@ pitch_scale = 1.5
[node name="HUD" parent="." instance=ExtResource( 4 )]
script = ExtResource( 5 )
label_nodepath = NodePath("LabelScore")
[node name="LabelScore" type="Label" parent="HUD"]
margin_left = 15.0

View File

@ -1,13 +1,21 @@
extends Control
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
export(NodePath) var label_nodepath
const SCORE = 100
var _labelScore: Label
var _score: int = 0
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
_labelScore = get_node(label_nodepath) as Label
assert(null != _labelScore)
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass
func increaseScore():
_score += SCORE
_labelScore.text = "Score: " + String(_score)
if (_score / SCORE == Collector.getCount()):
Logger.info("YOU WON!")

View File

@ -5,6 +5,7 @@ var _collectibles: Array
func addCollectible (coll):
Logger.info("appending new collectible: " + String(coll.get_instance_id()))
Logger.info("current collection count: " + String(Collector.getCount()))
_collectibles.append(coll)