Compare commits
1 Commits
master
...
animationi
| Author | SHA1 | Date | |
|---|---|---|---|
| d23861a427 |
505
.ackrc
505
.ackrc
@ -1,505 +0,0 @@
|
|||||||
--ignore-ack-defaults
|
|
||||||
# This is the default ackrc for ack version v3.7.0.
|
|
||||||
|
|
||||||
# There are four different ways to match
|
|
||||||
#
|
|
||||||
# is: Match the filename exactly
|
|
||||||
#
|
|
||||||
# ext: Match the extension of the filename exactly
|
|
||||||
#
|
|
||||||
# match: Match the filename against a Perl regular expression
|
|
||||||
#
|
|
||||||
# firstlinematch: Match the first 250 characters of the first line
|
|
||||||
# of text against a Perl regular expression. This is only for
|
|
||||||
# the --type-add option.
|
|
||||||
|
|
||||||
### Directories to ignore
|
|
||||||
|
|
||||||
# Bazaar
|
|
||||||
# https://bazaar.canonical.com/
|
|
||||||
--ignore-directory=is:.bzr
|
|
||||||
|
|
||||||
# Codeville
|
|
||||||
# http://freshmeat.sourceforge.net/projects/codeville
|
|
||||||
--ignore-directory=is:.cdv
|
|
||||||
|
|
||||||
# Interface Builder (Xcode)
|
|
||||||
# https://en.wikipedia.org/wiki/Interface_Builder
|
|
||||||
--ignore-directory=is:~.dep
|
|
||||||
--ignore-directory=is:~.dot
|
|
||||||
--ignore-directory=is:~.nib
|
|
||||||
--ignore-directory=is:~.plst
|
|
||||||
|
|
||||||
# Git
|
|
||||||
# https://git-scm.com/
|
|
||||||
--ignore-directory=is:.git
|
|
||||||
# When submodules are used, .git is a file.
|
|
||||||
--ignore-file=is:.git
|
|
||||||
|
|
||||||
# Mercurial
|
|
||||||
# https://www.mercurial-scm.org/
|
|
||||||
--ignore-directory=is:.hg
|
|
||||||
|
|
||||||
# Quilt
|
|
||||||
# https://directory.fsf.org/wiki/Quilt
|
|
||||||
--ignore-directory=is:.pc
|
|
||||||
|
|
||||||
# Subversion
|
|
||||||
# https://subversion.apache.org/
|
|
||||||
--ignore-directory=is:.svn
|
|
||||||
|
|
||||||
# Monotone
|
|
||||||
# https://www.monotone.ca/
|
|
||||||
--ignore-directory=is:_MTN
|
|
||||||
|
|
||||||
# CVS
|
|
||||||
# https://savannah.nongnu.org/projects/cvs
|
|
||||||
--ignore-directory=is:CVS
|
|
||||||
|
|
||||||
# RCS
|
|
||||||
# https://www.gnu.org/software/rcs/
|
|
||||||
--ignore-directory=is:RCS
|
|
||||||
|
|
||||||
# SCCS
|
|
||||||
# https://en.wikipedia.org/wiki/Source_Code_Control_System
|
|
||||||
--ignore-directory=is:SCCS
|
|
||||||
|
|
||||||
# darcs
|
|
||||||
# http://darcs.net/
|
|
||||||
--ignore-directory=is:_darcs
|
|
||||||
|
|
||||||
# Vault/Fortress
|
|
||||||
--ignore-directory=is:_sgbak
|
|
||||||
|
|
||||||
# autoconf
|
|
||||||
# https://www.gnu.org/software/autoconf/
|
|
||||||
--ignore-directory=is:autom4te.cache
|
|
||||||
|
|
||||||
# Perl module building
|
|
||||||
--ignore-directory=is:blib
|
|
||||||
--ignore-directory=is:_build
|
|
||||||
|
|
||||||
# Perl Devel::Cover module's output directory
|
|
||||||
# https://metacpan.org/release/Devel-Cover
|
|
||||||
--ignore-directory=is:cover_db
|
|
||||||
|
|
||||||
# Node modules created by npm
|
|
||||||
--ignore-directory=is:node_modules
|
|
||||||
|
|
||||||
# CMake cache
|
|
||||||
# https://www.cmake.org/
|
|
||||||
--ignore-directory=is:CMakeFiles
|
|
||||||
|
|
||||||
# Eclipse workspace folder
|
|
||||||
# https://eclipse.org/
|
|
||||||
--ignore-directory=is:.metadata
|
|
||||||
|
|
||||||
# Cabal (Haskell) sandboxes
|
|
||||||
# https://www.haskell.org/cabal/users-guide/installing-packages.html
|
|
||||||
--ignore-directory=is:.cabal-sandbox
|
|
||||||
|
|
||||||
# Python caches
|
|
||||||
# https://docs.python.org/3/tutorial/modules.html
|
|
||||||
--ignore-directory=is:__pycache__
|
|
||||||
--ignore-directory=is:.pytest_cache
|
|
||||||
|
|
||||||
# macOS Finder remnants
|
|
||||||
--ignore-directory=is:__MACOSX
|
|
||||||
--ignore-file=is:.DS_Store
|
|
||||||
|
|
||||||
### Files to ignore
|
|
||||||
|
|
||||||
# Backup files
|
|
||||||
--ignore-file=ext:bak
|
|
||||||
--ignore-file=match:/~$/
|
|
||||||
|
|
||||||
# Emacs swap files
|
|
||||||
--ignore-file=match:/^#.+#$/
|
|
||||||
|
|
||||||
# vi/vim swap files https://www.vim.org/
|
|
||||||
--ignore-file=match:/[._].*[.]swp$/
|
|
||||||
|
|
||||||
# core dumps
|
|
||||||
--ignore-file=match:/core[.]\d+$/
|
|
||||||
|
|
||||||
# minified JavaScript
|
|
||||||
--ignore-file=match:/[.-]min[.]js$/
|
|
||||||
--ignore-file=match:/[.]js[.]min$/
|
|
||||||
|
|
||||||
# minified CSS
|
|
||||||
--ignore-file=match:/[.]min[.]css$/
|
|
||||||
--ignore-file=match:/[.]css[.]min$/
|
|
||||||
|
|
||||||
# JS and CSS source maps
|
|
||||||
--ignore-file=match:/[.]js[.]map$/
|
|
||||||
--ignore-file=match:/[.]css[.]map$/
|
|
||||||
|
|
||||||
# PDFs, because they pass Perl's -T detection
|
|
||||||
--ignore-file=ext:pdf
|
|
||||||
|
|
||||||
# Common graphics, just as an optimization
|
|
||||||
--ignore-file=ext:gif,jpg,jpeg,png
|
|
||||||
|
|
||||||
# Common archives, as an optimization
|
|
||||||
--ignore-file=ext:gz,tar,tgz,zip
|
|
||||||
|
|
||||||
# Python compiled modules
|
|
||||||
--ignore-file=ext:pyc,pyd,pyo
|
|
||||||
|
|
||||||
# Python's pickle serialization format
|
|
||||||
# https://docs.python.org/2/library/pickle.html#example
|
|
||||||
# https://docs.python.org/3.7/library/pickle.html#examples
|
|
||||||
--ignore-file=ext:pkl,pickle
|
|
||||||
|
|
||||||
# C extensions
|
|
||||||
--ignore-file=ext:so
|
|
||||||
|
|
||||||
# Compiled gettext files
|
|
||||||
--ignore-file=ext:mo
|
|
||||||
|
|
||||||
# Visual Studio user and workspace settings
|
|
||||||
# https://code.visualstudio.com/docs/getstarted/settings
|
|
||||||
--ignore-dir=is:.vscode
|
|
||||||
|
|
||||||
### Filetypes defined
|
|
||||||
|
|
||||||
# Makefiles
|
|
||||||
# https://www.gnu.org/s/make/
|
|
||||||
--type-add=make:ext:mk
|
|
||||||
--type-add=make:ext:mak
|
|
||||||
--type-add=make:is:makefile
|
|
||||||
--type-add=make:is:Makefile
|
|
||||||
--type-add=make:is:Makefile.Debug
|
|
||||||
--type-add=make:is:Makefile.Release
|
|
||||||
--type-add=make:is:GNUmakefile
|
|
||||||
|
|
||||||
# Rakefiles
|
|
||||||
# https://rake.rubyforge.org/
|
|
||||||
--type-add=rake:is:Rakefile
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
# https://cmake.org/
|
|
||||||
--type-add=cmake:is:CMakeLists.txt
|
|
||||||
--type-add=cmake:ext:cmake
|
|
||||||
|
|
||||||
# Bazel build tool
|
|
||||||
# https://docs.bazel.build/versions/master/skylark/bzl-style.html
|
|
||||||
--type-add=bazel:ext:bzl
|
|
||||||
# https://docs.bazel.build/versions/master/guide.html#bazelrc-the-bazel-configuration-file
|
|
||||||
--type-add=bazel:ext:bazelrc
|
|
||||||
# https://docs.bazel.build/versions/master/build-ref.html#BUILD_files
|
|
||||||
--type-add=bazel:is:BUILD
|
|
||||||
# https://docs.bazel.build/versions/master/build-ref.html#workspace
|
|
||||||
--type-add=bazel:is:WORKSPACE
|
|
||||||
|
|
||||||
|
|
||||||
# Actionscript
|
|
||||||
--type-add=actionscript:ext:as,mxml
|
|
||||||
|
|
||||||
# Ada
|
|
||||||
# https://www.adaic.org/
|
|
||||||
--type-add=ada:ext:ada,adb,ads
|
|
||||||
|
|
||||||
# ASP
|
|
||||||
# https://docs.microsoft.com/en-us/previous-versions/office/developer/server-technologies/aa286483(v=msdn.10)
|
|
||||||
--type-add=asp:ext:asp
|
|
||||||
|
|
||||||
# ASP.Net
|
|
||||||
# https://dotnet.microsoft.com/apps/aspnet
|
|
||||||
--type-add=aspx:ext:master,ascx,asmx,aspx,svc
|
|
||||||
|
|
||||||
# Assembly
|
|
||||||
--type-add=asm:ext:asm,s
|
|
||||||
|
|
||||||
# DOS/Windows batch
|
|
||||||
--type-add=batch:ext:bat,cmd
|
|
||||||
|
|
||||||
# ColdFusion
|
|
||||||
# https://en.wikipedia.org/wiki/ColdFusion
|
|
||||||
--type-add=cfmx:ext:cfc,cfm,cfml
|
|
||||||
|
|
||||||
# Clojure
|
|
||||||
# https://clojure.org/
|
|
||||||
--type-add=clojure:ext:clj,cljs,edn,cljc
|
|
||||||
|
|
||||||
# C
|
|
||||||
# .xs are Perl C files
|
|
||||||
--type-add=cc:ext:c,h,xs
|
|
||||||
|
|
||||||
# C header files
|
|
||||||
--type-add=hh:ext:h
|
|
||||||
|
|
||||||
# CoffeeScript
|
|
||||||
# https://coffeescript.org/
|
|
||||||
--type-add=coffeescript:ext:coffee
|
|
||||||
|
|
||||||
# C++
|
|
||||||
--type-add=cpp:ext:cpp,cc,cxx,m,hpp,hh,h,hxx
|
|
||||||
|
|
||||||
# C++ header files
|
|
||||||
--type-add=hpp:ext:hpp,hh,h,hxx
|
|
||||||
|
|
||||||
# C#
|
|
||||||
--type-add=csharp:ext:cs
|
|
||||||
|
|
||||||
# Crystal-lang
|
|
||||||
# https://crystal-lang.org/
|
|
||||||
--type-add=crystal:ext:cr,ecr
|
|
||||||
|
|
||||||
# CSS
|
|
||||||
# https://www.w3.org/Style/CSS/
|
|
||||||
--type-add=css:ext:css
|
|
||||||
|
|
||||||
# Dart
|
|
||||||
# https://dart.dev/
|
|
||||||
--type-add=dart:ext:dart
|
|
||||||
|
|
||||||
# Delphi
|
|
||||||
# https://en.wikipedia.org/wiki/Embarcadero_Delphi
|
|
||||||
--type-add=delphi:ext:pas,int,dfm,nfm,dof,dpk,dproj,groupproj,bdsgroup,bdsproj
|
|
||||||
|
|
||||||
# Elixir
|
|
||||||
# https://elixir-lang.org/
|
|
||||||
--type-add=elixir:ext:ex,exs
|
|
||||||
|
|
||||||
# Elm
|
|
||||||
# https://elm-lang.org
|
|
||||||
--type-add=elm:ext:elm
|
|
||||||
|
|
||||||
# Emacs Lisp
|
|
||||||
# https://www.gnu.org/software/emacs
|
|
||||||
--type-add=elisp:ext:el
|
|
||||||
|
|
||||||
# Erlang
|
|
||||||
# https://www.erlang.org/
|
|
||||||
--type-add=erlang:ext:erl,hrl
|
|
||||||
|
|
||||||
# Fortran
|
|
||||||
# https://en.wikipedia.org/wiki/Fortran
|
|
||||||
--type-add=fortran:ext:f,f77,f90,f95,f03,for,ftn,fpp
|
|
||||||
|
|
||||||
# Go
|
|
||||||
# https://golang.org/
|
|
||||||
--type-add=go:ext:go
|
|
||||||
|
|
||||||
# Groovy
|
|
||||||
# https://www.groovy-lang.org/
|
|
||||||
--type-add=groovy:ext:groovy,gtmpl,gpp,grunit,gradle
|
|
||||||
|
|
||||||
# GSP
|
|
||||||
# https://gsp.grails.org/
|
|
||||||
--type-add=gsp:ext:gsp
|
|
||||||
|
|
||||||
# Haskell
|
|
||||||
# https://www.haskell.org/
|
|
||||||
--type-add=haskell:ext:hs,lhs
|
|
||||||
|
|
||||||
# HTML
|
|
||||||
--type-add=html:ext:htm,html,xhtml
|
|
||||||
|
|
||||||
# Jade
|
|
||||||
# http://jade-lang.com/
|
|
||||||
--type-add=jade:ext:jade
|
|
||||||
|
|
||||||
# Java
|
|
||||||
# https://www.oracle.com/technetwork/java/index.html
|
|
||||||
--type-add=java:ext:java,properties
|
|
||||||
|
|
||||||
# JavaScript
|
|
||||||
--type-add=js:ext:js
|
|
||||||
|
|
||||||
# JSP
|
|
||||||
# https://www.oracle.com/technetwork/java/javaee/jsp/index.html
|
|
||||||
--type-add=jsp:ext:jsp,jspx,jspf,jhtm,jhtml
|
|
||||||
|
|
||||||
# JSON
|
|
||||||
# https://json.org/
|
|
||||||
--type-add=json:ext:json
|
|
||||||
|
|
||||||
# Kotlin
|
|
||||||
# https://kotlinlang.org/
|
|
||||||
--type-add=kotlin:ext:kt,kts
|
|
||||||
|
|
||||||
# Less
|
|
||||||
# http://www.lesscss.org/
|
|
||||||
--type-add=less:ext:less
|
|
||||||
|
|
||||||
# Common Lisp
|
|
||||||
# https://common-lisp.net/
|
|
||||||
--type-add=lisp:ext:lisp,lsp
|
|
||||||
|
|
||||||
# Lua
|
|
||||||
# https://www.lua.org/
|
|
||||||
--type-add=lua:ext:lua
|
|
||||||
--type-add=lua:firstlinematch:/^#!.*\blua(jit)?/
|
|
||||||
|
|
||||||
# Markdown
|
|
||||||
# https://en.wikipedia.org/wiki/Markdown
|
|
||||||
--type-add=markdown:ext:md,markdown
|
|
||||||
# We understand that there are many ad hoc extensions for markdown
|
|
||||||
# that people use. .md and .markdown are the two that ack recognizes.
|
|
||||||
# You are free to add your own in your ackrc file.
|
|
||||||
|
|
||||||
# Matlab
|
|
||||||
# https://en.wikipedia.org/wiki/MATLAB
|
|
||||||
--type-add=matlab:ext:m
|
|
||||||
|
|
||||||
# Objective-C
|
|
||||||
--type-add=objc:ext:m,h
|
|
||||||
|
|
||||||
# Objective-C++
|
|
||||||
--type-add=objcpp:ext:mm,h
|
|
||||||
|
|
||||||
# OCaml
|
|
||||||
# https://ocaml.org/
|
|
||||||
--type-add=ocaml:ext:ml,mli,mll,mly
|
|
||||||
|
|
||||||
# Perl
|
|
||||||
# https://perl.org/
|
|
||||||
--type-add=perl:ext:pl,pm,pod,t,psgi
|
|
||||||
--type-add=perl:firstlinematch:/^#!.*\bperl/
|
|
||||||
|
|
||||||
# Perl tests
|
|
||||||
--type-add=perltest:ext:t
|
|
||||||
|
|
||||||
# Perl's Plain Old Documentation format, POD
|
|
||||||
--type-add=pod:ext:pod
|
|
||||||
|
|
||||||
# PHP
|
|
||||||
# https://www.php.net/
|
|
||||||
--type-add=php:ext:php,phpt,php3,php4,php5,phtml
|
|
||||||
--type-add=php:firstlinematch:/^#!.*\bphp/
|
|
||||||
|
|
||||||
# Plone
|
|
||||||
# https://plone.org/
|
|
||||||
--type-add=plone:ext:pt,cpt,metadata,cpy,py
|
|
||||||
|
|
||||||
# PowerShell
|
|
||||||
# https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scripts
|
|
||||||
# https://learn.microsoft.com/en-us/powershell/scripting/developer/module/understanding-a-windows-powershell-module
|
|
||||||
--type-add=powershell:ext:ps1,psm1
|
|
||||||
|
|
||||||
# PureScript
|
|
||||||
# https://www.purescript.org
|
|
||||||
--type-add=purescript:ext:purs
|
|
||||||
|
|
||||||
# Python
|
|
||||||
# https://www.python.org/
|
|
||||||
--type-add=python:ext:py
|
|
||||||
--type-add=python:firstlinematch:/^#!.*\bpython/
|
|
||||||
|
|
||||||
# R
|
|
||||||
# https://www.r-project.org/
|
|
||||||
# https://r4ds.had.co.nz/r-markdown.html
|
|
||||||
--type-add=rr:ext:R,Rmd
|
|
||||||
|
|
||||||
# reStructured Text
|
|
||||||
# https://docutils.sourceforge.io/rst.html
|
|
||||||
--type-add=rst:ext:rst
|
|
||||||
|
|
||||||
# Ruby
|
|
||||||
# https://www.ruby-lang.org/
|
|
||||||
--type-add=ruby:ext:rb,rhtml,rjs,rxml,erb,rake,spec
|
|
||||||
--type-add=ruby:is:Rakefile
|
|
||||||
--type-add=ruby:firstlinematch:/^#!.*\bruby/
|
|
||||||
|
|
||||||
# Rust
|
|
||||||
# https://www.rust-lang.org/
|
|
||||||
--type-add=rust:ext:rs
|
|
||||||
|
|
||||||
# Sass
|
|
||||||
# https://sass-lang.com
|
|
||||||
--type-add=sass:ext:sass,scss
|
|
||||||
|
|
||||||
# Scala
|
|
||||||
# https://www.scala-lang.org/
|
|
||||||
--type-add=scala:ext:scala,sbt
|
|
||||||
|
|
||||||
# Scheme
|
|
||||||
# https://groups.csail.mit.edu/mac/projects/scheme/
|
|
||||||
--type-add=scheme:ext:scm,ss
|
|
||||||
|
|
||||||
# Shell
|
|
||||||
--type-add=shell:ext:sh,bash,csh,tcsh,ksh,zsh,fish
|
|
||||||
--type-add=shell:firstlinematch:/^#!.*\b(?:ba|t?c|k|z|fi)?sh\b/
|
|
||||||
|
|
||||||
# Smalltalk
|
|
||||||
# http://www.smalltalk.org/
|
|
||||||
--type-add=smalltalk:ext:st
|
|
||||||
|
|
||||||
# Smarty
|
|
||||||
# https://www.smarty.net/
|
|
||||||
--type-add=smarty:ext:tpl
|
|
||||||
|
|
||||||
# SQL
|
|
||||||
# https://www.iso.org/standard/45498.html
|
|
||||||
--type-add=sql:ext:sql,ctl
|
|
||||||
|
|
||||||
# Stylus
|
|
||||||
# http://stylus-lang.com/
|
|
||||||
--type-add=stylus:ext:styl
|
|
||||||
|
|
||||||
# SVG
|
|
||||||
# https://en.wikipedia.org/wiki/Scalable_Vector_Graphics
|
|
||||||
--type-add=svg:ext:svg
|
|
||||||
|
|
||||||
# Swift
|
|
||||||
# https://developer.apple.com/swift/
|
|
||||||
--type-add=swift:ext:swift
|
|
||||||
--type-add=swift:firstlinematch:/^#!.*\bswift/
|
|
||||||
|
|
||||||
# Tcl
|
|
||||||
# https://www.tcl.tk/
|
|
||||||
--type-add=tcl:ext:tcl,itcl,itk
|
|
||||||
|
|
||||||
# TeX & LaTeX
|
|
||||||
# https://www.latex-project.org/
|
|
||||||
--type-add=tex:ext:tex,cls,sty
|
|
||||||
|
|
||||||
# Template Toolkit (Perl)
|
|
||||||
# http//template-toolkit.org/
|
|
||||||
--type-add=ttml:ext:tt,tt2,ttml
|
|
||||||
|
|
||||||
# TOML
|
|
||||||
# https://toml.io/
|
|
||||||
--type-add=toml:ext:toml
|
|
||||||
|
|
||||||
# TypeScript
|
|
||||||
# https://www.typescriptlang.org/
|
|
||||||
--type-add=ts:ext:ts,tsx
|
|
||||||
|
|
||||||
# Visual Basic
|
|
||||||
--type-add=vb:ext:bas,cls,frm,ctl,vb,resx
|
|
||||||
|
|
||||||
# Verilog
|
|
||||||
--type-add=verilog:ext:v,vh,sv
|
|
||||||
|
|
||||||
# VHDL
|
|
||||||
# http://www.eda.org/twiki/bin/view.cgi/P1076/WebHome
|
|
||||||
--type-add=vhdl:ext:vhd,vhdl
|
|
||||||
|
|
||||||
# Vim
|
|
||||||
# https://www.vim.org/
|
|
||||||
--type-add=vim:ext:vim
|
|
||||||
|
|
||||||
# XML
|
|
||||||
# https://www.w3.org/TR/REC-xml/
|
|
||||||
--type-add=xml:ext:xml,dtd,xsd,xsl,xslt,ent,wsdl
|
|
||||||
--type-add=xml:firstlinematch:/<[?]xml/
|
|
||||||
|
|
||||||
# YAML
|
|
||||||
# https://yaml.org/
|
|
||||||
--type-add=yaml:ext:yaml,yml
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# TOM
|
|
||||||
--ignore-directory=is:src
|
|
||||||
--ignore-directory=is:tmp
|
|
||||||
--ignore-directory=is:fonts
|
|
||||||
--ignore-file=ext:ldtk
|
|
||||||
--ignore-file=ext:png
|
|
||||||
--ignore-file=ext:ase
|
|
||||||
--ignore-file=ext:json
|
|
||||||
--ignore-file=ext:svg
|
|
||||||
|
|
||||||
3
Makefile
3
Makefile
@ -30,6 +30,3 @@ wasm: buildwasm zipwasm
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
@echo $(VERSION)
|
@echo $(VERSION)
|
||||||
|
|
||||||
nixshell:
|
|
||||||
nix-shell -p xorg.libX11 xorg.libXrandr libGL xorg.libXcursor xorg.libXinerama xorg.libXi xorg.libXxf86vm xorg_sys_opengl
|
|
||||||
|
|||||||
3
TODO.md
3
TODO.md
@ -15,10 +15,11 @@
|
|||||||
- Add player collision animation
|
- Add player collision animation
|
||||||
|
|
||||||
- Create pixel art ui elements (button, list things) and ui borders/backgrounds
|
- Create pixel art ui elements (button, list things) and ui borders/backgrounds
|
||||||
Replace HUD with pixel art variant
|
|
||||||
|
|
||||||
- Modify font and font color matching the palette
|
- Modify font and font color matching the palette
|
||||||
|
|
||||||
|
- Replace HUD with pixel art variant
|
||||||
|
|
||||||
- On game start respond to any key (ebitengine-input has an anykey func)
|
- On game start respond to any key (ebitengine-input has an anykey func)
|
||||||
|
|
||||||
- Switch to use https://github.com/quasilyte/ebitengine-input
|
- Switch to use https://github.com/quasilyte/ebitengine-input
|
||||||
|
|||||||
@ -18,7 +18,6 @@ type TileAnimation struct {
|
|||||||
OnCollision bool // wether to animate a collision
|
OnCollision bool // wether to animate a collision
|
||||||
OnDestruction bool // wether to animate destruction
|
OnDestruction bool // wether to animate destruction
|
||||||
OnIdle bool // wether to animate during idling
|
OnIdle bool // wether to animate during idling
|
||||||
OnMoving bool // wether to animate during moving
|
|
||||||
|
|
||||||
CollisionSheet AnimationSet // an entry in assets.Animations[name]
|
CollisionSheet AnimationSet // an entry in assets.Animations[name]
|
||||||
DestructionSheet AnimationSet
|
DestructionSheet AnimationSet
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -1,33 +0,0 @@
|
|||||||
JASC-PAL
|
|
||||||
0100
|
|
||||||
30
|
|
||||||
242 211 171
|
|
||||||
236 199 134
|
|
||||||
230 193 96
|
|
||||||
224 176 50
|
|
||||||
205 142 32
|
|
||||||
198 159 165
|
|
||||||
186 140 144
|
|
||||||
180 129 129
|
|
||||||
172 115 115
|
|
||||||
147 87 98
|
|
||||||
139 109 156
|
|
||||||
118 93 138
|
|
||||||
97 80 118
|
|
||||||
82 68 100
|
|
||||||
62 51 75
|
|
||||||
73 77 126
|
|
||||||
61 61 106
|
|
||||||
51 48 83
|
|
||||||
37 33 56
|
|
||||||
27 21 37
|
|
||||||
39 39 68
|
|
||||||
39 39 68
|
|
||||||
39 39 68
|
|
||||||
39 39 68
|
|
||||||
39 39 68
|
|
||||||
251 245 239
|
|
||||||
223 207 198
|
|
||||||
194 178 174
|
|
||||||
171 157 155
|
|
||||||
146 134 130
|
|
||||||
Binary file not shown.
@ -71,15 +71,6 @@ func (position *Position) String() string {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (position *Position) SmallString() string {
|
|
||||||
return fmt.Sprintf("%d,%d\n%d,%d",
|
|
||||||
position.X/32,
|
|
||||||
position.Y/32,
|
|
||||||
position.X,
|
|
||||||
position.Y,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (position *Position) Move(velocity *Velocity) {
|
func (position *Position) Move(velocity *Velocity) {
|
||||||
// if velocity.Direction != 0 {
|
// if velocity.Direction != 0 {
|
||||||
// slog.Debug("moving", "velocity", velocity, "speed", speed)
|
// slog.Debug("moving", "velocity", velocity, "speed", speed)
|
||||||
|
|||||||
@ -15,7 +15,18 @@ const (
|
|||||||
Moving
|
Moving
|
||||||
)
|
)
|
||||||
|
|
||||||
type Animation struct {
|
type AnimationTrigger int
|
||||||
|
|
||||||
|
type Animation interface {
|
||||||
|
GetType() AnimationTrigger
|
||||||
|
StartAnimation()
|
||||||
|
StopAnimation()
|
||||||
|
GetSprite() *ebiten.Image
|
||||||
|
GetDuration() time.Duration
|
||||||
|
}
|
||||||
|
|
||||||
|
// implements the AnimationInterface
|
||||||
|
type StandardAnimation struct {
|
||||||
Active bool // animation is running
|
Active bool // animation is running
|
||||||
Loop bool // remove the entity if false, loop endless otherwise
|
Loop bool // remove the entity if false, loop endless otherwise
|
||||||
Index int // where we are currently
|
Index int // where we are currently
|
||||||
@ -24,60 +35,89 @@ type Animation struct {
|
|||||||
Timer Timer
|
Timer Timer
|
||||||
Trigger string
|
Trigger string
|
||||||
Data assets.TileAnimation
|
Data assets.TileAnimation
|
||||||
|
Render *Renderable
|
||||||
|
Which AnimationTrigger
|
||||||
}
|
}
|
||||||
|
|
||||||
type Renderable struct {
|
func (animation *StandardAnimation) StartAnimation() {
|
||||||
Pos *Position // just for debugging, will not used as positiion!
|
animation.Active = true
|
||||||
Image *ebiten.Image
|
animation.Timer.Start(0)
|
||||||
DamageImage *ebiten.Image // FIXME: put into its own struct
|
|
||||||
Damaged int
|
|
||||||
Shader *ebiten.Shader
|
|
||||||
DestructionAnimate Animation
|
|
||||||
IdleAnimate Animation
|
|
||||||
CollisionAnimate Animation
|
|
||||||
MovingAnimate Animation
|
|
||||||
Hidden bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (render *Renderable) StartAnimation(which int) {
|
func (animation *StandardAnimation) StopAnimation() {
|
||||||
switch which {
|
animation.Active = false
|
||||||
case Collision:
|
|
||||||
fallthrough
|
|
||||||
case Destruction:
|
|
||||||
render.Hidden = true
|
|
||||||
render.DestructionAnimate.Active = true
|
|
||||||
render.DestructionAnimate.Timer.Start(config.ANIMATION_STARTWAIT)
|
|
||||||
render.IdleAnimate.Active = false
|
|
||||||
case Idle:
|
|
||||||
render.IdleAnimate.Active = true
|
|
||||||
render.IdleAnimate.Loop = true
|
|
||||||
render.IdleAnimate.Timer.Start(0)
|
|
||||||
case Moving:
|
|
||||||
render.MovingAnimate.Loop = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (render *Renderable) StopAnimation(which int) {
|
func (animation *StandardAnimation) GetSprite() *ebiten.Image {
|
||||||
switch which {
|
|
||||||
case Collision:
|
|
||||||
render.CollisionAnimate.Active = false
|
|
||||||
case Idle:
|
|
||||||
render.IdleAnimate.Active = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (render *Renderable) Animations() map[int]*Animation {
|
|
||||||
return map[int]*Animation{
|
|
||||||
Collision: &render.CollisionAnimate,
|
|
||||||
Destruction: &render.DestructionAnimate,
|
|
||||||
Idle: &render.IdleAnimate,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (animation *Animation) GetSprite() *ebiten.Image {
|
|
||||||
return animation.Sprites[animation.Index].Sprite
|
return animation.Sprites[animation.Index].Sprite
|
||||||
}
|
}
|
||||||
|
|
||||||
func (animation *Animation) GetDuration() time.Duration {
|
func (animation *StandardAnimation) GetDuration() time.Duration {
|
||||||
return animation.Sprites[animation.Index].Duration * time.Millisecond
|
return animation.Sprites[animation.Index].Duration * time.Millisecond
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (animation *StandardAnimation) GetType() AnimationTrigger {
|
||||||
|
return animation.Which
|
||||||
|
}
|
||||||
|
|
||||||
|
type CollisionAnimation struct {
|
||||||
|
StandardAnimation
|
||||||
|
}
|
||||||
|
|
||||||
|
type IdleAnimation struct {
|
||||||
|
StandardAnimation
|
||||||
|
}
|
||||||
|
|
||||||
|
type DestructionAnimation struct {
|
||||||
|
StandardAnimation
|
||||||
|
}
|
||||||
|
|
||||||
|
type MovingAnimation struct {
|
||||||
|
StandardAnimation
|
||||||
|
}
|
||||||
|
|
||||||
|
func (animation *DestructionAnimation) StartAnimation() {
|
||||||
|
animation.Render.StopAnimations()
|
||||||
|
animation.Render.Hidden = true
|
||||||
|
animation.Active = true
|
||||||
|
animation.Timer.Start(config.ANIMATION_STARTWAIT)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (animation *IdleAnimation) StartAnimation() {
|
||||||
|
animation.Render.StopAnimations()
|
||||||
|
animation.Active = true
|
||||||
|
animation.Loop = true
|
||||||
|
animation.Timer.Start(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Renderable struct {
|
||||||
|
Pos *Position // just for debugging, will not used as positiion!
|
||||||
|
Image *ebiten.Image
|
||||||
|
DamageImage *ebiten.Image // FIXME: put into its own struct
|
||||||
|
Damaged int
|
||||||
|
Shader *ebiten.Shader
|
||||||
|
Animations map[AnimationTrigger]Animation
|
||||||
|
Hidden bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (render *Renderable) StopAnimations() {
|
||||||
|
for _, animation := range render.Animations {
|
||||||
|
animation.StopAnimation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (render *Renderable) AddAnimation(which AnimationTrigger) {
|
||||||
|
render.Animations = make(map[AnimationTrigger]Animation)
|
||||||
|
|
||||||
|
switch which {
|
||||||
|
case Idle:
|
||||||
|
idle := &IdleAnimation{
|
||||||
|
StandardAnimation: StandardAnimation{
|
||||||
|
Which: Idle,
|
||||||
|
Render: render,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
render.Animations[Idle] = idle
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import (
|
|||||||
"github.com/knadh/koanf"
|
"github.com/knadh/koanf"
|
||||||
"github.com/knadh/koanf/providers/env"
|
"github.com/knadh/koanf/providers/env"
|
||||||
"github.com/knadh/koanf/providers/posflag"
|
"github.com/knadh/koanf/providers/posflag"
|
||||||
input "github.com/quasilyte/ebitengine-input"
|
|
||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,26 +22,11 @@ type Config struct {
|
|||||||
Loglevel string `koanf:"loglevel"`
|
Loglevel string `koanf:"loglevel"`
|
||||||
Debug bool `koanf:"debug"` // loglevel=debug
|
Debug bool `koanf:"debug"` // loglevel=debug
|
||||||
Startlevel int
|
Startlevel int
|
||||||
Keymap input.Keymap `koanf:"keymap"` // we put it here so we can eventually customize it later
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitConfig() (*Config, error) {
|
func InitConfig() (*Config, error) {
|
||||||
var kloader = koanf.New(".")
|
var kloader = koanf.New(".")
|
||||||
|
|
||||||
// Load default values using the confmap provider.
|
|
||||||
/*
|
|
||||||
if err := kloader.Load(confmap.Provider(map[string]interface{}{
|
|
||||||
"keymap": input.Keymap{
|
|
||||||
InputMoveLeft: {input.KeyGamepadLeft, input.KeyLeft, input.KeyA},
|
|
||||||
InputMoveRight: {input.KeyGamepadRight, input.KeyRight, input.KeyD},
|
|
||||||
InputMoveUp: {input.KeyGamepadUp, input.KeyUp, input.KeyW},
|
|
||||||
InputMoveDown: {input.KeyGamepadDown, input.KeyDown, input.KeyS},
|
|
||||||
},
|
|
||||||
}, "."), nil); err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load default values into koanf: %w", err)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
flagset := flag.NewFlagSet("config", flag.ContinueOnError)
|
flagset := flag.NewFlagSet("config", flag.ContinueOnError)
|
||||||
flagset.BoolP("debug", "d", false, "enable debug log")
|
flagset.BoolP("debug", "d", false, "enable debug log")
|
||||||
|
|
||||||
@ -88,17 +72,6 @@ func InitConfig() (*Config, error) {
|
|||||||
conf.Startlevel = level
|
conf.Startlevel = level
|
||||||
}
|
}
|
||||||
|
|
||||||
conf.Keymap = input.Keymap{
|
|
||||||
MoveLeft: {input.KeyGamepadLeft, input.KeyLeft, input.KeyA},
|
|
||||||
MoveRight: {input.KeyGamepadRight, input.KeyRight, input.KeyD},
|
|
||||||
MoveUp: {input.KeyGamepadUp, input.KeyUp, input.KeyW},
|
|
||||||
MoveDown: {input.KeyGamepadDown, input.KeyDown, input.KeyS},
|
|
||||||
SwitchPlayer: {input.KeyTab},
|
|
||||||
Abort: {input.KeyEscape},
|
|
||||||
Activate: {input.KeyEnter, input.KeyMouseLeft},
|
|
||||||
Any: {},
|
|
||||||
}
|
|
||||||
|
|
||||||
return conf, nil
|
return conf, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,8 +3,6 @@ package config
|
|||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
input "github.com/quasilyte/ebitengine-input"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -35,14 +33,3 @@ var VERSION string // maintained by -x
|
|||||||
|
|
||||||
var FontColorFG = color.RGBA{0, 255, 128, 255} // blue
|
var FontColorFG = color.RGBA{0, 255, 128, 255} // blue
|
||||||
//var FontColorFG = color.RGBA{117, 167, 67, 255} // green
|
//var FontColorFG = color.RGBA{117, 167, 67, 255} // green
|
||||||
|
|
||||||
const (
|
|
||||||
MoveLeft input.Action = iota
|
|
||||||
MoveRight
|
|
||||||
MoveUp
|
|
||||||
MoveDown
|
|
||||||
SwitchPlayer
|
|
||||||
Abort
|
|
||||||
Activate
|
|
||||||
Any
|
|
||||||
)
|
|
||||||
|
|||||||
12
game/game.go
12
game/game.go
@ -9,7 +9,6 @@ import (
|
|||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
"github.com/mlange-42/arche/ecs"
|
"github.com/mlange-42/arche/ecs"
|
||||||
input "github.com/quasilyte/ebitengine-input"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Game struct {
|
type Game struct {
|
||||||
@ -21,8 +20,6 @@ type Game struct {
|
|||||||
Observer *observers.GameObserver
|
Observer *observers.GameObserver
|
||||||
Levels []*Level // fed in PlayScene.GenerateLevels()
|
Levels []*Level // fed in PlayScene.GenerateLevels()
|
||||||
Config *config.Config
|
Config *config.Config
|
||||||
InputSystem input.System
|
|
||||||
Input *input.Handler
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGame(width, height, cellsize int, cfg *config.Config, startscene SceneName) *Game {
|
func NewGame(width, height, cellsize int, cfg *config.Config, startscene SceneName) *Game {
|
||||||
@ -41,12 +38,6 @@ func NewGame(width, height, cellsize int, cfg *config.Config, startscene SceneNa
|
|||||||
game.Observer = observers.NewGameObserver(
|
game.Observer = observers.NewGameObserver(
|
||||||
&world, cfg.Startlevel, width, height, cellsize)
|
&world, cfg.Startlevel, width, height, cellsize)
|
||||||
|
|
||||||
game.InputSystem.Init(input.SystemConfig{
|
|
||||||
DevicesEnabled: input.AnyDevice,
|
|
||||||
})
|
|
||||||
|
|
||||||
game.Input = game.InputSystem.NewHandler(0, game.Config.Keymap)
|
|
||||||
|
|
||||||
game.Scenes[Welcome] = NewWelcomeScene(game)
|
game.Scenes[Welcome] = NewWelcomeScene(game)
|
||||||
game.Scenes[Menu] = NewMenuScene(game)
|
game.Scenes[Menu] = NewMenuScene(game)
|
||||||
game.Scenes[About] = NewAboutScene(game)
|
game.Scenes[About] = NewAboutScene(game)
|
||||||
@ -66,9 +57,6 @@ func (game *Game) GetCurrentScene() Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (game *Game) Update() error {
|
func (game *Game) Update() error {
|
||||||
// update ebitengine-input
|
|
||||||
game.InputSystem.Update()
|
|
||||||
|
|
||||||
// handle level ends
|
// handle level ends
|
||||||
timer := game.Observer.StopTimer
|
timer := game.Observer.StopTimer
|
||||||
|
|
||||||
|
|||||||
@ -49,8 +49,7 @@ func NewLevel(game *Game, cellsize int, plan *ldtkgo.Level) *Level {
|
|||||||
systemlist = append(systemlist, systems.NewPairSystem(game.World, gridcontainer))
|
systemlist = append(systemlist, systems.NewPairSystem(game.World, gridcontainer))
|
||||||
|
|
||||||
systemlist = append(systemlist,
|
systemlist = append(systemlist,
|
||||||
systems.NewPlayerSystem(game.World, gridcontainer,
|
systems.NewPlayerSystem(game.World, gridcontainer, game.ScreenWidth, game.ScreenHeight))
|
||||||
game.ScreenWidth, game.ScreenHeight, game.Input))
|
|
||||||
|
|
||||||
systemlist = append(systemlist, systems.NewAnimationSystem(game.World, game.Cellsize))
|
systemlist = append(systemlist, systems.NewAnimationSystem(game.World, game.Cellsize))
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"openquell/config"
|
"openquell/config"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PlayScene struct {
|
type PlayScene struct {
|
||||||
@ -72,10 +73,10 @@ func (scene *PlayScene) Update() error {
|
|||||||
scene.Levels[scene.CurrentLevel].Update()
|
scene.Levels[scene.CurrentLevel].Update()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case scene.Game.Input.ActionIsJustPressed(config.Abort):
|
case inpututil.IsKeyJustPressed(ebiten.KeyEscape):
|
||||||
scene.SetNext(Popup)
|
scene.SetNext(Popup)
|
||||||
|
|
||||||
case scene.Game.Input.ActionIsJustPressed(config.Activate):
|
case inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonLeft):
|
||||||
// ok we're checking the menu button here, but drawing it in hud_system,
|
// ok we're checking the menu button here, but drawing it in hud_system,
|
||||||
// because systems can't switch scenes
|
// because systems can't switch scenes
|
||||||
if image.Pt(ebiten.CursorPosition()).In(scene.MenuRect) {
|
if image.Pt(ebiten.CursorPosition()).In(scene.MenuRect) {
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/ebitenui/ebitenui/widget"
|
"github.com/ebitenui/ebitenui/widget"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PopupScene struct {
|
type PopupScene struct {
|
||||||
@ -52,7 +53,7 @@ func (scene *PopupScene) Clearscreen() bool {
|
|||||||
func (scene *PopupScene) Update() error {
|
func (scene *PopupScene) Update() error {
|
||||||
scene.Ui.Update()
|
scene.Ui.Update()
|
||||||
|
|
||||||
if scene.Game.Input.ActionIsJustPressed(config.Abort) {
|
if inpututil.IsKeyJustPressed(ebiten.KeyEscape) {
|
||||||
scene.SetNext(Play)
|
scene.SetNext(Play)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/ebitenui/ebitenui/widget"
|
"github.com/ebitenui/ebitenui/widget"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SelectScene struct {
|
type SelectScene struct {
|
||||||
@ -55,7 +56,7 @@ func (scene *SelectScene) Clearscreen() bool {
|
|||||||
func (scene *SelectScene) Update() error {
|
func (scene *SelectScene) Update() error {
|
||||||
scene.Ui.Update()
|
scene.Ui.Update()
|
||||||
|
|
||||||
if scene.Game.Input.ActionIsJustPressed(config.Abort) {
|
if inpututil.IsKeyJustPressed(ebiten.KeyEscape) {
|
||||||
scene.SetNext(Menu)
|
scene.SetNext(Menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ func (scene *WelcomeScene) Clearscreen() bool {
|
|||||||
|
|
||||||
func (scene *WelcomeScene) Update() error {
|
func (scene *WelcomeScene) Update() error {
|
||||||
switch {
|
switch {
|
||||||
case scene.Game.Input.AnyKeyJustPressed():
|
case ebiten.IsKeyPressed(ebiten.KeyEnter):
|
||||||
scene.SetNext(Menu)
|
scene.SetNext(Menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
go.mod
2
go.mod
@ -25,8 +25,6 @@ require (
|
|||||||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
github.com/quasilyte/ebitengine-input v0.9.2-0.20240402074358-f9ddd61e57f7 // indirect
|
|
||||||
github.com/quasilyte/gmath v0.0.0-20221217210116-fba37a2e15c7 // indirect
|
|
||||||
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||||
github.com/tidwall/gjson v1.9.3 // indirect
|
github.com/tidwall/gjson v1.9.3 // indirect
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
|
|||||||
6
go.sum
6
go.sum
@ -237,12 +237,6 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
|
|||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||||
github.com/quasilyte/ebitengine-input v0.9.1 h1:sN7jNDLfGn9ZY1lurD4d3oXIOmQbZwYPVpuo4DlsiG0=
|
|
||||||
github.com/quasilyte/ebitengine-input v0.9.1/go.mod h1:xYkU+JqzWzjnVMolCIar0VFRly1TtjmEHfQWAoIan+o=
|
|
||||||
github.com/quasilyte/ebitengine-input v0.9.2-0.20240402074358-f9ddd61e57f7 h1:A33dnktcYAmgrFPSofTgLUPAos/ToFU0gN2f9KZIiug=
|
|
||||||
github.com/quasilyte/ebitengine-input v0.9.2-0.20240402074358-f9ddd61e57f7/go.mod h1:xYkU+JqzWzjnVMolCIar0VFRly1TtjmEHfQWAoIan+o=
|
|
||||||
github.com/quasilyte/gmath v0.0.0-20221217210116-fba37a2e15c7 h1:mvIS9aGirkzuYmHHNWAP6sLRoA5VFaIzMoFdPmqgPdY=
|
|
||||||
github.com/quasilyte/gmath v0.0.0-20221217210116-fba37a2e15c7/go.mod h1:EbI+KMbALSVE2s0YFOQpR4uj66zBh9ter5P4CBMSuvA=
|
|
||||||
github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
|
github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||||
|
|||||||
14
grid/grid.go
14
grid/grid.go
@ -159,28 +159,24 @@ func NewGrid(world *ecs.World,
|
|||||||
render.Image = tile.Sprite
|
render.Image = tile.Sprite
|
||||||
render.Pos = pos
|
render.Pos = pos
|
||||||
|
|
||||||
switch {
|
if tile.Animation.OnCollision {
|
||||||
case tile.Animation.OnCollision:
|
|
||||||
render.CollisionAnimate.Sprites = tile.Animation.CollisionSheet.Sprites
|
render.CollisionAnimate.Sprites = tile.Animation.CollisionSheet.Sprites
|
||||||
render.CollisionAnimate.Width = tile.Animation.CollisionSheet.Width
|
render.CollisionAnimate.Width = tile.Animation.CollisionSheet.Width
|
||||||
render.CollisionAnimate.Height = tile.Animation.CollisionSheet.Height
|
render.CollisionAnimate.Height = tile.Animation.CollisionSheet.Height
|
||||||
|
}
|
||||||
|
|
||||||
case tile.Animation.OnDestruction:
|
if tile.Animation.OnDestruction {
|
||||||
render.DestructionAnimate.Sprites = tile.Animation.DestructionSheet.Sprites
|
render.DestructionAnimate.Sprites = tile.Animation.DestructionSheet.Sprites
|
||||||
render.DestructionAnimate.Width = tile.Animation.DestructionSheet.Width
|
render.DestructionAnimate.Width = tile.Animation.DestructionSheet.Width
|
||||||
render.DestructionAnimate.Height = tile.Animation.DestructionSheet.Height
|
render.DestructionAnimate.Height = tile.Animation.DestructionSheet.Height
|
||||||
|
}
|
||||||
|
|
||||||
case tile.Animation.OnIdle:
|
if tile.Animation.OnIdle {
|
||||||
render.IdleAnimate.Sprites = tile.Animation.IdleSheet.Sprites
|
render.IdleAnimate.Sprites = tile.Animation.IdleSheet.Sprites
|
||||||
render.IdleAnimate.Width = tile.Animation.IdleSheet.Width
|
render.IdleAnimate.Width = tile.Animation.IdleSheet.Width
|
||||||
render.IdleAnimate.Height = tile.Animation.IdleSheet.Height
|
render.IdleAnimate.Height = tile.Animation.IdleSheet.Height
|
||||||
render.StartAnimation(components.Idle)
|
render.StartAnimation(components.Idle)
|
||||||
render.Hidden = true // we do NOT render the sprite, but the idle animation instead
|
render.Hidden = true // we do NOT render the sprite, but the idle animation instead
|
||||||
|
|
||||||
case tile.Animation.OnMoving:
|
|
||||||
render.MovingAnimate.Sprites = tile.Animation.IdleSheet.Sprites
|
|
||||||
render.MovingAnimate.Width = tile.Animation.IdleSheet.Width
|
|
||||||
render.MovingAnimate.Height = tile.Animation.IdleSheet.Height
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -8,13 +8,12 @@ import (
|
|||||||
. "openquell/config"
|
. "openquell/config"
|
||||||
"openquell/grid"
|
"openquell/grid"
|
||||||
"openquell/observers"
|
"openquell/observers"
|
||||||
"openquell/util"
|
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
|
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
|
||||||
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
||||||
"github.com/mlange-42/arche/ecs"
|
"github.com/mlange-42/arche/ecs"
|
||||||
"github.com/mlange-42/arche/generic"
|
"github.com/mlange-42/arche/generic"
|
||||||
input "github.com/quasilyte/ebitengine-input"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type PlayerSystem struct {
|
type PlayerSystem struct {
|
||||||
@ -22,18 +21,15 @@ type PlayerSystem struct {
|
|||||||
Selector *generic.Filter4[Position, Velocity, Player, Renderable]
|
Selector *generic.Filter4[Position, Velocity, Player, Renderable]
|
||||||
GridContainer *grid.GridContainer
|
GridContainer *grid.GridContainer
|
||||||
Width, Height int
|
Width, Height int
|
||||||
Input *input.Handler
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPlayerSystem(world *ecs.World, gridcontainer *grid.GridContainer,
|
func NewPlayerSystem(world *ecs.World, gridcontainer *grid.GridContainer, width, height int) System {
|
||||||
width, height int, handler *input.Handler) System {
|
|
||||||
system := &PlayerSystem{
|
system := &PlayerSystem{
|
||||||
Selector: generic.NewFilter4[Position, Velocity, Player, Renderable](),
|
Selector: generic.NewFilter4[Position, Velocity, Player, Renderable](),
|
||||||
GridContainer: gridcontainer,
|
GridContainer: gridcontainer,
|
||||||
World: world,
|
World: world,
|
||||||
Width: width,
|
Width: width,
|
||||||
Height: height,
|
Height: height,
|
||||||
Input: handler,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return system
|
return system
|
||||||
@ -140,9 +136,7 @@ func (system *PlayerSystem) Draw(screen *ebiten.Image) {
|
|||||||
|
|
||||||
screen.DrawImage(sprite.Image, op)
|
screen.DrawImage(sprite.Image, op)
|
||||||
|
|
||||||
if util.DebugEnabled() {
|
ebitenutil.DebugPrintAt(screen, pos.String(), pos.X, pos.Y) // print player pos
|
||||||
ebitenutil.DebugPrintAt(screen, pos.SmallString(), pos.X, pos.Y+16) // print player pos
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +164,7 @@ func (system *PlayerSystem) SwitchPlayers() {
|
|||||||
render.Image = player.SwitchSprite()
|
render.Image = player.SwitchSprite()
|
||||||
} else {
|
} else {
|
||||||
// many players, switch when requested
|
// many players, switch when requested
|
||||||
if system.Input.ActionIsJustPressed(SwitchPlayer) {
|
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
|
||||||
slog.Debug("switch players")
|
slog.Debug("switch players")
|
||||||
if player.IsPrimary {
|
if player.IsPrimary {
|
||||||
player.IsPrimary = false
|
player.IsPrimary = false
|
||||||
@ -195,16 +189,16 @@ func (system *PlayerSystem) CheckMovement(
|
|||||||
|
|
||||||
if !velocity.Moving() {
|
if !velocity.Moving() {
|
||||||
switch {
|
switch {
|
||||||
case system.Input.ActionIsJustPressed(MoveRight):
|
case inpututil.IsKeyJustPressed(ebiten.KeyRight):
|
||||||
velocity.Change(East)
|
velocity.Change(East)
|
||||||
moved = true
|
moved = true
|
||||||
case system.Input.ActionIsJustPressed(MoveLeft):
|
case inpututil.IsKeyJustPressed(ebiten.KeyLeft):
|
||||||
velocity.Change(West)
|
velocity.Change(West)
|
||||||
moved = true
|
moved = true
|
||||||
case system.Input.ActionIsPressed(MoveDown):
|
case inpututil.IsKeyJustPressed(ebiten.KeyDown):
|
||||||
velocity.Change(South)
|
velocity.Change(South)
|
||||||
moved = true
|
moved = true
|
||||||
case system.Input.ActionIsJustPressed(MoveUp):
|
case inpututil.IsKeyJustPressed(ebiten.KeyUp):
|
||||||
velocity.Change(North)
|
velocity.Change(North)
|
||||||
moved = true
|
moved = true
|
||||||
}
|
}
|
||||||
@ -216,9 +210,7 @@ func (system *PlayerSystem) CheckMovement(
|
|||||||
observer.AddMove()
|
observer.AddMove()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if util.DebugEnabled() {
|
fmt.Println("------------------------")
|
||||||
fmt.Println("------------------------")
|
|
||||||
}
|
|
||||||
slog.Debug("(1) player is at", "current", position.String())
|
slog.Debug("(1) player is at", "current", position.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,7 @@
|
|||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
. "openquell/config"
|
. "openquell/config"
|
||||||
|
|
||||||
"log/slog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// find an item in a list, generic variant
|
// find an item in a list, generic variant
|
||||||
@ -44,7 +41,3 @@ func DirectionStr(dir int) string {
|
|||||||
|
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
func DebugEnabled() bool {
|
|
||||||
return slog.Default().Enabled(context.TODO(), slog.LevelDebug)
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user