Wed, 02 Jul 2025 23:21:17 +0200
resolve TODOs regarding input.h
a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * Copyright 2025 Mike Becker. All rights reserved. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * Redistribution and use in source and binary forms, with or without |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * modification, are permitted provided that the following conditions are met: |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * 1. Redistributions of source code must retain the above copyright |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * notice, this list of conditions and the following disclaimer. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * 2. Redistributions in binary form must reproduce the above copyright |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * notice, this list of conditions and the following disclaimer in the |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * documentation and/or other materials provided with the distribution. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * POSSIBILITY OF SUCH DAMAGE. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | */ |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | #include "ascension/behavior.h" |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
29 | #include "ascension/context.h" |
112
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
30 | #include "ascension/scene.h" |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | #include <cx/array_list.h> |
112
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
33 | #include <cx/tree.h> |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | |
162
d3598c834f9b
improve NULL-safety - fixes #690
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
35 | #include <assert.h> |
d3598c834f9b
improve NULL-safety - fixes #690
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
36 | |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | static void asc_behavior_destroy(void *b) { |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | AscBehavior *behavior = b; |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | if (behavior->destroy_func) { |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | behavior->destroy_func(behavior); |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | } |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | } |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | static CxList *asc_behavior_new_list(void) { |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
112
diff
changeset
|
45 | // TODO: add comparator when we know how to identify behaviors in order to remove them |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | CxList *list = cxArrayListCreate(NULL, NULL, sizeof(AscBehavior), 4); |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | cxDefineDestructor(list, asc_behavior_destroy); |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | return list; |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | } |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | |
111
ee4b58dfcf7f
change naming convention for functions that are hidden behind macros
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
51 | AscBehavior *asc_behavior_add_(AscSceneNode *node, struct asc_behavior_create_args args) { |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | if (node->behaviors == NULL) { |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | node->behaviors = asc_behavior_new_list(); |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | } |
109
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
55 | AscBehavior *behavior = cxListEmplace(node->behaviors); |
162
d3598c834f9b
improve NULL-safety - fixes #690
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
56 | assert(behavior != NULL); |
112
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
57 | behavior->enabled = true; |
109
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
58 | behavior->node = node; |
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
59 | behavior->func = args.func; |
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
60 | behavior->destroy_func = args.destroy_func; |
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
61 | behavior->data = args.data; |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
62 | behavior->interval = args.interval; |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
63 | behavior->last_execution = 0; |
109
08548799ae4a
use new UCX 3.2 cxListEmplace()
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
64 | return behavior; |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
65 | } |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
66 | |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
67 | void asc_behavior_trigger(AscBehavior *behavior) { |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
68 | if (!behavior->enabled) return; |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
69 | if (behavior->last_execution + behavior->interval > asc_context.total_nanos) return; |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
70 | |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
71 | behavior->func(behavior); |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
72 | behavior->last_execution = asc_context.total_nanos; |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
73 | } |