diff options
author | UbitUmarov | 2012-03-10 20:32:19 +0000 |
---|---|---|
committer | UbitUmarov | 2012-03-10 20:32:19 +0000 |
commit | 908abb1c3dded307e769abac71f660b835875975 (patch) | |
tree | 755d4e532a94346fe1960e3870f07767fbcfdd4a /OpenSim/Region/ClientStack/Linden | |
parent | ubitOde bug (diff) | |
download | opensim-SC_OLD-908abb1c3dded307e769abac71f660b835875975.zip opensim-SC_OLD-908abb1c3dded307e769abac71f660b835875975.tar.gz opensim-SC_OLD-908abb1c3dded307e769abac71f660b835875975.tar.bz2 opensim-SC_OLD-908abb1c3dded307e769abac71f660b835875975.tar.xz |
BIG MESS. changed Iclient interface so only one event is used to inform scene about position scale or rotation change by client (others can be added). Its served at SceneGraph that does permition checks, undostore and sends down to SOG. changed values are stored in a class (ObjectChangeData) and what is changed as a enum (ObjectChangeWhat) with bit fields and 'macros' of this for better readability (at top of scenegraph.cs lasy to find better place for now) this can be extended for other things clients changes and need undo/redo. SOG process acording to what is changed. Changed UNDO/redo to use this also (warning is only storing what is changed, previus stored all, this must be checked for side efects. to save all PRS change commented line in scenegraph). Still have excessive calls to ScheduleGroupForTerseUpdate. **** UNTESTED ****
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 156 |
1 files changed, 143 insertions, 13 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 051c4fa..7d51323 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -125,6 +125,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
125 | public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily; | 125 | public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily; |
126 | public event UpdatePrimFlags OnUpdatePrimFlags; | 126 | public event UpdatePrimFlags OnUpdatePrimFlags; |
127 | public event UpdatePrimTexture OnUpdatePrimTexture; | 127 | public event UpdatePrimTexture OnUpdatePrimTexture; |
128 | public event ClientChangeObject onClientChangeObject; | ||
128 | public event UpdateVector OnUpdatePrimGroupPosition; | 129 | public event UpdateVector OnUpdatePrimGroupPosition; |
129 | public event UpdateVector OnUpdatePrimSinglePosition; | 130 | public event UpdateVector OnUpdatePrimSinglePosition; |
130 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 131 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
@@ -11517,22 +11518,151 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11517 | // parts[j].IgnoreUndoUpdate = true; | 11518 | // parts[j].IgnoreUndoUpdate = true; |
11518 | // } | 11519 | // } |
11519 | 11520 | ||
11520 | UpdatePrimGroupRotation handlerUpdatePrimGroupRotation; | 11521 | // UpdatePrimGroupRotation handlerUpdatePrimGroupRotation; |
11521 | UpdateVector handlerUpdatePrimGroupScale; | 11522 | // UpdateVector handlerUpdatePrimGroupScale; |
11522 | 11523 | ||
11523 | Quaternion arot; | 11524 | ClientChangeObject updatehandler = onClientChangeObject; |
11524 | Vector3 ascale; | 11525 | |
11525 | Vector3 apos; | 11526 | if (updatehandler != null) |
11526 | /*ubit from ll JIRA: | 11527 | { |
11527 | * 0x01 position | 11528 | ObjectChangeData udata = new ObjectChangeData(); |
11528 | * 0x02 rotation | 11529 | |
11529 | * 0x04 scale | 11530 | /*ubit from ll JIRA: |
11531 | * 0x01 position | ||
11532 | * 0x02 rotation | ||
11533 | * 0x04 scale | ||
11530 | 11534 | ||
11531 | * 0x08 LINK_SET | 11535 | * 0x08 LINK_SET |
11532 | * 0x10 UNIFORM for scale | 11536 | * 0x10 UNIFORM for scale |
11533 | */ | 11537 | */ |
11538 | |||
11539 | // translate to internal changes | ||
11540 | // not all cases .. just the ones older code did | ||
11541 | |||
11542 | switch (block.Type) | ||
11543 | { | ||
11544 | case 1: //change position sp | ||
11545 | udata.position = new Vector3(block.Data, 0); | ||
11546 | |||
11547 | udata.what = ObjectChangeWhat.primP; | ||
11548 | updatehandler(localId, udata, this); | ||
11549 | break; | ||
11550 | |||
11551 | case 2: // rotation sp | ||
11552 | udata.rotation = new Quaternion(block.Data, 0, true); | ||
11553 | |||
11554 | udata.what = ObjectChangeWhat.primR; | ||
11555 | updatehandler(localId, udata, this); | ||
11556 | break; | ||
11557 | |||
11558 | case 3: // position plus rotation | ||
11559 | udata.position = new Vector3(block.Data, 0); | ||
11560 | udata.rotation = new Quaternion(block.Data, 12, true); | ||
11561 | |||
11562 | udata.what = ObjectChangeWhat.primPR; | ||
11563 | updatehandler(localId, udata, this); | ||
11564 | |||
11565 | break; | ||
11566 | |||
11567 | case 4: // scale sp | ||
11568 | udata.scale = new Vector3(block.Data, 0); | ||
11569 | udata.what = ObjectChangeWhat.primS; | ||
11570 | |||
11571 | updatehandler(localId, udata, this); | ||
11572 | break; | ||
11573 | |||
11574 | case 0x14: // uniform scale sp | ||
11575 | udata.scale = new Vector3(block.Data, 0); | ||
11576 | |||
11577 | udata.what = ObjectChangeWhat.primUS; | ||
11578 | updatehandler(localId, udata, this); | ||
11579 | break; | ||
11580 | |||
11581 | case 5: // scale and position sp | ||
11582 | udata.position = new Vector3(block.Data, 0); | ||
11583 | udata.scale = new Vector3(block.Data, 12); | ||
11584 | |||
11585 | udata.what = ObjectChangeWhat.primPS; | ||
11586 | updatehandler(localId, udata, this); | ||
11587 | break; | ||
11588 | |||
11589 | case 0x15: //uniform scale and position | ||
11590 | udata.position = new Vector3(block.Data, 0); | ||
11591 | udata.scale = new Vector3(block.Data, 12); | ||
11592 | |||
11593 | udata.what = ObjectChangeWhat.primPUS; | ||
11594 | updatehandler(localId, udata, this); | ||
11595 | break; | ||
11534 | 11596 | ||
11597 | // now group related (bit 4) | ||
11598 | case 9: //( 8 + 1 )group position | ||
11599 | udata.position = new Vector3(block.Data, 0); | ||
11535 | 11600 | ||
11601 | udata.what = ObjectChangeWhat.groupP; | ||
11602 | updatehandler(localId, udata, this); | ||
11603 | break; | ||
11604 | |||
11605 | case 0x0A: // (8 + 2) group rotation | ||
11606 | udata.rotation = new Quaternion(block.Data, 0, true); | ||
11607 | |||
11608 | udata.what = ObjectChangeWhat.groupR; | ||
11609 | updatehandler(localId, udata, this); | ||
11610 | break; | ||
11611 | |||
11612 | case 0x0B: //( 8 + 2 + 1) group rotation and position | ||
11613 | udata.position = new Vector3(block.Data, 0); | ||
11614 | udata.rotation = new Quaternion(block.Data, 12, true); | ||
11615 | |||
11616 | udata.what = ObjectChangeWhat.groupPR; | ||
11617 | updatehandler(localId, udata, this); | ||
11618 | break; | ||
11619 | |||
11620 | case 0x0C: // (8 + 4) group scale | ||
11621 | // only afects root prim and only sent by viewer editor object tab scaling | ||
11622 | // mouse edition only allows uniform scaling | ||
11623 | // SL MAY CHANGE THIS in viewers | ||
11624 | |||
11625 | udata.scale = new Vector3(block.Data, 0); | ||
11626 | |||
11627 | // udata.what = ObjectChangeWhat.groupS; | ||
11628 | udata.what = ObjectChangeWhat.primS; // to conform to current SL | ||
11629 | updatehandler(localId, udata, this); | ||
11630 | |||
11631 | break; | ||
11632 | |||
11633 | case 0x0D: //(8 + 4 + 1) group scale and position | ||
11634 | // exception as above | ||
11635 | |||
11636 | udata.position = new Vector3(block.Data, 0); | ||
11637 | udata.scale = new Vector3(block.Data, 12); | ||
11638 | |||
11639 | // udata.what = ObjectChangeWhat.groupPS; | ||
11640 | udata.what = ObjectChangeWhat.primPS; // to conform to current SL | ||
11641 | updatehandler(localId, udata, this); | ||
11642 | break; | ||
11643 | |||
11644 | case 0x1C: // (0x10 + 8 + 4 ) group scale UNIFORM | ||
11645 | udata.scale = new Vector3(block.Data, 0); | ||
11646 | |||
11647 | udata.what = ObjectChangeWhat.groupUS; | ||
11648 | updatehandler(localId, udata, this); | ||
11649 | break; | ||
11650 | |||
11651 | case 0x1D: // (UNIFORM + GROUP + SCALE + POS) | ||
11652 | udata.position = new Vector3(block.Data, 0); | ||
11653 | udata.scale = new Vector3(block.Data, 12); | ||
11654 | |||
11655 | udata.what = ObjectChangeWhat.groupPUS; | ||
11656 | updatehandler(localId, udata, this); | ||
11657 | break; | ||
11658 | |||
11659 | default: | ||
11660 | m_log.Debug("[CLIENT]: MultipleObjUpdate recieved an unknown packet type: " + (block.Type)); | ||
11661 | break; | ||
11662 | } | ||
11663 | } | ||
11664 | |||
11665 | /* | ||
11536 | switch (block.Type) | 11666 | switch (block.Type) |
11537 | { | 11667 | { |
11538 | case 1: //change position sp | 11668 | case 1: //change position sp |
@@ -11788,7 +11918,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11788 | m_log.Debug("[CLIENT]: MultipleObjUpdate recieved an unknown packet type: " + (block.Type)); | 11918 | m_log.Debug("[CLIENT]: MultipleObjUpdate recieved an unknown packet type: " + (block.Type)); |
11789 | break; | 11919 | break; |
11790 | } | 11920 | } |
11791 | 11921 | */ | |
11792 | // for (int j = 0; j < parts.Length; j++) | 11922 | // for (int j = 0; j < parts.Length; j++) |
11793 | // parts[j].IgnoreUndoUpdate = false; | 11923 | // parts[j].IgnoreUndoUpdate = false; |
11794 | 11924 | ||