blob: aa024c990f675c135baafb96695408ae4ed3ee26 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
class_name Zombie extends RigidBody
enum Dir {
none
up
down
left
right
}
var dir = Dir.none
var lastdir
var tlast = 0
var frame_i = 0
var images: Dictionary = {}
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func _physics_process(delta):
var updown = ((Input.get_action_strength("p1_down")
- Input.get_action_strength("p1_up")) * 2 * delta)
var rightleft = ((Input.get_action_strength("p1_right")
- Input.get_action_strength("p1_left")) * 2 * delta)
if rightleft:
if rightleft > 0:
dir = Dir.right
else:
dir = Dir.left
elif updown:
if updown > 0:
dir = Dir.up
else:
dir = Dir.down
else:
dir = Dir.none
self.translate(Vector3(rightleft, 0, updown))
func getid() -> String:
var id = ""
match dir:
Dir.none:
id += "n"
Dir.up:
id += "f"
Dir.down:
id += "b"
Dir.left:
id += "l"
Dir.right:
id += "r"
id += String(frame_i)
return id
func setimg(id: String):
var mesh = get_node("MeshInstance")
var material = mesh.get_surface_material(0).duplicate()
material.albedo_texture = images[id]
mesh.set_surface_material(0, material)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
tlast += delta
if tlast > 0.15:
tlast = 0
frame_i += 1
if frame_i >= 8:
frame_i = 0
if lastdir != dir:
tlast = 0
frame_i = 0
lastdir = dir
setimg(getid())
func _init():
for f in ["n", "f", "b", "l", "r"]:
for i in range(8):
var id = f + String(i)
var path = "res://zombie/" + id + ".png"
images[id] = load(path)
|