[NUI.Physics2D] Add binding for Chipmunk2D physics engine
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Physics2D / src / public / chipmunk / HastySpace.cs
1 /*
2  * Copyright (c) 2023 Codefoco (codefoco@codefoco.com)
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  * 
11  * The above copyright notice and this permission notice shall be included in all
12  * copies or substantial portions of the Software.
13  * 
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20  * SOFTWARE.
21  */
22
23 using System;
24 using System.ComponentModel;
25
26 namespace Tizen.NUI.Physics2D.Chipmunk
27 {
28     /// <summary>
29     /// Similar to <see cref="Space"/>, but with ARM NEON optimizations in the solver.
30     /// </summary>
31     [EditorBrowsable(EditorBrowsableState.Never)]
32     public sealed class HastySpace : Space
33     {
34         /// <summary>
35         /// On ARM platforms that support NEON, this will enable the vectorized solver.
36         /// <see cref="HastySpace"/> also supports multiple threads, but runs single threaded by
37         /// default for determinism.
38         /// </summary>
39         [EditorBrowsable(EditorBrowsableState.Never)]
40         public HastySpace()
41             : base(NativeMethods.cpHastySpaceNew())
42         {
43         }
44
45         /// <summary>
46         /// The number of threads to use for the solver. Currently Chipmunk is limited to 2 threads
47         /// as using more generally provides very minimal performance gains. Passing 0 as the thread
48         /// count on iOS or OS X will cause Chipmunk to automatically detect the number of threads
49         /// it should use. On other platforms passing 0 for the thread count will set 1 thread.
50         /// </summary>
51         [EditorBrowsable(EditorBrowsableState.Never)]
52         public int Threads
53         {
54             get => (int)NativeMethods.cpHastySpaceGetThreads(Handle);
55             set => NativeMethods.cpHastySpaceSetThreads(Handle, (uint)value);
56         }
57
58         /// <summary>
59         /// Step in the hasty space.
60         /// </summary>
61         [EditorBrowsable(EditorBrowsableState.Never)]
62         public sealed override void Step(double dt)
63         {
64             NativeMethods.cpHastySpaceStep(Handle, dt);
65         }
66
67         /// <summary>
68         /// Destroy and free the hasty space.
69         /// </summary>
70         protected override void FreeSpace(IntPtr handle)
71         {
72             NativeMethods.cpHastySpaceFree(handle);
73         }
74     }
75 }