really a pirate game
This commit is contained in:
		
							
								
								
									
										13
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | /target | ||||||
|  | /classes | ||||||
|  | /checkouts | ||||||
|  | profiles.clj | ||||||
|  | pom.xml | ||||||
|  | pom.xml.asc | ||||||
|  | *.jar | ||||||
|  | *.class | ||||||
|  | /.lein-* | ||||||
|  | /.nrepl-port | ||||||
|  | /.prepl-port | ||||||
|  | .hgignore | ||||||
|  | .hg/ | ||||||
							
								
								
									
										24
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | # Change Log | ||||||
|  | All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). | ||||||
|  |  | ||||||
|  | ## [Unreleased] | ||||||
|  | ### Changed | ||||||
|  | - Add a new arity to `make-widget-async` to provide a different widget shape. | ||||||
|  |  | ||||||
|  | ## [0.1.1] - 2023-11-01 | ||||||
|  | ### Changed | ||||||
|  | - Documentation on how to make the widgets. | ||||||
|  |  | ||||||
|  | ### Removed | ||||||
|  | - `make-widget-sync` - we're all async, all the time. | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - Fixed widget maker to keep working when daylight savings switches over. | ||||||
|  |  | ||||||
|  | ## 0.1.0 - 2023-11-01 | ||||||
|  | ### Added | ||||||
|  | - Files from the new template. | ||||||
|  | - Widget maker public API - `make-widget-sync`. | ||||||
|  |  | ||||||
|  | [Unreleased]: https://sourcehost.site/your-name/space-sim/compare/0.1.1...HEAD | ||||||
|  | [0.1.1]: https://sourcehost.site/your-name/space-sim/compare/0.1.0...0.1.1 | ||||||
							
								
								
									
										280
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										280
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,280 @@ | |||||||
|  | Eclipse Public License - v 2.0 | ||||||
|  |  | ||||||
|  |     THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE | ||||||
|  |     PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION | ||||||
|  |     OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. | ||||||
|  |  | ||||||
|  | 1. DEFINITIONS | ||||||
|  |  | ||||||
|  | "Contribution" means: | ||||||
|  |  | ||||||
|  |   a) in the case of the initial Contributor, the initial content | ||||||
|  |      Distributed under this Agreement, and | ||||||
|  |  | ||||||
|  |   b) in the case of each subsequent Contributor: | ||||||
|  |      i) changes to the Program, and | ||||||
|  |      ii) additions to the Program; | ||||||
|  |   where such changes and/or additions to the Program originate from | ||||||
|  |   and are Distributed by that particular Contributor. A Contribution | ||||||
|  |   "originates" from a Contributor if it was added to the Program by | ||||||
|  |   such Contributor itself or anyone acting on such Contributor's behalf. | ||||||
|  |   Contributions do not include changes or additions to the Program that | ||||||
|  |   are not Modified Works. | ||||||
|  |  | ||||||
|  | "Contributor" means any person or entity that Distributes the Program. | ||||||
|  |  | ||||||
|  | "Licensed Patents" mean patent claims licensable by a Contributor which | ||||||
|  | are necessarily infringed by the use or sale of its Contribution alone | ||||||
|  | or when combined with the Program. | ||||||
|  |  | ||||||
|  | "Program" means the Contributions Distributed in accordance with this | ||||||
|  | Agreement. | ||||||
|  |  | ||||||
|  | "Recipient" means anyone who receives the Program under this Agreement | ||||||
|  | or any Secondary License (as applicable), including Contributors. | ||||||
|  |  | ||||||
|  | "Derivative Works" shall mean any work, whether in Source Code or other | ||||||
|  | form, that is based on (or derived from) the Program and for which the | ||||||
|  | editorial revisions, annotations, elaborations, or other modifications | ||||||
|  | represent, as a whole, an original work of authorship. | ||||||
|  |  | ||||||
|  | "Modified Works" shall mean any work in Source Code or other form that | ||||||
|  | results from an addition to, deletion from, or modification of the | ||||||
|  | contents of the Program, including, for purposes of clarity any new file | ||||||
|  | in Source Code form that contains any contents of the Program. Modified | ||||||
|  | Works shall not include works that contain only declarations, | ||||||
|  | interfaces, types, classes, structures, or files of the Program solely | ||||||
|  | in each case in order to link to, bind by name, or subclass the Program | ||||||
|  | or Modified Works thereof. | ||||||
|  |  | ||||||
|  | "Distribute" means the acts of a) distributing or b) making available | ||||||
|  | in any manner that enables the transfer of a copy. | ||||||
|  |  | ||||||
|  | "Source Code" means the form of a Program preferred for making | ||||||
|  | modifications, including but not limited to software source code, | ||||||
|  | documentation source, and configuration files. | ||||||
|  |  | ||||||
|  | "Secondary License" means either the GNU General Public License, | ||||||
|  | Version 2.0, or any later versions of that license, including any | ||||||
|  | exceptions or additional permissions as identified by the initial | ||||||
|  | Contributor. | ||||||
|  |  | ||||||
|  | 2. GRANT OF RIGHTS | ||||||
|  |  | ||||||
|  |   a) Subject to the terms of this Agreement, each Contributor hereby | ||||||
|  |   grants Recipient a non-exclusive, worldwide, royalty-free copyright | ||||||
|  |   license to reproduce, prepare Derivative Works of, publicly display, | ||||||
|  |   publicly perform, Distribute and sublicense the Contribution of such | ||||||
|  |   Contributor, if any, and such Derivative Works. | ||||||
|  |  | ||||||
|  |   b) Subject to the terms of this Agreement, each Contributor hereby | ||||||
|  |   grants Recipient a non-exclusive, worldwide, royalty-free patent | ||||||
|  |   license under Licensed Patents to make, use, sell, offer to sell, | ||||||
|  |   import and otherwise transfer the Contribution of such Contributor, | ||||||
|  |   if any, in Source Code or other form. This patent license shall | ||||||
|  |   apply to the combination of the Contribution and the Program if, at | ||||||
|  |   the time the Contribution is added by the Contributor, such addition | ||||||
|  |   of the Contribution causes such combination to be covered by the | ||||||
|  |   Licensed Patents. The patent license shall not apply to any other | ||||||
|  |   combinations which include the Contribution. No hardware per se is | ||||||
|  |   licensed hereunder. | ||||||
|  |  | ||||||
|  |   c) Recipient understands that although each Contributor grants the | ||||||
|  |   licenses to its Contributions set forth herein, no assurances are | ||||||
|  |   provided by any Contributor that the Program does not infringe the | ||||||
|  |   patent or other intellectual property rights of any other entity. | ||||||
|  |   Each Contributor disclaims any liability to Recipient for claims | ||||||
|  |   brought by any other entity based on infringement of intellectual | ||||||
|  |   property rights or otherwise. As a condition to exercising the | ||||||
|  |   rights and licenses granted hereunder, each Recipient hereby | ||||||
|  |   assumes sole responsibility to secure any other intellectual | ||||||
|  |   property rights needed, if any. For example, if a third party | ||||||
|  |   patent license is required to allow Recipient to Distribute the | ||||||
|  |   Program, it is Recipient's responsibility to acquire that license | ||||||
|  |   before distributing the Program. | ||||||
|  |  | ||||||
|  |   d) Each Contributor represents that to its knowledge it has | ||||||
|  |   sufficient copyright rights in its Contribution, if any, to grant | ||||||
|  |   the copyright license set forth in this Agreement. | ||||||
|  |  | ||||||
|  |   e) Notwithstanding the terms of any Secondary License, no | ||||||
|  |   Contributor makes additional grants to any Recipient (other than | ||||||
|  |   those set forth in this Agreement) as a result of such Recipient's | ||||||
|  |   receipt of the Program under the terms of a Secondary License | ||||||
|  |   (if permitted under the terms of Section 3). | ||||||
|  |  | ||||||
|  | 3. REQUIREMENTS | ||||||
|  |  | ||||||
|  | 3.1 If a Contributor Distributes the Program in any form, then: | ||||||
|  |  | ||||||
|  |   a) the Program must also be made available as Source Code, in | ||||||
|  |   accordance with section 3.2, and the Contributor must accompany | ||||||
|  |   the Program with a statement that the Source Code for the Program | ||||||
|  |   is available under this Agreement, and informs Recipients how to | ||||||
|  |   obtain it in a reasonable manner on or through a medium customarily | ||||||
|  |   used for software exchange; and | ||||||
|  |  | ||||||
|  |   b) the Contributor may Distribute the Program under a license | ||||||
|  |   different than this Agreement, provided that such license: | ||||||
|  |      i) effectively disclaims on behalf of all other Contributors all | ||||||
|  |      warranties and conditions, express and implied, including | ||||||
|  |      warranties or conditions of title and non-infringement, and | ||||||
|  |      implied warranties or conditions of merchantability and fitness | ||||||
|  |      for a particular purpose; | ||||||
|  |  | ||||||
|  |      ii) effectively excludes on behalf of all other Contributors all | ||||||
|  |      liability for damages, including direct, indirect, special, | ||||||
|  |      incidental and consequential damages, such as lost profits; | ||||||
|  |  | ||||||
|  |      iii) does not attempt to limit or alter the recipients' rights | ||||||
|  |      in the Source Code under section 3.2; and | ||||||
|  |  | ||||||
|  |      iv) requires any subsequent distribution of the Program by any | ||||||
|  |      party to be under a license that satisfies the requirements | ||||||
|  |      of this section 3. | ||||||
|  |  | ||||||
|  | 3.2 When the Program is Distributed as Source Code: | ||||||
|  |  | ||||||
|  |   a) it must be made available under this Agreement, or if the | ||||||
|  |   Program (i) is combined with other material in a separate file or | ||||||
|  |   files made available under a Secondary License, and (ii) the initial | ||||||
|  |   Contributor attached to the Source Code the notice described in | ||||||
|  |   Exhibit A of this Agreement, then the Program may be made available | ||||||
|  |   under the terms of such Secondary Licenses, and | ||||||
|  |  | ||||||
|  |   b) a copy of this Agreement must be included with each copy of | ||||||
|  |   the Program. | ||||||
|  |  | ||||||
|  | 3.3 Contributors may not remove or alter any copyright, patent, | ||||||
|  | trademark, attribution notices, disclaimers of warranty, or limitations | ||||||
|  | of liability ("notices") contained within the Program from any copy of | ||||||
|  | the Program which they Distribute, provided that Contributors may add | ||||||
|  | their own appropriate notices. | ||||||
|  |  | ||||||
|  | 4. COMMERCIAL DISTRIBUTION | ||||||
|  |  | ||||||
|  | Commercial distributors of software may accept certain responsibilities | ||||||
|  | with respect to end users, business partners and the like. While this | ||||||
|  | license is intended to facilitate the commercial use of the Program, | ||||||
|  | the Contributor who includes the Program in a commercial product | ||||||
|  | offering should do so in a manner which does not create potential | ||||||
|  | liability for other Contributors. Therefore, if a Contributor includes | ||||||
|  | the Program in a commercial product offering, such Contributor | ||||||
|  | ("Commercial Contributor") hereby agrees to defend and indemnify every | ||||||
|  | other Contributor ("Indemnified Contributor") against any losses, | ||||||
|  | damages and costs (collectively "Losses") arising from claims, lawsuits | ||||||
|  | and other legal actions brought by a third party against the Indemnified | ||||||
|  | Contributor to the extent caused by the acts or omissions of such | ||||||
|  | Commercial Contributor in connection with its distribution of the Program | ||||||
|  | in a commercial product offering. The obligations in this section do not | ||||||
|  | apply to any claims or Losses relating to any actual or alleged | ||||||
|  | intellectual property infringement. In order to qualify, an Indemnified | ||||||
|  | Contributor must: a) promptly notify the Commercial Contributor in | ||||||
|  | writing of such claim, and b) allow the Commercial Contributor to control, | ||||||
|  | and cooperate with the Commercial Contributor in, the defense and any | ||||||
|  | related settlement negotiations. The Indemnified Contributor may | ||||||
|  | participate in any such claim at its own expense. | ||||||
|  |  | ||||||
|  | For example, a Contributor might include the Program in a commercial | ||||||
|  | product offering, Product X. That Contributor is then a Commercial | ||||||
|  | Contributor. If that Commercial Contributor then makes performance | ||||||
|  | claims, or offers warranties related to Product X, those performance | ||||||
|  | claims and warranties are such Commercial Contributor's responsibility | ||||||
|  | alone. Under this section, the Commercial Contributor would have to | ||||||
|  | defend claims against the other Contributors related to those performance | ||||||
|  | claims and warranties, and if a court requires any other Contributor to | ||||||
|  | pay any damages as a result, the Commercial Contributor must pay | ||||||
|  | those damages. | ||||||
|  |  | ||||||
|  | 5. NO WARRANTY | ||||||
|  |  | ||||||
|  | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT | ||||||
|  | PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" | ||||||
|  | BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR | ||||||
|  | IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF | ||||||
|  | TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR | ||||||
|  | PURPOSE. Each Recipient is solely responsible for determining the | ||||||
|  | appropriateness of using and distributing the Program and assumes all | ||||||
|  | risks associated with its exercise of rights under this Agreement, | ||||||
|  | including but not limited to the risks and costs of program errors, | ||||||
|  | compliance with applicable laws, damage to or loss of data, programs | ||||||
|  | or equipment, and unavailability or interruption of operations. | ||||||
|  |  | ||||||
|  | 6. DISCLAIMER OF LIABILITY | ||||||
|  |  | ||||||
|  | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT | ||||||
|  | PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS | ||||||
|  | SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||||
|  | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST | ||||||
|  | PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE | ||||||
|  | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE | ||||||
|  | POSSIBILITY OF SUCH DAMAGES. | ||||||
|  |  | ||||||
|  | 7. GENERAL | ||||||
|  |  | ||||||
|  | If any provision of this Agreement is invalid or unenforceable under | ||||||
|  | applicable law, it shall not affect the validity or enforceability of | ||||||
|  | the remainder of the terms of this Agreement, and without further | ||||||
|  | action by the parties hereto, such provision shall be reformed to the | ||||||
|  | minimum extent necessary to make such provision valid and enforceable. | ||||||
|  |  | ||||||
|  | If Recipient institutes patent litigation against any entity | ||||||
|  | (including a cross-claim or counterclaim in a lawsuit) alleging that the | ||||||
|  | Program itself (excluding combinations of the Program with other software | ||||||
|  | or hardware) infringes such Recipient's patent(s), then such Recipient's | ||||||
|  | rights granted under Section 2(b) shall terminate as of the date such | ||||||
|  | litigation is filed. | ||||||
|  |  | ||||||
|  | All Recipient's rights under this Agreement shall terminate if it | ||||||
|  | fails to comply with any of the material terms or conditions of this | ||||||
|  | Agreement and does not cure such failure in a reasonable period of | ||||||
|  | time after becoming aware of such noncompliance. If all Recipient's | ||||||
|  | rights under this Agreement terminate, Recipient agrees to cease use | ||||||
|  | and distribution of the Program as soon as reasonably practicable. | ||||||
|  | However, Recipient's obligations under this Agreement and any licenses | ||||||
|  | granted by Recipient relating to the Program shall continue and survive. | ||||||
|  |  | ||||||
|  | Everyone is permitted to copy and distribute copies of this Agreement, | ||||||
|  | but in order to avoid inconsistency the Agreement is copyrighted and | ||||||
|  | may only be modified in the following manner. The Agreement Steward | ||||||
|  | reserves the right to publish new versions (including revisions) of | ||||||
|  | this Agreement from time to time. No one other than the Agreement | ||||||
|  | Steward has the right to modify this Agreement. The Eclipse Foundation | ||||||
|  | is the initial Agreement Steward. The Eclipse Foundation may assign the | ||||||
|  | responsibility to serve as the Agreement Steward to a suitable separate | ||||||
|  | entity. Each new version of the Agreement will be given a distinguishing | ||||||
|  | version number. The Program (including Contributions) may always be | ||||||
|  | Distributed subject to the version of the Agreement under which it was | ||||||
|  | received. In addition, after a new version of the Agreement is published, | ||||||
|  | Contributor may elect to Distribute the Program (including its | ||||||
|  | Contributions) under the new version. | ||||||
|  |  | ||||||
|  | Except as expressly stated in Sections 2(a) and 2(b) above, Recipient | ||||||
|  | receives no rights or licenses to the intellectual property of any | ||||||
|  | Contributor under this Agreement, whether expressly, by implication, | ||||||
|  | estoppel or otherwise. All rights in the Program not expressly granted | ||||||
|  | under this Agreement are reserved. Nothing in this Agreement is intended | ||||||
|  | to be enforceable by any entity that is not a Contributor or Recipient. | ||||||
|  | No third-party beneficiary rights are created under this Agreement. | ||||||
|  |  | ||||||
|  | Exhibit A - Form of Secondary Licenses Notice | ||||||
|  |  | ||||||
|  | "This Source Code may also be made available under the following | ||||||
|  | Secondary Licenses when the conditions for such availability set forth | ||||||
|  | in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public | ||||||
|  | License as published by the Free Software Foundation, either version 2 | ||||||
|  | of the License, or (at your option) any later version, with the GNU | ||||||
|  | Classpath Exception which is available at | ||||||
|  | https://www.gnu.org/software/classpath/license.html." | ||||||
|  |  | ||||||
|  |   Simply including a copy of this Agreement, including this Exhibit A | ||||||
|  |   is not sufficient to license the Source Code under Secondary Licenses. | ||||||
|  |  | ||||||
|  |   If it is not possible or desirable to put the notice in a particular | ||||||
|  |   file, then You may include the notice in a location (such as a LICENSE | ||||||
|  |   file in a relevant directory) where a recipient would be likely to | ||||||
|  |   look for such a notice. | ||||||
|  |  | ||||||
|  |   You may add additional accurate notices of copyright ownership. | ||||||
							
								
								
									
										44
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | # space-sim | ||||||
|  |  | ||||||
|  | FIXME: description | ||||||
|  |  | ||||||
|  | ## Installation | ||||||
|  |  | ||||||
|  | Download from http://example.com/FIXME. | ||||||
|  |  | ||||||
|  | ## Usage | ||||||
|  |  | ||||||
|  | FIXME: explanation | ||||||
|  |  | ||||||
|  |     $ java -jar space-sim-0.1.0-standalone.jar [args] | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | FIXME: listing of options this app accepts. | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | ... | ||||||
|  |  | ||||||
|  | ### Bugs | ||||||
|  |  | ||||||
|  | ... | ||||||
|  |  | ||||||
|  | ### Any Other Sections | ||||||
|  | ### That You Think | ||||||
|  | ### Might be Useful | ||||||
|  |  | ||||||
|  | ## License | ||||||
|  |  | ||||||
|  | Copyright © 2023 FIXME | ||||||
|  |  | ||||||
|  | This program and the accompanying materials are made available under the | ||||||
|  | terms of the Eclipse Public License 2.0 which is available at | ||||||
|  | http://www.eclipse.org/legal/epl-2.0. | ||||||
|  |  | ||||||
|  | This Source Code may also be made available under the following Secondary | ||||||
|  | Licenses when the conditions for such availability set forth in the Eclipse | ||||||
|  | Public License, v. 2.0 are satisfied: GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 2 of the License, or (at your | ||||||
|  | option) any later version, with the GNU Classpath Exception which is available | ||||||
|  | at https://www.gnu.org/software/classpath/license.html. | ||||||
							
								
								
									
										3
									
								
								doc/intro.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								doc/intro.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | # Introduction to space-sim | ||||||
|  |  | ||||||
|  | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) | ||||||
							
								
								
									
										11
									
								
								project.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								project.clj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | (defproject space-sim "0.1.0-SNAPSHOT" | ||||||
|  |   :description "FIXME: write description" | ||||||
|  |   :url "http://example.com/FIXME" | ||||||
|  |   :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0" | ||||||
|  |             :url "https://www.eclipse.org/legal/epl-2.0/"} | ||||||
|  |   :dependencies [[org.clojure/clojure "1.11.1"] | ||||||
|  |                  [seesaw "1.5.0"]] | ||||||
|  |   :main ^:skip-aot space-sim.core | ||||||
|  |   :target-path "target/%s" | ||||||
|  |   :profiles {:uberjar {:aot :all | ||||||
|  |                        :jvm-opts ["-Dclojure.compiler.direct-linking=true"]}}) | ||||||
							
								
								
									
										16
									
								
								scratches/bootstrap.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								scratches/bootstrap.clj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | ;; you should be in space-sim.core> | ||||||
|  |  | ||||||
|  | (def my-ship (ref {:position [0. 0.] | ||||||
|  |                    :heading (normalize [1.0 1.0]) | ||||||
|  |                    :slots [{:type :downwind-sail :length 2 :furl 1.0}] | ||||||
|  |                    :velocity [1. 0.]})) | ||||||
|  |  | ||||||
|  | (reset! ships [my-ship]) | ||||||
|  |  | ||||||
|  | (start-program) | ||||||
|  | @my-ship | ||||||
|  | (dosync (alter my-ship assoc :heading (normalize [0. 1.]))) | ||||||
|  | (stop-program) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | (show-ui) | ||||||
							
								
								
									
										72
									
								
								src/space_sim/core.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/space_sim/core.clj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | (ns space-sim.core | ||||||
|  |   (:require [space-sim.vec2 :refer :all] | ||||||
|  |             [seesaw.core :refer :all] | ||||||
|  |             [clojure.math :as math])) | ||||||
|  |  | ||||||
|  | (def tickrate 100) | ||||||
|  | (def hardcoded-wind [0.1 3.0]) ;; A strong easternly wind! | ||||||
|  | (defonce ships (atom [])) | ||||||
|  | (defonce program (atom nil)) | ||||||
|  |  | ||||||
|  | (defn downwind-force | ||||||
|  |   "Calculates the force for a single square downwind sail | ||||||
|  |   Force = furl × length² × dot(wind, heading)" | ||||||
|  |   [sail wind heading] | ||||||
|  |   (scale heading (* (:furl sail) (:length sail) (:length sail) (dot wind heading)))) | ||||||
|  |  | ||||||
|  | (defn downwind-sails-force | ||||||
|  |   [ship wind] | ||||||
|  |   (loop [slots (:slots ship) | ||||||
|  |          force (zero)] | ||||||
|  |     (if (empty? slots) | ||||||
|  |       force | ||||||
|  |       (let [slot (first slots) | ||||||
|  |             tail (rest slots)] | ||||||
|  |         (if (= :downwind-sail (:type slot)) | ||||||
|  |           (recur tail (add force (downwind-force slot wind (:heading ship)))) | ||||||
|  |           (recur tail force)))))) | ||||||
|  |  | ||||||
|  | (defn physics-step | ||||||
|  |   [ship wind] | ||||||
|  |   (dosync | ||||||
|  |    ;; Update position | ||||||
|  |    (alter ship update :position add (scale (:velocity @ship) (/ tickrate))) | ||||||
|  |    ;; linear dampening | ||||||
|  |    (alter ship update :velocity scale (- 1.0 (/ 0.5 tickrate))) | ||||||
|  |    ;; wind force | ||||||
|  |    (alter ship update :velocity add (scale (downwind-sails-force @ship wind) (/ tickrate))))) | ||||||
|  |  | ||||||
|  | (defn tick | ||||||
|  |   [ships] | ||||||
|  |   (doseq [ship ships] | ||||||
|  |     (-> ship (physics-step hardcoded-wind)))) | ||||||
|  |  | ||||||
|  | (defn stop-program | ||||||
|  |   [] | ||||||
|  |   (when @program | ||||||
|  |     (reset! @program false))) | ||||||
|  |  | ||||||
|  | (defn start-program | ||||||
|  |   [] | ||||||
|  |   (stop-program) | ||||||
|  |   (let [thread-continue (atom true)] | ||||||
|  |     (.start (Thread. (fn [] | ||||||
|  |                        (while @thread-continue | ||||||
|  |                          (tick @ships) | ||||||
|  |                          (Thread/sleep (quot 1000 tickrate)))))) | ||||||
|  |     (reset! program thread-continue))) | ||||||
|  |  | ||||||
|  | ;; UI | ||||||
|  | (defn ship-chooser | ||||||
|  |   [] | ||||||
|  |   (let [namebox (text)] | ||||||
|  |     (flow-panel :items ["Ship Name" namebox]) | ||||||
|  |     (listen namebox :key-typed #()))) | ||||||
|  | (defn show-ui | ||||||
|  |   [] | ||||||
|  |   (-> (frame :title "Space Sim") pack! show!)) | ||||||
|  |  | ||||||
|  | (defn -main | ||||||
|  |   [args] | ||||||
|  |   (start-program) | ||||||
|  |   (show-ui)) | ||||||
							
								
								
									
										31
									
								
								src/space_sim/vec2.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/space_sim/vec2.clj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | (ns space-sim.vec2 | ||||||
|  |   (:require [clojure.math :as math])) | ||||||
|  |  | ||||||
|  | (defn zero | ||||||
|  |   [] | ||||||
|  |   [0. 0.]) | ||||||
|  |  | ||||||
|  | (defn add | ||||||
|  |   [v1 v2] | ||||||
|  |   (mapv + v1 v2)) | ||||||
|  |  | ||||||
|  | (defn scale | ||||||
|  |   [v & scalars] | ||||||
|  |   (mapv #(* (apply * scalars) %) v)) | ||||||
|  |  | ||||||
|  | (defn len2 | ||||||
|  |   [v] | ||||||
|  |   (apply + (map #(* % %) v))) | ||||||
|  |  | ||||||
|  | (defn len | ||||||
|  |   [v] | ||||||
|  |   (math/sqrt (len2 v))) | ||||||
|  |  | ||||||
|  | (defn normalize | ||||||
|  |   [v] | ||||||
|  |   (let [length (len v)] | ||||||
|  |     (mapv #(/ % length) v))) | ||||||
|  |  | ||||||
|  | (defn dot | ||||||
|  |   [v1 v2] | ||||||
|  |   (apply + (map * v1 v2))) | ||||||
							
								
								
									
										7
									
								
								test/space_sim/core_test.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								test/space_sim/core_test.clj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | (ns space-sim.core-test | ||||||
|  |   (:require [clojure.test :refer :all] | ||||||
|  |             [space-sim.core :refer :all])) | ||||||
|  |  | ||||||
|  | (deftest a-test | ||||||
|  |   (testing "FIXME, I fail." | ||||||
|  |     (is (= 0 1)))) | ||||||
		Reference in New Issue
	
	Block a user