 |
 |
Developpement Empirium
|
 |
 |
 |
 |
|
 |
 |
 |
 |
 |
Funnydead Fille (vu la piplette)

Inscrit le: 05 Mai 2004 Messages: 1396
 |
Posté le: Mar 10 Mar 2009, 20:32 Sujet du message: Aide à la naviguation ! |
 |
|
Max, actuellement, qd on décide de se donner rendez vous à un point précis, il faut faire preuve de pas mal de "brains storming" pour savoir dans quelle direction déplacer sa flotte...
Ne pourrais tu pas nous faire un petit champs dans l'onget déplacement où on met les coordonnées où on dois aller.. Une flèche Bleu se dessinerais sur l'écran pour dire : Hey gus, va là bas !! "
Un peu comme la flèche de la position préscedente... ca ferais comme une ligne directrice a suivre ! _________________ http://funnydead.labrute.fr |
|
|
|
|
|
 |
 |
 |
 |
 |
Apocalypse Mais débranchez l'bordel !!

Inscrit le: 25 Nov 2005 Messages: 3697 Localisation: Commodore Supernova's Feeling  |
Posté le: Mar 10 Mar 2009, 20:53 Sujet du message: |
 |
|
J'avoue. Surtout que quand je suis en LettreChiffre, je dois toujours regarder quels sont les secteurs environnants^^ _________________ Maître Apocalypse
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Varek Seigneur a clavier intégré

Inscrit le: 27 Mai 2008 Messages: 166
 |
Posté le: Mar 10 Mar 2009, 22:53 Sujet du message: |
 |
|
Oui j'avoue ce serait cool ca _________________ Varek Chevalier de l'Ordre Saint
Le monde aurait pu être simple comme le ciel et la mer |
|
|
|
|
|
 |
 |
 |
 |
 |
Max Créateur du Jeu

Inscrit le: 23 Jan 2003 Messages: 8277
 |
Posté le: Mer 11 Mar 2009, 11:03 Sujet du message: |
 |
|
C'est le pilote automatique dont certains avaient déjà parlé.
Si quelqu'un veut faire avancer le sujet, il peut me faire un document avec les 2 ou 3 formules à utiliser et les calculs à effectuer, en utilisant ces variables :
- DestinationX ( on dirait un titre de film de ... )
- DestinationY
- ActuelleX X/Y de la position actuelle du vsu
- ActuelleY
- DeplacementMax : distance maximale que peut parcourir le vsu en 1 tour
- DeplacementX X/Y du mouvement à faire ce tour
- DeplacementY
Et merci de tester ce que vous me rendez !
Exemple : tester avec des coordonnées "tout positif" (142/52 vers 200/200), tout négatif (-145/-10 vers -200/-108), et des mélanges (-100/28 vers 40/-20 etc...). _________________ AUCUN HRP sur les forums RP merci
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Apocalypse Mais débranchez l'bordel !!

Inscrit le: 25 Nov 2005 Messages: 3697 Localisation: Commodore Supernova's Feeling  |
Posté le: Mer 11 Mar 2009, 12:30 Sujet du message: |
 |
|
Ca me rappelle les sorts que je fais en jass sur Warcaft ^^. On va encore y aller à coup d'angles, d'arc tangente etc...
Voilà un saut en VJass
Promis je fais ce que tu demandes d'ici quelques minutes.
PS: tu voudrais pas installer un module de balises spoiler sur les forums?
Citation: | library Jump needs TimerUtils
//==========================================================================================
globals
private constant real TIMEOUT = 0.02
private constant integer TYPE = 'o02D'
private unit TEST = null
private constant integer RAVEN = 'Amrf'
endglobals
//==========================================================================================
//==========================================================================================
struct jumps
unit target
real angle
integer distance
integer vit
integer i
real imp
endstruct
//==========================================================================================
private function Action takes nothing returns nothing
local timer t = GetExpiredTimer()
local jumps js = GetTimerData(t)
local real newX = GetUnitX(js.target) + js.vit*Cos(js.angle)
local real newY = GetUnitY(js.target) + js.vit*Sin(js.angle)
local real z = GetUnitFlyHeight(js.target)
local real newz = 0.00
if (js.i < js.distance) and GetTerrainCliffLevel(newX,newY)<=4 then
set js.i = js.i + 1
if RectContainsUnit(gg_rct_arena,js.target ) == true and GetTerrainCliffLevel(newX,newY)>=1 then
call SetUnitPosition(js.target, newX, newY)
endif
if (js.i < (js.distance * 0.5)) then
set newz = z + (js.distance * js.imp)
else
set newz = z - (js.distance * js.imp)
endif
call SetUnitFlyHeight(js.target, newz, 0.00)
else
call SetUnitPathing( js.target, true)
call SelectUnitForPlayerSingle( js.target, GetOwningPlayer(js.target) )
call UnitRemoveAbility( js.target, RAVEN)
call SetUnitAnimation(js.target, "Stand")
call ReleaseTimer(t)
call js.destroy()
endif
endfunction
//==========================================================================================
function jump takes unit u, integer speed, real x1, real y1, real x2, real y2, real imp returns nothing
local timer t = NewTimer()
local jumps js = jumps.create()
call SetUnitPathing( u, false)
set js.target = u
set js.angle = Atan2((y2 -y1), (x2 - x1))
set js.distance = R2I(DistanceBetweenPoints(Location(x1,y1),Location(x2,y2)))/speed
set js.vit = speed
set js.i = 0
set js.imp = imp
call SetTimerData(t, js)
call TimerStart (t, TIMEOUT, true, function Action )
call UnitAddAbility(js.target, RAVEN)
endfunction
endlibrary |
_________________ Maître Apocalypse
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Apocalypse Mais débranchez l'bordel !!

Inscrit le: 25 Nov 2005 Messages: 3697 Localisation: Commodore Supernova's Feeling  |
Posté le: Mer 11 Mar 2009, 13:01 Sujet du message: |
 |
|
Et voilà.
Le seul hic c'est que je ne sais pas de quelles fonctions tu dispose sur Empirium niveau maths :/
 _________________ Maître Apocalypse
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Max Créateur du Jeu

Inscrit le: 23 Jan 2003 Messages: 8277
 |
Posté le: Mer 11 Mar 2009, 13:25 Sujet du message: |
 |
|
Merci !
Mais faut laisser un peu de taf aux autres, tu fais déjà plein de choses.
Les fonctions :
http://fr.php.net/manual/fr/ref.math.php _________________ AUCUN HRP sur les forums RP merci
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Würm je sais pas mais ca cause beaucoup

Inscrit le: 02 Mai 2008 Messages: 425 Localisation: Mar Tosca  |
Posté le: Mer 11 Mar 2009, 15:02 Sujet du message: |
 |
|
Bonjour,
il y a des erreurs dans ta formule :
La distance est Racine(X² + Y²) et non Racine(X² - Y²) comme tu l'as écrit (mais le résultat est juste);
Tu affiches l'inverse de l'angle calculé par Atan2 (ou c'est mon Excel qui plante :p);
Sinon dans le premier exemple, tu es en Y52 et tu te déplaces en Y48, pour aller en Y200 :
il faudrait inverser Sin et Cos dans le calcul du déplacement
Ce qui donnerait donc :
DeplacementX = Ent [ ActuelX + DeplacementMax * Sin (Angle) ]
DeplacementY = Ent [ ActuelY + DeplacementMax * Cos (Angle) ] |
|
|
|
|
|
 |
 |
 |
 |
 |
Max Créateur du Jeu

Inscrit le: 23 Jan 2003 Messages: 8277
 |
Posté le: Mer 11 Mar 2009, 15:25 Sujet du message: |
 |
|
Pour contrôle, merci d'ajouter dans ta feuille de calcul la distance entre la position actuelle et la position DeplacementX/DeplacementY. _________________ AUCUN HRP sur les forums RP merci
 |
|
|
|
|
|
 |
 |
 |
 |
 |
Apocalypse Mais débranchez l'bordel !!

Inscrit le: 25 Nov 2005 Messages: 3697 Localisation: Commodore Supernova's Feeling  |
Posté le: Mer 11 Mar 2009, 17:57 Sujet du message: |
 |
|
En fait la racine carrée est juste, c'est simplement l'explication de la formule qui plante
L'angle: exact. J'ai inversé les X dans mon calcul.
Inverser Sin et Cos? Pourquoi dont?
J'ai remplacé la fonction Ent par Floor (celle du php)
Ajout de la formule de contrôle de distance.
Y'a une marge d'erreur, vu que la partie entière arrondi à l'entier inférieur.
 _________________ Maître Apocalypse
 |
|
|
|
|
|
 |
 |
 |
 |
 |
|
 |
 |
 |
 |
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|
|
 |