action.c
1.08 KB
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
/*
* NINTENDO64 SAMPLE PROGRAM
*
* FILE : action.c
*
* Copyright (C) 1997, NINTENDO Co,Ltd.
*/
#include <ultra64.h>
#include "system.h"
#include "action.h"
/*
* Action 構造体の初期化
*/
void actionInit(Action *Ac)
{
u8 i;
for (i = 0; i < MAXCONTROLLERS; i ++){
Ac->pad[i].c = contPad + i;
Ac->pad[i].button = Ac->pad[i].push = 0;
}
}
/*
* Action 構造体の更新
*/
void actionUpdate(Action *Ac)
{
u8 i;
u16 button, change;
/* コントローラの状態を得る */
osContGetReadData(contPad);
/* 全コントローラについて更新 */
for (i = 0; i < MAXCONTROLLERS; i ++){
/* 今フレームのボタンの状態 */
button = Ac->pad[i].c->button;
/* 前フレームのボタンの状態との比較
change : ON->OFF or OFF->ON ===> 1
ON->ON or OFF->OFF ===> 0 */
change = Ac->pad[i].button ^ button;
/* ボタンは新たに押されたのか?
push : OFF->ON ===> 1
else ===> 0 */
Ac->pad[i].push = change & button;
/* 今フレームのボタンの状態を次フレームに残す */
Ac->pad[i].button = button;
}
}