Skip to content

Instantly share code, notes, and snippets.

@rafalw
Last active July 13, 2021 15:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafalw/1981945 to your computer and use it in GitHub Desktop.
Save rafalw/1981945 to your computer and use it in GitHub Desktop.
Symulator miecza świetlnego (WiiRemote + PC)
# -*- coding: utf-8 -*-
import cwiid
import pygame
import time
import random
print 'Press 1+2 on your Wiimote now...'
wm = cwiid.Wiimote()
time.sleep(1)
wm.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC | cwiid.RPT_IR
wm.led = 0
pygame.init()
# licznik dla diod
i = 0
# włączenie/wyłączenie miecza
power = False
# przyciski bezodbiciowe
a_wcisniety = False
a_powtorzenie = False
b_wcisniety = False
b_powtorzenie = False
# stan początkowy przyspieszenia dla wszystkich współrzędnych
accel_x = 0
accel_y = 0
accel_z = 0
print "-----------------------------------------------------"
print "OK, let's get some fun:"
print "Press \"A\" button to turn on/off your lightsaber."
print "Press \"B\" button to exit simulator."
print "-----------------------------------------------------"
while True:
# Włączenie/wyłączenie miecza
if wm.state['buttons'] == 8: # przycisk A
a_wcisniety = True
if a_wcisniety and not a_powtorzenie:
power = not power
# Wydobycie/chowanie promienia
pygame.mixer.Sound('on.wav').play()
if power == True:
i = 0
else:
wm.led = 0
a_powtorzenie = True
else:
a_wcisniety = a_powtorzenie = False
if wm.state['buttons'] == 4: # przycisk B
b_wcisniety = True
if b_wcisniety and not b_powtorzenie:
if power:
print "Turn off your lightsaber!"
else:
print "May the Force be with you. Always."
quit()
b_powtorzenie = True
else:
b_wcisniety = b_powtorzenie = False
# Miecz działa, gdy zmienna 'power' ma wartość True:
if power == True:
# Dźwięk miecza w bezruchu
pygame.mixer.Sound('default.wav').play()
wm.rumble = False
# Obsługa migających diodek
if i == 6:
i = 0
if i == 0:
wm.led = 1
elif (i == 1) or (i == 5):
wm.led = 2
elif (i == 2) or (i == 4):
wm.led = 4
elif i == 3:
wm.led = 8
i += 1
# Analizowanie przyspieszenia
# przypadek początkowy
if (accel_x == 0) and (accel_y == 0) and (accel_z == 0):
accel_x = wm.state['acc'][0]
accel_y = wm.state['acc'][1]
accel_z = wm.state['acc'][2]
else:
# pobór aktualnego położenia
tmp_acc_x = wm.state['acc'][0]
tmp_acc_y = wm.state['acc'][1]
tmp_acc_z = wm.state['acc'][2]
acc_abs_diff_x = abs(accel_x - tmp_acc_x)
acc_abs_diff_y = abs(accel_y - tmp_acc_y)
acc_abs_diff_z = abs(accel_z - tmp_acc_z)
print "acc_abs_diff_x = ", str(acc_abs_diff_x)
print "acc_abs_diff_y = ", str(acc_abs_diff_y)
print "acc_abs_diff_z = ", str(acc_abs_diff_z)
if (acc_abs_diff_x > 10) or (acc_abs_diff_y > 10) or (acc_abs_diff_z > 10):
accel_x = tmp_acc_x
accel_y = tmp_acc_y
accel_z = tmp_acc_z
# dźwięk ruchu
number = random.randint(0, 9)
pygame.mixer.Sound('ltsaberswing0' + str(number) + '.wav').play()
wm.rumble = True
else:
wm.rumble = False
# Opóźnienie
time.sleep(.1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment